util-helpers 4.7.0 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -52,6 +52,7 @@ formatMoney('1000'); // => 1,000.00
52
52
  - [formatBankCard](https://doly-dev.github.io/util-helpers/module-Processor.html#.formatBankCard) - 格式化银行卡
53
53
  - [normalizeString](https://doly-dev.github.io/util-helpers/module-Processor.html#.normalizeString) - 规整化字符串,如果值为 `undefined` `null` 转为 '',如果不是字符串类型则转为字符串
54
54
  - [numberToChinese](https://doly-dev.github.io/util-helpers/module-Processor.html#.numberToChinese) - 数字转中文数字
55
+ - [padZero](https://doly-dev.github.io/util-helpers/module-Processor.html#.padZero) - 前置补零
55
56
  - [parseIdCard](https://doly-dev.github.io/util-helpers/module-Processor.html#.parseIdCard) - 解析身份证号码
56
57
  - [replaceChar](https://doly-dev.github.io/util-helpers/module-Processor.html#.replaceChar) - 替换字符,应用场景如:脱敏
57
58
  - [safeDate](https://doly-dev.github.io/util-helpers/module-Processor.html#.safeDate) - 创建一个 Date 实例,同 new Date
@@ -80,6 +81,7 @@ formatMoney('1000'); // => 1,000.00
80
81
  - [validatePassword](https://doly-dev.github.io/util-helpers/module-Validator.html#.validatePassword) - 验证密码
81
82
  - 其他
82
83
  - [calculateCursorPosition](https://doly-dev.github.io/util-helpers/module-Other.html#.calculateCursorPosition) - 计算光标位置
84
+ - [randomString](https://doly-dev.github.io/util-helpers/module-Other.html#.randomString) - 随机字符串
83
85
  - [waitTime](https://doly-dev.github.io/util-helpers/module-Other.html#.waitTime) - 等待时间返回 Promise
84
86
 
85
87
  ## 精选第三方工具库
@@ -151,7 +151,7 @@
151
151
  if (num < 10) {
152
152
  return num === Number(id[17]);
153
153
  } else {
154
- return id[17] == 'X';
154
+ return id[17].toUpperCase() === 'X';
155
155
  }
156
156
  }
157
157
 
@@ -357,9 +357,6 @@
357
357
  // 基础字符组成
358
358
  const baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');
359
359
 
360
- //加权因子
361
- const weightFactor = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];
362
-
363
360
  /**
364
361
  * 获取字符位置
365
362
  *
@@ -400,7 +397,7 @@
400
397
  // 字符位置对应的基础编码序号
401
398
  const index = getBaseCodeIndex(preCode[i]);
402
399
  // 加权因子
403
- const wf = weightFactor[i];
400
+ const wf = Math.pow(3, i) % 31;
404
401
  // 计算序号和加权因子的乘积,并计算级数之和
405
402
  total += index * wf;
406
403
  }
@@ -2599,6 +2596,49 @@
2599
2596
  return pos;
2600
2597
  }
2601
2598
 
2599
+ const numberChars = '0123456789';
2600
+ const letterChars = 'abcdefghijklmnopqrstuvwxyz';
2601
+ const defaultChars = numberChars + letterChars + letterChars.toUpperCase();
2602
+
2603
+ /**
2604
+ * @private
2605
+ * @param {number} [len=0] 长度
2606
+ * @param {string} [optionalChars] 允许的字符,默认为数字和大小写字母
2607
+ * @param {string} [prefix=''] 前缀部分,不计入长度
2608
+ * @returns {string}
2609
+ */
2610
+ function internalRandomString(len = 0, optionalChars = defaultChars, prefix = '') {
2611
+ while (len-- > 0) {
2612
+ const r = optionalChars[Math.floor(Math.random() * optionalChars.length)];
2613
+ return internalRandomString(len, optionalChars, prefix + r);
2614
+ }
2615
+ return prefix;
2616
+ }
2617
+
2618
+ /**
2619
+ * 生成随机字符串
2620
+ *
2621
+ * @static
2622
+ * @alias module:Other.randomString
2623
+ * @since 4.8.0
2624
+ * @param {number} [len=0] 长度
2625
+ * @param {string} [optionalChars] 允许的字符,默认为数字和大小写字母
2626
+ * @returns {string} 随机字符串
2627
+ * @example
2628
+ * randomString(5); // slk23
2629
+ * randomString(8); // 71mHqo2A
2630
+ *
2631
+ * // 自定义允许的字符
2632
+ * randomString(5, 'abc'); // ccbcb
2633
+ * randomString(8, 'abcefg'); // bcgcfabg
2634
+ */
2635
+ function randomString(len = 0, optionalChars) {
2636
+
2637
+ const realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;
2638
+
2639
+ return internalRandomString(len, realChars);
2640
+ }
2641
+
2602
2642
  exports.blobToDataURL = blobToDataURL;
2603
2643
  exports.bytesToSize = bytesToSize;
2604
2644
  exports.calculateCursorPosition = calculateCursorPosition;
@@ -2633,6 +2673,7 @@
2633
2673
  exports.padZero = padZero;
2634
2674
  exports.parseIdCard = parseIdCard;
2635
2675
  exports.plus = plus;
2676
+ exports.randomString = randomString;
2636
2677
  exports.replaceChar = replaceChar;
2637
2678
  exports.round = round;
2638
2679
  exports.safeDate = safeDate;
@@ -2645,4 +2686,4 @@
2645
2686
  Object.defineProperty(exports, '__esModule', { value: true });
2646
2687
 
2647
2688
  })));
2648
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC1oZWxwZXJzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvdHlwZS9pc1R5cGUuanMiLCIuLi9zcmMvdXRpbHMvdHlwZS9pc1N0cmluZy5qcyIsIi4uL3NyYy91dGlscy9jb252ZXJ0VG9TdHJpbmcuanMiLCIuLi9zcmMvaXNNb2JpbGUuanMiLCIuLi9zcmMvaXNUZWxlcGhvbmUuanMiLCIuLi9zcmMvaXNQb3N0Y29kZS5qcyIsIi4uL3NyYy9pc0lkQ2FyZC5qcyIsIi4uL3NyYy9pc0VtYWlsLmpzIiwiLi4vc3JjL2lzUVEuanMiLCIuLi9zcmMvaXNXWC5qcyIsIi4uL3NyYy9pc1ZlaGljbGUuanMiLCIuLi9zcmMvaXNCYW5rQ2FyZC5qcyIsIi4uL3NyYy9pc1NvY2lhbENyZWRpdENvZGUuanMiLCIuLi9zcmMvdXRpbHMvY29uZmlnLmpzIiwiLi4vc3JjL3ZhbGlkYXRlUGFzc3dvcmQuanMiLCIuLi9zcmMvaXNQYXNzd29yZC5qcyIsIi4uL3NyYy9pc1Bhc3Nwb3J0LmpzIiwiLi4vc3JjL2lzQ2hpbmVzZS5qcyIsIi4uL3NyYy9pc0lQdjQuanMiLCIuLi9zcmMvaXNJUHY2LmpzIiwiLi4vc3JjL2lzVXJsLmpzIiwiLi4vc3JjL2lzQnVzaW5lc3NMaWNlbnNlLmpzIiwiLi4vc3JjL2lzUHJvbWlzZUxpa2UuanMiLCIuLi9zcmMvaXNITUNhcmQuanMiLCIuLi9zcmMvaXNUV0NhcmQuanMiLCIuLi9zcmMvdXRpbHMvY29uc3RhbnRzLmpzIiwiLi4vc3JjL3V0aWxzL21hdGgudXRpbC5qcyIsIi4uL3NyYy91dGlscy90eXBlL2lzTmFOLmpzIiwiLi4vc3JjL2Zvcm1hdE1vbmV5LmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUvaXNVbmRlZmluZWQuanMiLCIuLi9zcmMvdXRpbHMvdHlwZS9pc051bGwuanMiLCIuLi9zcmMvdXRpbHMvdHlwZS9pc05pbC5qcyIsIi4uL3NyYy9ub3JtYWxpemVTdHJpbmcuanMiLCIuLi9zcmMvZm9ybWF0QmFua0NhcmQuanMiLCIuLi9zcmMvcmVwbGFjZUNoYXIuanMiLCIuLi9zcmMvbnVtYmVyVG9DaGluZXNlLmpzIiwiLi4vc3JjL2J5dGVzVG9TaXplLmpzIiwiLi4vc3JjL3BhcnNlSWRDYXJkLmpzIiwiLi4vc3JjL2Jsb2JUb0RhdGFVUkwuanMiLCIuLi9zcmMvZGF0YVVSTFRvQmxvYi5qcyIsIi4uL3NyYy9zZXREYXRhVVJMUHJlZml4LmpzIiwiLi4vc3JjL3NhZmVEYXRlLmpzIiwiLi4vc3JjL2Zvcm1hdE1vYmlsZS5qcyIsIi4uL3NyYy9wYWRaZXJvLmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUvaXNOdW1iZXIuanMiLCIuLi9zcmMvdGltZXMuanMiLCIuLi9zcmMvcGx1cy5qcyIsIi4uL3NyYy9taW51cy5qcyIsIi4uL3NyYy9kaXZpZGUuanMiLCIuLi9zcmMvcm91bmQuanMiLCIuLi9zcmMvd2FpdFRpbWUuanMiLCIuLi9zcmMvY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIOajgOa1i+WAvOeahCBgdG9TdHJpbmdgIOexu+Wei1xuICpcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg5qOA5p+l5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZW5hbWUg57G75Z6L5ZCN56ewXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g6L+U5Zue5YC855qEIGB0b1N0cmluZ2Ag57G75Z6L5piv5ZCm5Yy56YWNXG4gKi9cbmZ1bmN0aW9uIGlzVHlwZSh2YWx1ZSwgdHlwZW5hbWUpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBgW29iamVjdCAke3R5cGVuYW1lfV1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGU7XG4iLCJpbXBvcnQgaXNUeXBlIGZyb20gJy4vaXNUeXBlJztcblxuLyoqXG4gKiDmo4Dmn6XlgLzmmK/lkKbkuLpTdHJpbmdcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlR5cGUuaXNTdHJpbmdcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDmo4Dmn6XlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDmmK/lkKbkuLpTdHJpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogaXNTdHJpbmcoJ2FiYycpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNTdHJpbmcoMSlcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBpc1R5cGUodmFsdWUsICdTdHJpbmcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTdHJpbmc7XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi90eXBlL2lzU3RyaW5nJztcblxuLyoqXG4gKiDovazmjaLkuLrlrZfnrKbkuLJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIOWAvFxuICogQHJldHVybnMge3N0cmluZ30g5a2X56ym5LiyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb252ZXJ0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g5omL5py65Y+356CBIDEx5L2N5pWw5a2X77yM5LulMeW8gOWktO+8jOesrOS6jOS9jeaYrzM0NTY3ODnlhbbkuK3kuIDkuKrvvIzlkI7pnaLlho3liqA55Liq5pWw5a2XXG5jb25zdCByZWcgPSAvXjFbMzQ1Njc4OV1cXGR7OX0kLztcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLrmiYvmnLrlj7fnoIFcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc01vYmlsZVxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOWAvOaYr+WQpuS4uuaJi+acuuWPt+eggVxuICogQGV4YW1wbGVcbiAqXG4gKiBpc01vYmlsZSgnMTMwMDAwMDAwMDAnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc01vYmlsZSgnMTMwMDAnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBpc01vYmlsZSh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTW9iaWxlO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOWbuuWumueUteivnSDmlK/mjIHljLrlj7flkozliIbmnLrlj7cgM++9njTkvY3ljLrlj7fvvIzku6Uw5byA5aS077ybN++9njjkvY3nm7Tmkq3lj7fvvIzku6Uy772eOeW8gOWktO+8mzHvvZ425L2N5YiG5py65Y+3XG5jb25zdCByZWcgPSAvXigwXFxkezIsM31cXC0pPyhbMi05XVxcZHs2LDd9KShcXC1cXGR7MSw2fSk/JC87XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li65Zu65a6a55S16K+dXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNUZWxlcGhvbmVcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrlm7rlrprnlLXor51cbiAqIEBleGFtcGxlXG4gKlxuICogaXNUZWxlcGhvbmUoJzIyMDMzMjEyJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNUZWxlcGhvbmUoJzAyMS0yMjAzMzIxMicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzVGVsZXBob25lKCcwMjEtMjIwMzMyMTItMTIzJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNUZWxlcGhvbmUoJzEzMDAwMDAwMDAwJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNUZWxlcGhvbmUodmFsdWUpIHtcbiAgY29uc3QgdmFsdWVTdHIgPSBjb252ZXJ0VG9TdHJpbmcodmFsdWUpO1xuICByZXR1cm4gcmVnLnRlc3QodmFsdWVTdHIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1RlbGVwaG9uZTtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDpgq7mlL/nvJbnoIFcbmNvbnN0IHJlZyA9IC9eXFxkezZ9JC87XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li66YKu5pS/57yW56CB77yMNuS9jeaVsOWtl1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzUG9zdGNvZGVcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrpgq7mlL/nvJbnoIFcbiAqIEBleGFtcGxlXG4gKlxuICogaXNQb3N0Y29kZSgnMTAxMTExJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNQb3N0Y29kZSgnMTIzJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNQb3N0Y29kZSh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUG9zdGNvZGU7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g6Lqr5Lu96K+B5Y+35q2j5YiZXG5jb25zdCByZWdJZENhcmQgPSAvXlsxLTldXFxkezV9KDE5fDIwKT9cXGR7Mn0oKDBbMS05XSl8KDFbMDEyXSkpKChbMC0yXVsxLTldKXwxMHwyMHwzMHwzMSlcXGR7M30oXFxkfFgpPyQvaTtcblxuLyoqXG4gKiDmoKHpqoznoIHorqHnrpdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+S4reWNjuS6uuawkeWFseWSjOWbveWFrOawkei6q+S7veWPt+eggXzkuK3ljY7kurrmsJHlhbHlkozlm73lhazmsJHouqvku73lj7fnoIF9XG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS/lsYXmsJHouqvku73or4Hlj7fnoIF85bGF5rCR6Lqr5Lu96K+B5Y+356CBfVxuICogQHBhcmFtIHtzdHJpbmd9IGlkIOi6q+S7veivgeWPt+eggVxuICogQHJldHVybnMge2Jvb2xlYW59IOagoemqjOeggeaYr+WQpuato+ehrlxuICovXG5mdW5jdGlvbiBjaGVjayhpZCkge1xuICBsZXQgaW5kZXgsIHN1bSwgbnVtO1xuICBmb3IgKHN1bSA9IGluZGV4ID0gMDsgaW5kZXggPCAxNzsgaW5kZXgrKykge1xuICAgIHN1bSArPSAoTWF0aC5wb3coMiwgMTcgLSBpbmRleCkgJSAxMSkgKiBOdW1iZXIoaWRbaW5kZXhdKTtcbiAgfVxuICBudW0gPSAoMTIgLSAoc3VtICUgMTEpKSAlIDExO1xuICBpZiAobnVtIDwgMTApIHtcbiAgICByZXR1cm4gbnVtID09PSBOdW1iZXIoaWRbMTddKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaWRbMTddID09ICdYJztcbiAgfVxufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4ujE45L2N6Lqr5Lu96K+B5Y+356CB44CCPGJyLz7lrr3mnb7mqKHlvI/kuIvvvIzmlK/mjIExNeS9jei6q+S7veivgeWPt+eggVxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzSWRDYXJkXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZT1mYWxzZV0g5a695p2+5qih5byP77yM5pSv5oyBMTXkvY3ouqvku73or4Hlj7fnoIFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hlY2tDb2RlPXRydWVdIOaYr+WQpuagoemqjOacgOWQjuS4gOS9jeagoemqjOegge+8jOS7heaUr+aMgTE45L2N6Lqr5Lu96K+B5Y+356CBXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li66Lqr5Lu96K+B5Y+3XG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzSWRDYXJkKCcxMzA3MDExOTkzMTAzMDIyODgnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lkQ2FyZCgnMTMwNzAxMTk5MzEwMzAyMjhYJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzSWRDYXJkKCcxMzA3MDExOTkzMTAzMDIyOFgnLCB7IGNoZWNrQ29kZTogZmFsc2UgfSk7IC8vIOS4jeagoemqjOagoemqjOeggVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSWRDYXJkKCczMjAzMTE3NzA3MDYwMDEnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogaXNJZENhcmQoJzMyMDMxMTc3MDcwNjAwMScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICovXG5mdW5jdGlvbiBpc0lkQ2FyZCh2YWx1ZSwgeyBsb29zZSA9IGZhbHNlLCBjaGVja0NvZGUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIGlmICh2YWx1ZVN0ci5sZW5ndGggPT09IDE1ICYmIGxvb3NlKSB7XG4gICAgcmV0dXJuIHJlZ0lkQ2FyZC50ZXN0KHZhbHVlU3RyKTtcbiAgfVxuXG4gIGlmICh2YWx1ZVN0ci5sZW5ndGggPT09IDE4ICYmIHJlZ0lkQ2FyZC50ZXN0KHZhbHVlU3RyKSkge1xuICAgIGlmIChjaGVja0NvZGUpIHtcbiAgICAgIHJldHVybiBjaGVjayh2YWx1ZVN0cik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0lkQ2FyZDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDpgq7nrrFcbmNvbnN0IHJlZyA9IC9eW1xcZGEtel0rKFtcXC1cXC5cXF9dP1tcXGRhLXpdKykqQFtcXGRhLXpdKyhbXFwtXFwuXT9bXFxkYS16XSspKihcXC5bYS16XXsyLH0pKyQvaTtcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLpFbWFpbFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzRW1haWxcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLpFbWFpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc0VtYWlsKCcxMjMyQHFxLmNvbScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzRW1haWwoJzEyM0AnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBpc0VtYWlsKHZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcbiAgcmV0dXJuIHJlZy50ZXN0KHZhbHVlU3RyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFbWFpbDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyBRUeWPt+ato+WImVxuY29uc3QgcmVnID0gL15bMS05XVxcZHs0LDEwfSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4ulFR5Y+377yM6Z2eMOW8gOWktO+8jDXoh7MxMeS9jeaVsOWtl1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzUVFcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLpRUeWPt1xuICogQGV4YW1wbGVcbiAqXG4gKiBpc1FRKCcxMjM0NScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzUVEoJzEyMycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzUVEodmFsdWUpIHtcbiAgY29uc3QgdmFsdWVTdHIgPSBjb252ZXJ0VG9TdHJpbmcodmFsdWUpO1xuICByZXR1cm4gcmVnLnRlc3QodmFsdWVTdHIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1FRO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOW+ruS/oeWPtyA26IezMjDkvY3vvIzku6XlrZfmr43lvIDlpLTvvIzlrZfmr43vvIzmlbDlrZfvvIzlh4/lj7fvvIjov57mjqXnrKbvvInvvIzkuIvliJLnur9cbmNvbnN0IHJlZyA9IC9eW2Etel0oWy1fYS16MC05XXs1LDE5fSkrJC9pO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uuW+ruS/oeWPt1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzV1hcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrlvq7kv6Hlj7dcbiAqIEBleGFtcGxlXG4gKlxuICogaXNXWCgnYTEyMzQ1Jyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNXWCgnMTIzJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNXWCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV1g7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g6L2m54mM5Y+35q2j5YiZXG5jb25zdCByZWcgPSAvXlvkuqzmtKXmsqrmuJ3lhoDosavkupHovr3pu5HmuZjnmpbpsoHmlrDoi4/mtZnotaPphILmoYLnlJjmmYvokpnpmZXlkInpl73otLXnsqTpnZLol4/lt53lroHnkLzkvb/pooZBLVpdezF9W0EtWl17MX0oKFtBLVowLTldezR9W0EtWjAtOeaMguWtpuitpua4r+a+s117MX0pfChbQS1aMC05XXs1fVtERl0pfChbREZdW0EtWjAtOV17NX0pKSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uui9pueJjOWPt++8jOaUr+aMgeaWsOiDvea6kOWSjOmdnuaWsOiDvea6kOi9pueJjFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzVmVoaWNsZVxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vYmFpa2UuYmFpZHUuY29tL2l0ZW0v6L2m54mM5Y+3fOi9pueJjOWPt31cbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrovabniYzlj7dcbiAqIEBleGFtcGxlXG4gKlxuICogaXNWZWhpY2xlKCfkuqxMMTIzNDUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEJEMTIzNDUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEJGMTIzNDUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEIxMjM0NUQnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1ZlaGljbGUoJ+eypEIxMjM0NUYnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzVmVoaWNsZSh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVmVoaWNsZTtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDpnZ4w5byA5aS077yMMTB+MjHkvY3mlbDlrZdcbmNvbnN0IHJlZyA9IC9eWzEtOV1cXGR7OSwyMH0kLztcblxuLy8gOH4zMOS9jeaVsOWtl1xuY29uc3QgcmVnTG9vc2UgPSAvXlxcZHs4LDMwfSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uumTtuihjOWNoeWPt+OAguato+W4uOaooeW8j++8iOmdnjDlvIDlpLTvvIwxMH4yMeS9jeaVsOWtl++8ieWuveadvuaooeW8j++8iDh+MzDkvY3mlbDlrZfvvIlcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc0JhbmtDYXJkXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9rZi5xcS5jb20vZmFxLzE3MDExMkFCbm02YjE3MDExMkZ2cXVBbi5odG1sfOW4uOeUqOmTtuihjOi0puWPt+S9jeaVsOWPguiAg31cbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvb3NlPWZhbHNlXSDlrr3mnb7mqKHlvI/vvIw4fjMw5L2N5pWw5a2XXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li66ZO26KGM5Y2h5Y+3XG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzQmFua0NhcmQoJzYyMjg0ODA0MDI1NjQ4OTAwMTgnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0JhbmtDYXJkKCc2MjI4NDgwNDAyNTY0ODkwJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNCYW5rQ2FyZCgnMTIzNDU2Nzg5Jyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzQmFua0NhcmQoJzEyMzQ1Njc4OScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICovXG5mdW5jdGlvbiBpc0JhbmtDYXJkKHZhbHVlLCB7IGxvb3NlID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcblxuICBpZiAobG9vc2UpIHtcbiAgICByZXR1cm4gcmVnTG9vc2UudGVzdCh2YWx1ZVN0cik7XG4gIH1cbiAgcmV0dXJuIHJlZy50ZXN0KHZhbHVlU3RyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNCYW5rQ2FyZDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDln7rnoYDop4TliJnvvIznlLExOOS9jeaVsOWtl+WSjOWkp+WGmeWtl+avjee7hOaIkO+8jOS4jeS9v+eUqEnjgIFP44CBWuOAgVPjgIFW44CCXG5jb25zdCBiYXNlUmVnID0gL15bXFxkQS1ISi1OUFFSVFVXWFldezJ9XFxkezZ9W1xcZEEtSEotTlBRUlRVV1hZXXsxMH0kLztcblxuLy8g5Z+656GA5a2X56ym57uE5oiQXG5jb25zdCBiYXNlQ29kZUFyciA9ICcwMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlRVV1hZJy5zcGxpdCgnJyk7XG5cbi8v5Yqg5p2D5Zug5a2QXG5jb25zdCB3ZWlnaHRGYWN0b3IgPSBbMSwgMywgOSwgMjcsIDE5LCAyNiwgMTYsIDE3LCAyMCwgMjksIDI1LCAxMywgOCwgMjQsIDEwLCAzMCwgMjhdO1xuXG4vKipcbiAqIOiOt+WPluWtl+espuS9jee9rlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSDlrZfnrKZcbiAqIEByZXR1cm5zIHtudW1iZXJ9IOWtl+espuaJgOWcqOWfuuehgOWtl+espueahOS9jee9rlxuICovXG5mdW5jdGlvbiBnZXRCYXNlQ29kZUluZGV4KGNvZGUpIHtcbiAgbGV0IHJldDtcblxuICBiYXNlQ29kZUFyci5zb21lKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGlmIChpdGVtID09PSBjb2RlKSB7XG4gICAgICByZXQgPSBpbmRleDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiDorqHnrpfmoKHpqoznoIFcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlQ29kZSDnu5/kuIDku6PnoIHliY0xN+S9jVxuICogQHJldHVybnMge3N0cmluZ30g5qCh6aqM56CBXG4gKi9cbmZ1bmN0aW9uIHN1bUNoZWNrQ29kZShwcmVDb2RlKSB7XG4gIC8vIGNvbnN0IHByZUNvZGVBcnIgPSBwcmVDb2RlLnNwbGl0KCcnKTtcblxuICBsZXQgdG90YWwgPSAwO1xuXG4gIC8vIOiuoeeul+Wtl+espuS9jee9ruWvueW6lOW6j+WPt+WSjOWKoOadg+WboOWtkOeahOS5mOenr++8jOaAu+WSjFxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE3OyBpKyspIHtcbiAgICAvLyDlrZfnrKbkvY3nva7lr7nlupTnmoTln7rnoYDnvJbnoIHluo/lj7dcbiAgICBjb25zdCBpbmRleCA9IGdldEJhc2VDb2RlSW5kZXgocHJlQ29kZVtpXSk7XG4gICAgLy8g5Yqg5p2D5Zug5a2QXG4gICAgY29uc3Qgd2YgPSB3ZWlnaHRGYWN0b3JbaV07XG4gICAgLy8g6K6h566X5bqP5Y+35ZKM5Yqg5p2D5Zug5a2Q55qE5LmY56ev77yM5bm26K6h566X57qn5pWw5LmL5ZKMXG4gICAgdG90YWwgKz0gaW5kZXggKiB3ZjtcbiAgfVxuXG4gIC8vIOiuoeeul+aVtOaVsOaxguS9meWHveaVsE1PRFxuICBjb25zdCByZW1haW5kZXIgPSB0b3RhbCAlIDMxO1xuICAvLyDmoKHpqoznoIHlrZfnrKblgLzluo/lj7dcbiAgY29uc3QgY2hlY2tDb2RlSW5kZXggPSAzMSAtIHJlbWFpbmRlcjtcblxuICByZXR1cm4gYmFzZUNvZGVBcnJbY2hlY2tDb2RlSW5kZXhdO1xufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uue7n+S4gOekvuS8muS/oeeUqOS7o+egge+8jOS5n+WPq+S4ieivgeWQiOS4gOe7hOe7h+S7o+eggeOAgueUsTE45L2N5pWw5a2X5ZKM5aSn5YaZ5a2X5q+N57uE5oiQ77yM5LiN5L2/55SoSeOAgU/jgIFa44CBU+OAgVbjgIJcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc1NvY2lhbENyZWRpdENvZGVcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3poLndpa2lzb3VyY2Uub3JnL3poLWhhbnMvR0JfMzIxMDAtMjAxNV/ms5Xkurrlkozlhbbku5bnu4Tnu4fnu5/kuIDnpL7kvJrkv6HnlKjku6PnoIHnvJbnoIHop4TliJl8R0IgMzIxMDAtMjAxNSDms5Xkurrlkozlhbbku5bnu4Tnu4fnu5/kuIDnpL7kvJrkv6HnlKjku6PnoIHnvJbnoIHop4TliJl9XG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZT1mYWxzZV0g5a695p2+5qih5byP44CC5aaC5p6c5Li6dHJ1Ze+8jOS4jeagoemqjOagoemqjOS9jeOAglxuICogQHJldHVybnMge2Jvb2xlYW59IOWAvOaYr+WQpuS4uue7n+S4gOekvuS8muS/oeeUqOS7o+eggVxuICogQGV4YW1wbGVcbiAqXG4gKiBpc1NvY2lhbENyZWRpdENvZGUoJzkxMzUwMTAwTTAwMDEwMFk0MycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzU29jaWFsQ3JlZGl0Q29kZSgnOTEzNTAxMDBNMDAwMTAwWTRBJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIC8vIOWuveadvuaooeW8j++8jOS4jeagoemqjOagoemqjOS9jeOAguaJgOS7peS5n+WPr+S7pemAmui/h1xuICogaXNTb2NpYWxDcmVkaXRDb2RlKCc5MTM1MDEwME0wMDAxMDBZNEEnLCB7bG9vc2U6IHRydWV9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzU29jaWFsQ3JlZGl0Q29kZSh2YWx1ZSwgeyBsb29zZSA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG5cbiAgY29uc3QgcGFzc0Jhc2VSdWxlID0gYmFzZVJlZy50ZXN0KHZhbHVlU3RyKTtcblxuICAvLyDlrr3mnb7mqKHlvI8g5oiWIOWfuuehgOinhOWImeS4jemAmui/h+ebtOaOpei/lOWbnlxuICBpZiAobG9vc2UgfHwgIXBhc3NCYXNlUnVsZSkge1xuICAgIHJldHVybiBwYXNzQmFzZVJ1bGU7XG4gIH1cblxuICAvLyDliY0xN+S9jVxuICBjb25zdCBwcmVDb2RlID0gdmFsdWVTdHIuc3Vic3RyaW5nKDAsIDE3KTtcbiAgLy8g5qCh6aqM56CBXG4gIGNvbnN0IGxhc3RDb2RlID0gdmFsdWVTdHIuc3Vic3RyaW5nKHZhbHVlU3RyLmxlbmd0aCAtIDEpO1xuICAvLyDorqHnrpfmoKHpqoznoIFcbiAgY29uc3QgY2hlY2tDb2RlID0gc3VtQ2hlY2tDb2RlKHByZUNvZGUpO1xuXG4gIHJldHVybiBsYXN0Q29kZSA9PT0gY2hlY2tDb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1NvY2lhbENyZWRpdENvZGU7XG4iLCJjb25zdCBjb25maWcgPSB7XG4gIC8vIOemgeeUqHdhcm5pbmfmj5DnpLpcbiAgZGlzYWJsZVdhcm5pbmc6IHRydWVcbn07XG5cbi8qKlxuICog6K6+572u56aB5q2id2FybmluZ+aPkOekulxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpEZWJ1Zy5mb3JtYXRCYW5rQ2FyZFxuICogQHNpbmNlIDMuNi4xXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJvb2wg5piv5ZCm56aB5q2id2FybmluZ+aPkOekulxuICovXG5mdW5jdGlvbiBzZXREaXNhYmxlV2FybmluZyhib29sKSB7XG4gIGNvbmZpZy5kaXNhYmxlV2FybmluZyA9ICEhYm9vbDtcbn1cblxuZXhwb3J0IHsgY29uZmlnLCBzZXREaXNhYmxlV2FybmluZyB9O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuXG5jb25zdCByZWdOdW1iZXIgPSAvW1xcZF0vO1xuY29uc3QgcmVnTG93ZXJDYXNlTGV0dGVyID0gL1thLXpdLztcbmNvbnN0IHJlZ1VwcGVyQ2FzZUxldHRlciA9IC9bQS1aXS87XG5jb25zdCByZWdBbGxOdW1iZXJBbmRMZXR0ZXIgPSAvW1xcZHxhLXpdL2dpO1xuXG4vKipcbiAqIOaYr+WQpuWMheWQq+aVsOWtl1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOafpeeahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuWMheWQq+aVsOWtl1xuICovXG5mdW5jdGlvbiBoYXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiByZWdOdW1iZXIudGVzdCh2YWwpO1xufVxuXG4vKipcbiAqIOaYr+WQpuWMheWQq+Wwj+WGmeWtl+avjVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuWMheWQq+Wwj+WGmeWtl+avjVxuICovXG5mdW5jdGlvbiBoYXNMb3dlckNhc2VMZXR0ZXIodmFsKSB7XG4gIHJldHVybiByZWdMb3dlckNhc2VMZXR0ZXIudGVzdCh2YWwpO1xufVxuXG4vKipcbiAqIOaYr+WQpuWMheWQq+Wkp+WGmeWtl+avjVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuWMheWQq+Wkp+WGmeWtl+avjVxuICovXG5mdW5jdGlvbiBoYXNVcHBlckNhc2VMZXR0ZXIodmFsKSB7XG4gIHJldHVybiByZWdVcHBlckNhc2VMZXR0ZXIudGVzdCh2YWwpO1xufVxuXG4vKipcbiAqIOaYr+WQpuS4uuWNgeWFrei/m+WItlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIOajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uuWNgeWFrei/m+WItlxuICovXG5mdW5jdGlvbiBoYXNIZXgodmFsKSB7XG4gIHJldHVybiB2YWwuaW5kZXhPZignXFxcXHgnKSA+IC0xIHx8IHZhbC5pbmRleE9mKCdcXFxcdScpID4gLTE7XG59XG5cbi8qKlxuICog5piv5ZCm5YyF5ZCr54m55q6K5a2X56ymXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwg5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzXSDnibnmrorlrZfnrKZcbiAqIEByZXR1cm5zIHtib29sZWFufSDmmK/lkKbljIXlkKvnibnmrorlrZfnrKZcbiAqL1xuZnVuY3Rpb24gaGFzU3BlY2lhbENoYXJhY3Rlcih2YWwsIGNoYXJzID0gJycpIHtcbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNwZWNpYWxDaGFycyA9IHZhbC5yZXBsYWNlKHJlZ0FsbE51bWJlckFuZExldHRlciwgJycpO1xuICBjb25zdCByZWdDaGFycyA9IGhhc0hleChjaGFycykgPyBuZXcgUmVnRXhwKGBbJHtjaGFyc31dYCkgOiBudWxsO1xuXG4gIGlmIChyZWdDaGFycykge1xuICAgIHJldHVybiByZWdDaGFycy50ZXN0KHNwZWNpYWxDaGFycyk7XG4gIH1cblxuICBsZXQgcmV0ID0gZmFsc2U7XG4gIHNwZWNpYWxDaGFycy5zcGxpdCgnJykuc29tZSgoY2hhckl0ZW0pID0+IHtcbiAgICBpZiAoY2hhcnMuaW5kZXhPZihjaGFySXRlbSkgPiAtMSkge1xuICAgICAgcmV0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICog5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwg5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcnMg6Z2e5rOV5a2X56ymXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymXG4gKi9cbmZ1bmN0aW9uIGhhc1VuYWxsb3dhYmxlQ2hhcmFjdGVyKHZhbCwgY2hhcnMgPSAnJykge1xuICBjb25zdCBzcGVjaWFsQ2hhcnMgPSB2YWwucmVwbGFjZShyZWdBbGxOdW1iZXJBbmRMZXR0ZXIsICcnKTtcblxuICBpZiAoIWNoYXJzICYmIHNwZWNpYWxDaGFycykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcmVnQ2hhcnMgPSBoYXNIZXgoY2hhcnMpID8gbmV3IFJlZ0V4cChgW14ke2NoYXJzfV1gKSA6IG51bGw7XG4gIGlmIChyZWdDaGFycykge1xuICAgIHJldHVybiByZWdDaGFycy50ZXN0KHNwZWNpYWxDaGFycyk7XG4gIH1cbiAgbGV0IHJldCA9IGZhbHNlO1xuICBzcGVjaWFsQ2hhcnMuc3BsaXQoJycpLnNvbWUoKGNoYXJJdGVtKSA9PiB7XG4gICAgaWYgKGNoYXJzLmluZGV4T2YoY2hhckl0ZW0pID09PSAtMSkge1xuICAgICAgcmV0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFzc3dvcmRDb250YWluZXMgLSDpqozor4Hlr4bnoIHnmoTljIXlkKvlhoXlrrlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbnVtYmVyIC0g5YyF5ZCr5pWw5a2XXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvd2VyQ2FzZUxldHRlciAtIOWMheWQq+Wwj+WGmeWtl+avjVxuICogQHByb3BlcnR5IHtib29sZWFufSB1cHBlckNhc2VMZXR0ZXIgLSDljIXlkKvlpKflhpnlrZfmr41cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3BlY2lhbENoYXJhY3RlciAtIOWMheWQq+eJueauiuWtl+esplxuICogQHByb3BlcnR5IHtib29sZWFufSB1bmFsbG93YWJsZUNoYXJhY3RlciAtIOWMheWQq+mdnuazleWtl+esplxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVmFsaWRhdGVQYXNzd29yZFJldHVybiAtIOmqjOivgee7k+aenFxuICogQHByb3BlcnR5IHtib29sZWFufSB2YWxpZGF0ZWQgLSDpqozor4Hnu5PmnpzvvIzmoLnmja7lr4bnoIHlvLrluqbjgIHmmK/lkKbljIXlkKvpnZ7ms5XlrZfnrKblvpflh7pcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCAtIOW8uuW6pue6p+WIq++8jOWMheWQq+aVsOWtly/lpKflsI/lhpnlrZfmr40v54m55q6K5a2X56ymXG4gKiBAcHJvcGVydHkge1Bhc3N3b3JkQ29udGFpbmVzfSBjb250YWluZXMgLSDljIXlkKvlhoXlrrlcbiAqL1xuXG4vKipcbiAqIOmqjOivgeWvhuegge+8iOaVsOWtl+OAgeWkp+Wwj+WGmeWtl+avjeOAgeeJueauiuWtl+espuOAgemdnuazleWtl+espu+8iVxuICpcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2JhaWtlLmJhaWR1LmNvbS9pdGVtL0FTQ0lJIzN8QVNDSUl9XG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci52YWxpZGF0ZVBhc3N3b3JkXG4gKiBAc2luY2UgMy43LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGV2ZWw9Ml0g5a+G56CB5by65bqmIDEt5YyF5ZCr5LiA56eN5a2X56ymIDIt5YyF5ZCr5Lik56eN5a2X56ymIDMt5YyF5ZCr5LiJ56eN5a2X56ym44CC77yI5aSn5YaZ5a2X5q+N44CB5bCP5YaZ5a2X5q+N44CB5pWw5a2X44CB54m55q6K5a2X56ym77yJXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmlnbm9yZUNhc2U9ZmFsc2VdIOaYr+WQpuW/veeVpeWkp+Wwj+WGme+8jOS4uiB0dXJlIOaXtu+8jOWkp+Wwj+WGmeWtl+avjeinhuS4uuS4gOenjeWtl+esplxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNwZWNpYWw9XCIhQCMkJV4mKigpLT1fK1tdXFx8e30sLi8/PD5+XCJdIOaUr+aMgeeahOeJueauiuWtl+esplxuICogQHJldHVybnMge1ZhbGlkYXRlUGFzc3dvcmRSZXR1cm59IOmqjOivgee7k+aenFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YWxpZGF0ZVBhc3N3b3JkKCdhMTIzNDU2NzgnKTtcbiAqIC8vID0+XG4gKiB7XG4gKiAgIHZhbGlkYXRlZDogdHJ1ZSwgLy8g6aqM6K+B57uT5p6c77yM5qC55o2u5a+G56CB5by65bqm44CB5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ym5b6X5Ye6XG4gKiAgIGxldmVsOiAyLCAvLyDlvLrluqbnuqfliKtcbiAqICAgY29udGFpbmVzOiB7XG4gKiAgICAgbnVtYmVyOiB0cnVlLCAvLyDljIXlkKvmlbDlrZdcbiAqICAgICBsb3dlckNhc2VMZXR0ZXI6IHRydWUsIC8vIOWMheWQq+Wwj+WGmeWtl+avjVxuICogICAgIHVwcGVyQ2FzZUxldHRlcjogZmFsc2UsIC8vIOWMheWQq+Wkp+WGmeWtl+avjVxuICogICAgIHNwZWNpYWxDaGFyYWN0ZXI6IGZhbHNlLCAvLyDljIXlkKvnibnmrorlrZfnrKZcbiAqICAgICB1bmFsbG93YWJsZUNoYXJhY3RlcjogZmFsc2UgLy8g5YyF5ZCr6Z2e5rOV5a2X56ymXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YWxpZGF0ZVBhc3N3b3JkKCdhMTIzNDU2NzgnLCB7bGV2ZWw6IDN9KTtcbiAqIC8vID0+XG4gKiB7XG4gKiAgIHZhbGlkYXRlZDogZmFsc2UsXG4gKiAgIGxldmVsOiAyLFxuICogICBjb250YWluZXM6IHtcbiAqICAgICBudW1iZXI6IHRydWUsXG4gKiAgICAgbG93ZXJDYXNlTGV0dGVyOiB0cnVlLFxuICogICAgIHVwcGVyQ2FzZUxldHRlcjogZmFsc2UsXG4gKiAgICAgc3BlY2lhbENoYXJhY3RlcjogZmFsc2UsXG4gKiAgICAgdW5hbGxvd2FibGVDaGFyYWN0ZXI6IGZhbHNlXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YWxpZGF0ZVBhc3N3b3JkKCdfQWHkuIDkuozkuIk0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT5cbiAqIHtcbiAqICAgdmFsaWRhdGVkOiBmYWxzZSxcbiAqICAgbGV2ZWw6IDMsXG4gKiAgIGNvbnRhaW5lczoge1xuICogICAgIG51bWJlcjogdHJ1ZSxcbiAqICAgICBsb3dlckNhc2VMZXR0ZXI6IHRydWUsXG4gKiAgICAgdXBwZXJDYXNlTGV0dGVyOiB0cnVlLFxuICogICAgIHNwZWNpYWxDaGFyYWN0ZXI6IHRydWUsXG4gKiAgICAgdW5hbGxvd2FibGVDaGFyYWN0ZXI6IHRydWVcbiAqICAgfVxuICogfVxuICpcbiAqIC8vIOiHquWumuS5ieeJueauiuWtl+esplxuICogdmFsaWRhdGVQYXNzd29yZCgnX0Fh5LiA5LqM5LiJNDU2NzgnLCB7bGV2ZWw6IDMsIGlnbm9yZUNhc2U6IHRydWUsIHNwZWNpYWw6ICdf5LiA5LqM5LiJJ30pO1xuICogLy8gPT5cbiAqIHtcbiAqICAgdmFsaWRhdGVkOiB0cnVlLFxuICogICBsZXZlbDogMyxcbiAqICAgY29udGFpbmVzOiB7XG4gKiAgICAgbnVtYmVyOiB0cnVlLFxuICogICAgIGxvd2VyQ2FzZUxldHRlcjogdHJ1ZSxcbiAqICAgICB1cHBlckNhc2VMZXR0ZXI6IHRydWUsXG4gKiAgICAgc3BlY2lhbENoYXJhY3RlcjogdHJ1ZSxcbiAqICAgICB1bmFsbG93YWJsZUNoYXJhY3RlcjogZmFsc2VcbiAqICAgfVxuICogfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhc3N3b3JkKHZhbHVlLCB7IGxldmVsID0gMiwgaWdub3JlQ2FzZSA9IGZhbHNlLCBzcGVjaWFsID0gJ1xcXFx4MjEtXFxcXHgyRlxcXFx4M0EtXFxcXHg0MFxcXFx4NUItXFxcXHg2MFxcXFx4N0ItXFxcXHg3RScgfSA9IHt9KSB7XG4gIGxldCB2YWxTdHIgPSB2YWx1ZTtcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIGlmICghY29uZmlnLmRpc2FibGVXYXJuaW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt2YWxpZGF0ZVBhc3N3b3JkXSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLmApO1xuICAgIH1cbiAgICB2YWxTdHIgPSAnJztcbiAgfVxuXG4gIGxldCBjdXJyZW50TGV2ZWwgPSAwO1xuXG4gIC8vIOWMheWQq+aVsOWtl1xuICBjb25zdCBjb250YWluZXNOdW1iZXIgPSBoYXNOdW1iZXIodmFsU3RyKTtcbiAgLy8g5YyF5ZCr5bCP5YaZ5a2X5q+NXG4gIGNvbnN0IGNvbnRhaW5lc0xvd2VyQ2FzZUxldHRlciA9IGhhc0xvd2VyQ2FzZUxldHRlcih2YWxTdHIpO1xuICAvLyDljIXlkKvlpKflhpnlrZfmr41cbiAgY29uc3QgY29udGFpbmVzVXBwZXJDYXNlTGV0dGVyID0gaGFzVXBwZXJDYXNlTGV0dGVyKHZhbFN0cik7XG4gIC8vIOWMheWQq+eJueauiuWtl+esplxuICBjb25zdCBjb250YWluZXNTcGVjaWFsQ2hhcmFjdGVyID0gaGFzU3BlY2lhbENoYXJhY3Rlcih2YWxTdHIsIHNwZWNpYWwpO1xuICAvLyDljIXlkKvpnZ7ms5XlrZfnrKZcbiAgY29uc3QgY29udGFpbmVzVW5hbGxvd2FibGVDaGFyYWN0ZXIgPSBoYXNVbmFsbG93YWJsZUNoYXJhY3Rlcih2YWxTdHIsIHNwZWNpYWwpO1xuXG4gIGlmIChjb250YWluZXNOdW1iZXIpIHtcbiAgICBjdXJyZW50TGV2ZWwgKz0gMTtcbiAgfVxuXG4gIGlmIChpZ25vcmVDYXNlKSB7XG4gICAgLy8g5LiN5Yy65YiG5aSn5bCP5YaZXG4gICAgaWYgKGNvbnRhaW5lc0xvd2VyQ2FzZUxldHRlciB8fCBjb250YWluZXNVcHBlckNhc2VMZXR0ZXIpIHtcbiAgICAgIGN1cnJlbnRMZXZlbCArPSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyDljLrliIblpKflsI/lhplcbiAgICBpZiAoY29udGFpbmVzTG93ZXJDYXNlTGV0dGVyKSB7XG4gICAgICBjdXJyZW50TGV2ZWwgKz0gMTtcbiAgICB9XG4gICAgaWYgKGNvbnRhaW5lc1VwcGVyQ2FzZUxldHRlcikge1xuICAgICAgY3VycmVudExldmVsICs9IDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lc1NwZWNpYWxDaGFyYWN0ZXIpIHtcbiAgICBjdXJyZW50TGV2ZWwgKz0gMTtcbiAgfVxuXG4gIC8vIOmqjOivgee7k+aenFxuICBjb25zdCB2YWxpZGF0ZWQgPSBjdXJyZW50TGV2ZWwgPj0gbGV2ZWwgJiYgIWNvbnRhaW5lc1VuYWxsb3dhYmxlQ2hhcmFjdGVyO1xuXG4gIHJldHVybiB7XG4gICAgdmFsaWRhdGVkLFxuICAgIGxldmVsOiBjdXJyZW50TGV2ZWwsXG4gICAgY29udGFpbmVzOiB7XG4gICAgICBudW1iZXI6IGNvbnRhaW5lc051bWJlcixcbiAgICAgIGxvd2VyQ2FzZUxldHRlcjogY29udGFpbmVzTG93ZXJDYXNlTGV0dGVyLFxuICAgICAgdXBwZXJDYXNlTGV0dGVyOiBjb250YWluZXNVcHBlckNhc2VMZXR0ZXIsXG4gICAgICBzcGVjaWFsQ2hhcmFjdGVyOiBjb250YWluZXNTcGVjaWFsQ2hhcmFjdGVyLFxuICAgICAgdW5hbGxvd2FibGVDaGFyYWN0ZXI6IGNvbnRhaW5lc1VuYWxsb3dhYmxlQ2hhcmFjdGVyXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZVBhc3N3b3JkO1xuIiwiaW1wb3J0IHZhbGlkYXRlUGFzc3dvcmQgZnJvbSAnLi92YWxpZGF0ZVBhc3N3b3JkJztcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbnrKblkIjlr4bnoIHlvLrluqZcbiAqIDxwPjxzdHJvbmc+5rOo5oSP77ya6K+l5qCh6aqM5Y+q5qCh6aqM5piv5ZCm5a2Y5Zyo5LiN5ZCM5a2X56ymKOWkp+Wwj+WGmeWtl+avjeOAgeaVsOWtl+OAgeeJueauiuespuWPtynvvIzkuI3liKTmlq3plb/luqbjgII8L3N0cm9uZz48L3A+XG4gKiA8cD48aT7lpoLmnpzpnIDopoHmm7Tnu4boh7TnmoTpqozor4HvvIzor7fkvb/nlKggPGEgaHJlZj1cIiMudmFsaWRhdGVQYXNzd29yZFwiPnZhbGlkYXRlUGFzc3dvcmQ8L2E+PC9pPjwvcD5cbiAqXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS9BU0NJSSMzfEFTQ0lJfVxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNQYXNzd29yZFxuICogQHNpbmNlIDEuMS4wXG4gKiBAcmVxdWlyZXMgbW9kdWxlOlZhbGlkYXRvci52YWxpZGF0ZVBhc3N3b3JkXG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSDphY3nva7poblcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZXZlbD0yXSDlr4bnoIHlvLrluqYgMS3ljIXlkKvkuIDnp43lrZfnrKYgMi3ljIXlkKvkuKTnp43lrZfnrKYgMy3ljIXlkKvkuInnp43lrZfnrKbjgILvvIjlpKflhpnlrZfmr43jgIHlsI/lhpnlrZfmr43jgIHmlbDlrZfjgIHnibnmrorlrZfnrKbvvIlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaWdub3JlQ2FzZT1mYWxzZV0g5piv5ZCm5b+955Wl5aSn5bCP5YaZ77yM5Li6IHR1cmUg5pe277yM5aSn5bCP5YaZ5a2X5q+N6KeG5Li65LiA56eN5a2X56ymXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3BlY2lhbD1cIiFAIyQlXiYqKCktPV8rW11cXHx7fSwuLz88Pn5cIl0g5pSv5oyB55qE54m55q6K5a2X56ymXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm56ym5ZCI5a+G56CB5by65bqmXG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzUGFzc3dvcmQoJ2ExMjM0NTY3OCcpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzUGFzc3dvcmQoJ2ExMjM0NTY3OCcsIHtsZXZlbDogM30pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1Bhc3N3b3JkKCdBYTEyMzQ1Njc4Jywge2xldmVsOiAzfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNQYXNzd29yZCgnQWExMjM0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1Bhc3N3b3JkKCdfQWExMjM0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIOS7heaUr+aMgSDmlbDlrZfjgIHlrZfmr43jgIHnibnmrorlrZfnrKbvvIzlhbbku5blrZfnrKblpoLkuK3mloflrZfnrKbmmK/moKHpqozkuI3pgJrov4fnmoRcbiAqIGlzUGFzc3dvcmQoJ19BYeS4gOS6jOS4iTQ1Njc4Jywge2xldmVsOiAzLCBpZ25vcmVDYXNlOiB0cnVlfSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzUGFzc3dvcmQoJyBfQWExMjM0NTY3OCcsIHtsZXZlbDogMywgaWdub3JlQ2FzZTogdHJ1ZX0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQYXNzd29yZCh2YWx1ZSwgeyBsZXZlbCA9IDIsIGlnbm9yZUNhc2UgPSBmYWxzZSwgc3BlY2lhbCA9ICdcXFxceDIxLVxcXFx4MkZcXFxceDNBLVxcXFx4NDBcXFxceDVCLVxcXFx4NjBcXFxceDdCLVxcXFx4N0UnIH0gPSB7fSkge1xuICByZXR1cm4gdmFsaWRhdGVQYXNzd29yZCh2YWx1ZSwgeyBsZXZlbCwgaWdub3JlQ2FzZSwgc3BlY2lhbCB9KS52YWxpZGF0ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGFzc3dvcmQ7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8g5oqk54Wn5Y+3IDnkvY3vvIzljIXmi6zpppblrZfmr43lkozmlbDlrZfvvJvmlK/mjIEg5pmu6YCa5oqk54WnKEUqKeOAgeWkluS6pOaKpOeFpyhERSnjgIHlhazliqHmiqTnhacoU0Up44CB5YWs5Yqh5pmu6YCa5oqk54WnKFBFKeOAgemmmea4r+eJueWMuuaKpOeFpyhLL0tKKeOAgea+s+mXqOeJueWMuuaKpOeFpyhNQSlcbmNvbnN0IHJlZyA9IC9eKChlW1xcZGEtel0pfChkZSl8KHNlKXwocGUpfChrW1xcZGEtel0pfChrail8KG1hKSlbXFxkYS16XXs3fSQvaTtcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLrmiqTnhaflj7dcbiAqIOaUr+aMgeaZrumAmuaKpOeFpyhFKinjgIHlpJbkuqTmiqTnhacoREUp44CB5YWs5Yqh5oqk54WnKFNFKeOAgeWFrOWKoeaZrumAmuaKpOeFpyhQRSnjgIHpppnmuK/nibnljLrmiqTnhacoSy9LSinjgIHmvrPpl6jnibnljLrmiqTnhacoTUEpXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNQYXNzcG9ydFxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+S4reWNjuS6uuawkeWFseWSjOWbveaKpOeFpyPkuKrkurrotYTmlpnpobV85Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95oqk54WnI+S4quS6uui1hOaWmemhtX1cbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrmiqTnhaflj7dcbiAqIEBleGFtcGxlXG4gKlxuICogaXNQYXNzcG9ydCgnRTEyMzQ1Njc4Jyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNQYXNzcG9ydCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNQYXNzcG9ydCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGFzc3BvcnQ7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuY29uc3QgY2hpbmVzZURpY3Rpb25hcnkgPSB7XG4gIC8vIOWfuuacrOaxieWtl1xuICBjaGluZXNlQmFzaWM6ICdbXFx1NGUwMC1cXHU5ZmE1XScsXG5cbiAgLy8g5Z+65pys5rGJ5a2X6KGl5YWFXG4gIGNoaW5lc2VFeHRlbmQ6ICdbXFx1OWVhNi1cXHU5ZmVmXScsXG5cbiAgLy8g5rGJ5a2X5omp5bGVQVxuICBjaGluZXNlRXh0ZW5kQTogJ1tcXHUzNDAwLVxcdTREQjVdJyxcblxuICAvLyDmsYnlrZfmianlsZVCXG4gIGNoaW5lc2VFeHRlbmRCOiAnW1xcdXsyMDAwMH0tXFx1ezJBNkQ2fV0nLFxuXG4gIC8vIOaxieWtl+aJqeWxlUNcbiAgY2hpbmVzZUV4dGVuZEM6ICdbXFx1ezJBNzAwfS1cXHV7MkI3MzR9XScsXG5cbiAgLy8g5rGJ5a2X5omp5bGVRFxuICBjaGluZXNlRXh0ZW5kRDogJ1tcXHV7MkI3NDB9LVxcdXsyQjgxRH1dJyxcblxuICAvLyDmsYnlrZfmianlsZVFXG4gIGNoaW5lc2VFeHRlbmRFOiAnW1xcdXsyQjgyMH0tXFx1ezJDRUExfV0nLFxuXG4gIC8vIOaxieWtl+aJqeWxlUZcbiAgY2hpbmVzZUV4dGVuZEY6ICdbXFx1ezJDRUIwfS1cXHV7MkVCRTB9XSdcbn07XG5cbmxldCBsb29zZUNoaW5lc2VSZWdFeHAgPSBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlQmFzaWMgKyAnKyc7XG5cbmxldCBjaGluZXNlUmVnRXhwID0gJ14nICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUJhc2ljICsgJyskJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuY29uc3Qgc3VwcG9ydFJlZ0V4cFVuaWNvZGUgPSBSZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCd1bmljb2RlJyk7XG5cbmlmIChzdXBwb3J0UmVnRXhwVW5pY29kZSkge1xuICBsb29zZUNoaW5lc2VSZWdFeHAgPSAnKD86JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VCYXNpYyArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmQgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kQSArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmRCICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEMgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kRCArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmRFICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEYgKyAnKSsnO1xuICBjaGluZXNlUmVnRXhwID0gJ14oPzonICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUJhc2ljICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZCArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmRBICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEIgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kQyArICd8JyArIGNoaW5lc2VEaWN0aW9uYXJ5LmNoaW5lc2VFeHRlbmREICsgJ3wnICsgY2hpbmVzZURpY3Rpb25hcnkuY2hpbmVzZUV4dGVuZEUgKyAnfCcgKyBjaGluZXNlRGljdGlvbmFyeS5jaGluZXNlRXh0ZW5kRiArICcpKyQnO1xufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uuS4reaWh1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzQ2hpbmVzZVxuICogQHNpbmNlIDEuMS4wXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzgvI0Jsb2NrTGlzdGluZ3w0LjQgTGlzdGluZyBvZiBDaGFyYWN0ZXJzIENvdmVyZWQgYnkgdGhlIFVuaWhhbiBEYXRhYmFzZX1cbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZT1mYWxzZV0g5a695p2+5qih5byP44CC5aaC5p6c5Li6dHJ1Ze+8jOWPquimgeWMheWQq+S4reaWh+WNs+S4unRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLrkuK3mlodcbiAqIEBleGFtcGxlXG4gKlxuICogaXNDaGluZXNlKCfmnpfmn5Dmn5AnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0NoaW5lc2UoJ+ael0EnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogLy8g5a695p2+5qih5byP77yM5Y+q6KaB5YyF5ZCr5Lit5paH5Y2z5Li6dHJ1ZVxuICogaXNDaGluZXNlKCfmnpdBJywge2xvb3NlOiB0cnVlfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNDaGluZXNlKCdB5p6XQScsIHtsb29zZTogdHJ1ZX0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNDaGluZXNlKHZhbHVlLCB7IGxvb3NlID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChsb29zZSA/IGxvb3NlQ2hpbmVzZVJlZ0V4cCA6IGNoaW5lc2VSZWdFeHAsIHN1cHBvcnRSZWdFeHBVbmljb2RlID8gJ3UnIDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHJlZy50ZXN0KHZhbHVlU3RyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNDaGluZXNlO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIGlwdjTmraPliJlcbmNvbnN0IHJlZyA9IC9eKChcXGR7MSwyfXwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLil7M30oXFxkezEsMn18MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkkLztcblxuLyoqXG4gKiDmo4DmtYvlgLzmmK/lkKbkuLppcHY0XG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNJUHY0XG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg6KaB5qOA5rWL55qE5YC8XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li6aXB2NFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc0lQdjQoJzE5Mi4xNjguMS4xJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNJUHY0KCcyNTUuMjU1LjI1NS4yNTUnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lQdjQoJzI1Ni4yNTYuMjU2LjI1NicpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc0lQdjQoJzAuMCcpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzSVB2NCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSVB2NDtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyBpcHY25q2j5YiZXG5jb25zdCByZWcgPSAvXigoKFswLTlBLUZdezEsNH06KXs3fShbMC05QS1GXXsxLDR9fDopKXwoKFswLTlBLUZdezEsNH06KXs2fSg6WzAtOUEtRl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFxcZHsxLDJ9KSl7M30pfDopKXwoKFswLTlBLUZdezEsNH06KXs1fSgoKDpbMC05QS1GXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFxcZHsxLDJ9KShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkpezN9KXw6KSl8KChbMC05QS1GXXsxLDR9Oil7NH0oKCg6WzAtOUEtRl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoKFswLTlBLUZdezEsNH06KXszfSgoKDpbMC05QS1GXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoKFswLTlBLUZdezEsNH06KXsyfSgoKDpbMC05QS1GXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoKFswLTlBLUZdezEsNH06KXsxfSgoKDpbMC05QS1GXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKXwoOigoKDpbMC05QS1GXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxcXGR7MSwyfSkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8XFxkezEsMn0pKXszfSkpfDopKSkoJS4rKT8kL2k7XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li6aXB2NlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzSVB2NlxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOWAvOaYr+WQpuS4umlwdjZcbiAqIEBleGFtcGxlXG4gKlxuICogLy8g5YaS5YiG5Y2B5YWt6L+b5Yi26KGo56S65rOVXG4gKiBpc0lQdjYoJzIwMDE6MERCODowMDAwOjAwMjM6MDAwODowODAwOjIwMEM6NDE3QScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIOWJjeWvvDDnnIHnlaVcbiAqIGlzSVB2NignMjAwMTpEQjg6MDoyMzo4OjgwMDoyMDBDOjQxN0EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lQdjYoJ0ZGMDE6MDowOjA6MDowOjA6MTEwMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIDDkvY3ljovnvKnooajnpLrms5VcbiAqIGlzSVB2NignRkYwMTo6MTEwMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSVB2NignOjoxJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNJUHY2KCc6OicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSVB2NignMDowOjA6MDowOjA6MDoxJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNJUHY2KCcwOjA6MDowOjA6MDowOjAnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiAvLyDlhoXltYxJUHY05Zyw5Z2A6KGo56S65rOVXG4gKiBpc0lQdjYoJzo6MTkyLjE2OC4xLjEnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0lQdjYoJzo6RkZGRjoxOTIuMTY4LjEuMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzSVB2NignMTkyLjE2OC4xLjEnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBpc0lQdjYodmFsdWUpIHtcbiAgY29uc3QgdmFsdWVTdHIgPSBjb252ZXJ0VG9TdHJpbmcodmFsdWUpO1xuICByZXR1cm4gcmVnLnRlc3QodmFsdWVTdHIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0lQdjY7XG4iLCJpbXBvcnQgY29udmVydFRvU3RyaW5nIGZyb20gJy4vdXRpbHMvY29udmVydFRvU3RyaW5nJztcblxuLy8gdXJs5q2j5YiZXG5jb25zdCByZWcgPSAvKCgoXmh0dHBzPzooPzpcXC9cXC8pPykoPzpbLTs6Jj1cXCtcXCQsXFx3XStAKT9bQS1aYS16MC05Li1dKyg/OjpcXGQrKT98KD86d3d3LnxbLTs6Jj1cXCtcXCQsXFx3XStAKVtBLVphLXowLTkuLV0rKSgoPzpcXC9bXFwrfiVcXC8uXFx3LV9dKik/XFw/Pyg/OlstXFwrPSY7JUAuXFx3X10qKSM/KD86W1xcd10qKSk/KSQvO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4unVybFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzVXJsXG4gKiBAc2luY2UgMy40LjBcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3poLndpa2lwZWRpYS5vcmcvd2lraS/nu5/kuIDotYTmupDlrprkvY3nrKZ857uf5LiA6LWE5rqQ5a6a5L2N56ymfVxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDlgLzmmK/lkKbkuLp1cmxcbiAqIEBleGFtcGxlXG4gKlxuICogaXNVcmwoJycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1VybCgnOC44LjguOCcpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc1VybCgnZXhhbXBsZS5jb20nKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc1VybCgnaHR0cDovL2V4YW1wbGUuY29tJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNVcmwoJ2h0dHBzOi8vZXhhbXBsZS5jb206ODA4MCcpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzVXJsKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Rlc3QvMTIzJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNVcmwoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdGVzdC8xMjM/Zm9vPWJhcicpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1VybCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWcudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVXJsO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOWfuuehgOinhOWIme+8jOeUsTE05L2N5pWw5a2X5pys5L2T56CB5ZKMMeS9jeaVsOWtl+agoemqjOeggee7hOaIkO+8jOWFtuS4reacrOS9k+eggeS7juW3puiHs+WPs+S+neasoeS4uu+8mjbkvY3pppbmrKHnmbvorrDmnLrlhbPnoIHjgIE45L2N6aG65bqP56CB44CCXG5jb25zdCBiYXNlUmVnID0gL15cXGR7MTV9JC87XG5cbi8qKlxuICog6K6h566X5qCh6aqM56CBXG4gKlxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAzLjUuMFxuICogQHBhcmFtIHtzdHJpbmd9IHByZUNvZGUg6JCl5Lia5omn54Wn5YmNMTTkvY1cbiAqIEByZXR1cm5zIHtudW1iZXJ9IOagoemqjOeggVxuICovXG5mdW5jdGlvbiBzdW1DaGVja0NvZGUocHJlQ29kZSkge1xuICBsZXQgcmV0TnVtOyAvLyDmoKHpqozkvY3mlbDlrZdcblxuICBsZXQgcGogPSAxMDsgLy8gUGorMSAxMe+8jOWIneWni+S4ujEwXG5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCAxNDsgaisrKSB7XG4gICAgY29uc3Qgc2ogPSBwaiArIE51bWJlcihwcmVDb2RlW2pdKTtcbiAgICBsZXQgc2oxMCA9IHNqICUgMTA7XG4gICAgc2oxMCA9IHNqMTAgPT09IDAgPyAxMCA6IHNqMTA7XG4gICAgY29uc3QgcGoxID0gc2oxMCAqIDI7XG4gICAgcGogPSBwajEgJSAxMTtcbiAgfVxuXG4gIC8vIOWPjeaooTEw6K6h566XXG4gIGlmIChwaiA9PT0gMTAgfHwgcGogPT09IDEpIHtcbiAgICByZXROdW0gPSAxO1xuICB9IGVsc2Uge1xuICAgIHJldE51bSA9IDExIC0gcGo7XG4gIH1cblxuICByZXR1cm4gcmV0TnVtO1xufVxuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uuiQpeS4muaJp+eFp+WPt++8jOS5n+WPq+W3peWVhuazqOWGjOWPt+OAgueUsTE05L2N5pWw5a2X5pys5L2T56CB5ZKMMeS9jeaVsOWtl+agoemqjOeggee7hOaIkO+8jOWFtuS4reacrOS9k+eggeS7juW3puiHs+WPs+S+neasoeS4uu+8mjbkvY3pppbmrKHnmbvorrDmnLrlhbPnoIHjgIE45L2N6aG65bqP56CB44CCXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNCdXNpbmVzc0xpY2Vuc2VcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3dlbmt1LmJhaWR1LmNvbS92aWV3LzE5ODczNzA0Y2MxNzU1MjcwNzIyMDg3Yy5odG1sfEdTMTXigJQyMDA2IOW3peWVhuihjOaUv+euoeeQhuW4guWcuuS4u+S9k+azqOWGjOWPt+e8luWItuinhOWImX1cbiAqIEBzaW5jZSAzLjUuMFxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxvb3NlPWZhbHNlXSDlrr3mnb7mqKHlvI/jgILlpoLmnpzkuLp0cnVl77yM5LiN5qCh6aqM5qCh6aqM5L2N44CCXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5YC85piv5ZCm5Li66JCl5Lia5omn54Wn5Y+3XG4gKiBAZXhhbXBsZVxuICpcbiAqIGlzQnVzaW5lc3NMaWNlbnNlKCczMTAxMTU2MDA5ODU1MzMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc0J1c2luZXNzTGljZW5zZSgnMzEwMTE1NjAwOScpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBpc0J1c2luZXNzTGljZW5zZSgnMzEwMTE1NjAwOScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGlzQnVzaW5lc3NMaWNlbnNlKCczMTAxMTU2MDA5ODU1MzUnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogaXNCdXNpbmVzc0xpY2Vuc2UoJzMxMDExNTYwMDk4NTUzNScsIHsgbG9vc2U6IHRydWUgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzQnVzaW5lc3NMaWNlbnNlKHZhbHVlLCB7IGxvb3NlID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlU3RyID0gY29udmVydFRvU3RyaW5nKHZhbHVlKTtcblxuICBjb25zdCBwYXNzQmFzZVJ1bGUgPSBiYXNlUmVnLnRlc3QodmFsdWVTdHIpO1xuXG4gIC8vIOWuveadvuaooeW8jyDmiJYg5Z+656GA6KeE5YiZ5LiN6YCa6L+H55u05o6l6L+U5ZueXG4gIGlmIChsb29zZSB8fCAhcGFzc0Jhc2VSdWxlKSB7XG4gICAgcmV0dXJuIHBhc3NCYXNlUnVsZTtcbiAgfVxuXG4gIC8vIOWJjTE05L2NXG4gIGNvbnN0IHByZUNvZGUgPSB2YWx1ZVN0ci5zdWJzdHJpbmcoMCwgMTQpO1xuICAvLyDmoKHpqoznoIFcbiAgY29uc3QgbGFzdENvZGUgPSB2YWx1ZVN0ci5zdWJzdHJpbmcodmFsdWVTdHIubGVuZ3RoIC0gMSk7XG4gIC8vIOiuoeeul+agoemqjOeggVxuICBjb25zdCBjaGVja0NvZGUgPSBzdW1DaGVja0NvZGUocHJlQ29kZSk7XG5cbiAgcmV0dXJuIGxhc3RDb2RlID09PSBTdHJpbmcoY2hlY2tDb2RlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNCdXNpbmVzc0xpY2Vuc2U7XG4iLCIvKipcbiAqIOajgOa1i+WAvOaYr+WQpuexu+S8vFByb21pc2Xlr7nosaFcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlZhbGlkYXRvci5pc1Byb21pc2VMaWtlXG4gKiBAc2luY2UgMy44LjBcbiAqIEBwYXJhbSB7Kn0gb2JqIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuexu+S8vFByb21pc2Xlr7nosaFcbiAqIEBleGFtcGxlXG4gKlxuICogaXNQcm9taXNlTGlrZShbXSk7XG4gKiA9PiBmYWxzZVxuICpcbiAqIGlzUHJvbWlzZUxpa2Uoe3RoZW46KCk9Pnt9fSk7XG4gKiA9PiB0cnVlXG4gKlxuICogaXNQcm9taXNlTGlrZShQcm9taXNlLnJlc29sdmUoKSk7XG4gKiA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUHJvbWlzZUxpa2Uob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm9taXNlTGlrZTtcbiIsImltcG9ydCBjb252ZXJ0VG9TdHJpbmcgZnJvbSAnLi91dGlscy9jb252ZXJ0VG9TdHJpbmcnO1xuXG4vLyDmuK/mvrPlsYXmsJHmnaXlvoDlhoXlnLDpgJrooYzor4HmraPliJlcbmNvbnN0IHJlZ0hNQ2FyZCA9IC9eW2htXXsxfShbMC05XXsxMH18WzAtOV17OH0pJC9pO1xuXG4vKipcbiAqIOajgOa1i+WAvOaYr+WQpuS4uua4r+a+s+WxheawkeadpeW+gOWGheWcsOmAmuihjOivge+8jOS/l+ensOWbnuS5oeivgeaIluWbnuS5oeWNoeOAglxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VmFsaWRhdG9yLmlzSE1DYXJkXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL3poLndpa2lwZWRpYS5vcmcvd2lraS/muK/mvrPlsYXmsJHmnaXlvoDlhoXlnLDpgJrooYzor4F85riv5r6z5bGF5rCR5p2l5b6A5YaF5Zyw6YCa6KGM6K+BfVxuICogQHBhcmFtIHsqfSB2YWx1ZSDopoHmo4DmtYvnmoTlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufSDmmK/lkKbkuLrmuK/mvrPlsYXmsJHmnaXlvoDlhoXlnLDpgJrooYzor4FcbiAqIEBleGFtcGxlXG4gKiAvLyDnrKzkuIDku6MgMTEg5L2NXG4gKiBpc0hNQ2FyZCgnaDMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnSDMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnbTMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnTTMyMDMxMTc3MDcnKSAvLyB0cnVlXG4gKlxuICogLy8g56ys5LqM5LujIDkg5L2NXG4gKiBpc0hNQ2FyZCgnaDMyMDMxMTc3JykgLy8gdHJ1ZVxuICogaXNITUNhcmQoJ0gzMjAzMTE3NycpIC8vIHRydWVcbiAqIGlzSE1DYXJkKCdtMzIwMzExNzcnKSAvLyB0cnVlXG4gKiBpc0hNQ2FyZCgnTTMyMDMxMTc3JykgLy8gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc0hNQ2FyZCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWdITUNhcmQudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSE1DYXJkO1xuIiwiaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8vIOWPsOa5vuWxheawkeadpeW+gOWkp+mZhumAmuihjOivgeato+WIme+8jOaUr+aMgeS4gOasoeaAp+efreacn+WPsOiDnuivgVxuY29uc3QgcmVnVFdDYXJkID0gL14oXFxkezh9fFtcXGRhLXpdezEwfSkkL2k7XG5cbi8qKlxuICog5qOA5rWL5YC85piv5ZCm5Li65Y+w5rm+5bGF5rCR5p2l5b6A5aSn6ZmG6YCa6KGM6K+B77yM5L+X56ew5Y+w6IOe6K+B44CCXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpWYWxpZGF0b3IuaXNUV0NhcmRcbiAqIEBzaW5jZSA0LjAuMFxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+WPsOa5vuWxheawkeadpeW+gOWkp+mZhumAmuihjOivgXzlj7Dmub7lsYXmsJHmnaXlvoDlpKfpmYbpgJrooYzor4F9XG4gKiBAcGFyYW0geyp9IHZhbHVlIOimgeajgOa1i+eahOWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uuWPsOa5vuWxheawkeadpeW+gOWkp+mZhumAmuihjOivgVxuICogQGV4YW1wbGVcbiAqIGlzVFdDYXJkKCcxMjM0NTY3OCcpIC8vIHRydWVcbiAqIGlzVFdDYXJkKCcwNzI1NzQ1NicpIC8vIHRydWVcbiAqXG4gKiAvLyDkuIDmrKHmgKfnn63mnJ9cbiAqIGlzVFdDYXJkKCdGMjkwMjk5OTc3JykgLy8gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1RXQ2FyZCh2YWx1ZSkge1xuICBjb25zdCB2YWx1ZVN0ciA9IGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG4gIHJldHVybiByZWdUV0NhcmQudGVzdCh2YWx1ZVN0cik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVFdDYXJkO1xuIiwiLy8g5pyA5aSn5a6J5YWo5pWw5a2XXG5leHBvcnQgY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8IDkwMDcxOTkyNTQ3NDA5OTE7XG4vLyDmnIDlsI/lronlhajmlbDlrZdcbmV4cG9ydCBjb25zdCBNSU5fU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgLTkwMDcxOTkyNTQ3NDA5OTE7XG4iLCIvKipcbiAqIOWPguiAgzogaHR0cHM6Ly9naXRodWIuY29tL25lZmUvbnVtYmVyLXByZWNpc2lvbi9ibG9iL21hc3Rlci9zcmMvaW5kZXgudHNcbiAqXG4gKiDop6PlhrPmta7liqjov5Dnrpfpl67popjvvIzpgb/lhY3lsI/mlbDngrnlkI7kuqfnlJ/lpJrkvY3mlbDlkozorqHnrpfnsr7luqbmjZ/lpLHjgIJcbiAqIOmXrumimOekuuS+i++8mjIuMyArIDIuNCA9IDQuNjk5OTk5OTk5OTk5OTk577yMMS4wIC0gMC45ID0gMC4wOTk5OTk5OTk5OTk5OTk5OFxuICovXG5cbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIsIE1JTl9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICog5piv5ZCm5Li656eR5a2m6K6h5pWw5rOV5pWw5a2XXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG51bSDmo4Dmn6XlgLxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTY2llbnRpZmljTnVtYmVyKG51bSkge1xuICByZXR1cm4gL1xcZCtcXC4/XFxkKmVbXFwrXFwtXSpcXGQrL2kudGVzdChudW0pO1xufVxuXG4vKipcbiAqIOaKiumUmeivr+eahOaVsOaNrui9rOato1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0g6L6T5YWl5pWwXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0xMl0g5bCP5pWw54K555qE57K+5bqmXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQGV4YW1wbGVcbiAqXG4gKiAgc3RyaXAoMC4wOTk5OTk5OTk5OTk5OTk5OCk9MC4xXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcChudW0sIHByZWNpc2lvbiA9IDEyKSB7XG4gIHJldHVybiArcGFyc2VGbG9hdChudW0udG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG59XG5cbi8qKlxuICog6K6h566X5pWw5a2X55qE5bCP5pWw54K56ZW/5bqm77yM5pSv5oyB56eR5a2m6K6w5pWw5rOVXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBudW0g6L6T5YWl5pWwXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDlsI/mlbDngrnplb/luqZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZ2l0TGVuZ3RoKG51bSkge1xuICAvLyBHZXQgZGlnaXQgbGVuZ3RoIG9mIGVcbiAgY29uc3QgZVNwbGl0ID0gbnVtLnRvU3RyaW5nKCkuc3BsaXQoL2UvaSk7XG4gIGNvbnN0IGxlbiA9IChlU3BsaXRbMF0uc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoIC0gKyhlU3BsaXRbMV0gfHwgMCk7XG4gIHJldHVybiBsZW4gPiAwID8gbGVuIDogMDtcbn1cblxuLyoqXG4gKiDmiorlsI/mlbDovazmiJDmlbTmlbDvvIzmlK/mjIHnp5HlraborqHmlbDms5XjgILlpoLmnpzmmK/lsI/mlbDliJnmlL7lpKfmiJDmlbTmlbBcbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG51bSDovpPlhaXmlbBcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDJGaXhlZChudW0pIHtcbiAgaWYgKCFpc1NjaWVudGlmaWNOdW1iZXIobnVtLnRvU3RyaW5nKCkpKSB7XG4gICAgcmV0dXJuIE51bWJlcihudW0udG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpKTtcbiAgfVxuICBjb25zdCBkTGVuID0gZGlnaXRMZW5ndGgobnVtKTtcbiAgcmV0dXJuIGRMZW4gPiAwID8gc3RyaXAoK251bSAqIE1hdGgucG93KDEwLCBkTGVuKSkgOiArbnVtO1xufVxuXG4vKipcbiAqIOajgOa1i+aVsOWtl+aYr+WQpui2iueVjO+8jOWmguaenOi2iueVjOe7meWHuuaPkOekulxuICogQHBhcmFtIHtudW1iZXJ9IG51bSDovpPlhaXmlbBcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0JvdW5kYXJ5KG51bSkge1xuICBpZiAoK251bSA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgK251bSA8IE1JTl9TQUZFX0lOVEVHRVIpIHtcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlV2FybmluZykge1xuICAgICAgY29uc29sZS53YXJuKGAke251bX0gaXMgYmV5b25kIGJvdW5kYXJ5IHdoZW4gdHJhbnNmZXIgdG8gaW50ZWdlciwgdGhlIHJlc3VsdHMgbWF5IG5vdCBiZSBhY2N1cmF0ZWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOWOu+aOieW3pui+ueaVsOWtlzBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbnVtIOaVsOWtl+Wtl+espuS4slxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MZWZ0WmVybyhudW0pIHtcbiAgY29uc3QgcmVnID0gL14oWystXSk/KDArKShbMC05XFwuXSspJC87XG4gIGNvbnN0IHJlc3VsdCA9IHJlZy5leGVjKG51bSk7XG5cbiAgbGV0IHNpZ247XG5cbiAgaWYgKHJlc3VsdCkge1xuICAgIHNpZ24gPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgcmV0dXJuIHNpZ24gKyAocmVzdWx0WzNdWzBdID09PSAnLicgPyAnMCcgKyByZXN1bHRbM10gOiByZXN1bHRbM10pO1xuICB9XG5cbiAgcmV0dXJuIG51bTtcbn1cblxuLyoqXG4gKiDnp5HlraborqHmlbDms5XovazmjaLmiJDmma7pgJrmlbDlrZdcbiAqXG4gKiBKYXZhU2NyaXB05Zyo5Lul5LiL5oOF5pmv5Lya6Ieq5Yqo5bCG5pWw5YC86L2s5o2i5Li656eR5a2m6K6h5pWw5rOV77yaXG4gKiAgMS7lsI/mlbDngrnliY3nmoTmlbDlrZfkuKrmlbDlpKfkuo7nrYnkuo4yMuS9jVxuICogIDIu5bCP5pWw54K55YmN6L655pivMO+8jOWwj+aVsOeCueWQjuWNgeWIhuS9je+8iOWMheWQq+WNgeWIhuS9je+8ieS5i+WQjui/nue7rembtueahOS4quaVsOWkp+S6juetieS6jjbkuKpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gbnVtIOenkeWtpuiuoeaVsOazleaVsOWtl1xuICogQHJldHVybnMge3N0cmluZ30g6L2s5o2i5ZCO55qE5pWw5a2X5a2X56ym5LiyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2llbnRpZmljVG9OdW1iZXIobnVtKSB7XG4gIGlmIChpc1NjaWVudGlmaWNOdW1iZXIobnVtLnRvU3RyaW5nKCkpKSB7XG4gICAgY29uc3QgemVybyA9ICcwJztcbiAgICBjb25zdCBwYXJ0cyA9IFN0cmluZyhudW0pLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ2UnKTtcbiAgICBjb25zdCBlID0gcGFydHMucG9wKCk7IC8vIOWtmOWCqOaMh+aVsFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsID0gTWF0aC5hYnMoZSk7IC8vIOWPlue7neWvueWAvO+8jGwtMeWwseaYrzDnmoTkuKrmlbBcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qgc2lnbiA9IGUgLyBsOyAvL+WIpOaWreato+i0n1xuICAgIGNvbnN0IGNvZWZmX2FycmF5ID0gcGFydHNbMF0uc3BsaXQoJy4nKTsgLy8g5bCG57O75pWw5oyJ54Wn5bCP5pWw54K55ouG5YiGXG5cbiAgICAvL+WmguaenOaYr+Wwj+aVsFxuICAgIGlmIChzaWduID09PSAtMSkge1xuICAgICAgLy/mi7zmjqXlrZfnrKbkuLLvvIzlpoLmnpzmmK/lsI/mlbDvvIzmi7zmjqUw5ZKM5bCP5pWw54K5XG4gICAgICBudW0gPSB6ZXJvICsgJy4nICsgbmV3IEFycmF5KGwpLmpvaW4oemVybykgKyBjb2VmZl9hcnJheS5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVjID0gY29lZmZfYXJyYXlbMV07XG5cbiAgICAgIC8v5aaC5p6c5piv5pW05pWw77yM5bCG5pW05pWw6Zmk56ys5LiA5L2N5LmL5aSW55qE6Z2e6Zu25pWw5a2X6K6h5YWl5L2N5pWw77yM55u45bqU55qE5YeP5bCRMOeahOS4quaVsFxuICAgICAgaWYgKGwgLSBkZWMubGVuZ3RoIDwgMCkge1xuICAgICAgICBudW0gPSB0cmltTGVmdFplcm8oY29lZmZfYXJyYXlbMF0gKyBkZWMuc3Vic3RyaW5nKDAsIGwpKSArICcuJyArIGRlYy5zdWJzdHJpbmcobCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL+aLvOaOpeWtl+espuS4su+8jOWmguaenOaYr+aVtOaVsO+8jOS4jemcgOimgeaLvOaOpeWwj+aVsOeCuVxuICAgICAgICBudW0gPSBjb2VmZl9hcnJheS5qb2luKCcnKSArIG5ldyBBcnJheShsIC0gZGVjLmxlbmd0aCArIDEpLmpvaW4oemVybyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIG51bTtcbn1cbiIsImltcG9ydCBpc1R5cGUgZnJvbSAnLi9pc1R5cGUnO1xuXG4vKipcbiAqIOajgOafpeWAvOaYr+WQpuS4uk5hTlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc05hTlxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uk5hTlxuICogQGV4YW1wbGVcbiAqXG4gKiBpc05hTihOYU4pXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOYU4oMSlcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIF9pc05hTih2YWx1ZSkge1xuICByZXR1cm4gaXNUeXBlKHZhbHVlLCAnTnVtYmVyJykgJiYgaXNOYU4odmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBfaXNOYU47XG4iLCJpbXBvcnQgeyBjaGVja0JvdW5kYXJ5LCBzY2llbnRpZmljVG9OdW1iZXIsIGlzU2NpZW50aWZpY051bWJlciB9IGZyb20gJy4vdXRpbHMvbWF0aC51dGlsJztcbmltcG9ydCBpc05hTiBmcm9tICcuL3V0aWxzL3R5cGUvaXNOYU4nO1xuaW1wb3J0IHsgdHJpbUxlZnRaZXJvIH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuXG5jb25zdCByZWcgPSAvXlsrLV0/XFxkKlxcLj9cXGQqJC87XG5cbi8qKlxuICog5qOA5p+l5pWw5a2X5oiW5pWw5a2X5a2X56ym5LiyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBudW1cbiAqIEByZXR1cm5zIOaYr+WQpuS4uuaVsOWtl1xuICovXG5mdW5jdGlvbiBjaGVja051bWJlcihudW0pIHtcbiAgaWYgKCEocmVnLnRlc3QobnVtKSB8fCBpc1NjaWVudGlmaWNOdW1iZXIobnVtKSkgfHwgaXNOYU4obnVtKSB8fCAodHlwZW9mIG51bSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIG51bSAhPT0gJ3N0cmluZycpIHx8IG51bSA9PT0gJycpIHtcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlV2FybmluZykge1xuICAgICAgY29uc29sZS53YXJuKGAke251bX0gaW52YWxpZCBwYXJhbWV0ZXIuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8g5pWw5a2X6LaF6ZmQ5aaC5p6c5LiN5piv5piv5a2X56ym5Liy77yM5Y+v6IO95pyJ5byC5bi4XG4gIC8vIOWmgiAxMTExMTExMTExMTExMTExMTExMTExIC8vID0+IDEuMTExMTExMTExMTExMTExMWUrMjFcbiAgaWYgKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSB7XG4gICAgY2hlY2tCb3VuZGFyeShudW0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICog5qC85byP5YyW5pW05pWw6YOo5YiGXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnRTdHIg5pWw5a2X5a2X56ym5LiyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhvdXNhbmQg5Y2D5YiG5L2N56ym5Y+3XG4gKiBAcmV0dXJucyDmoLzlvI/ljJblkI7nmoTlgLxcbiAqL1xuZnVuY3Rpb24gZm9ybWF0SW50KGludFN0ciwgdGhvdXNhbmQpIHtcbiAgbGV0IHR4dCA9ICcnO1xuICBpbnRTdHIgPSB0cmltTGVmdFplcm8oaW50U3RyKTtcbiAgaW50U3RyID0gaW50U3RyWzBdID09PSAnKycgPyBpbnRTdHIuc3Vic3RyaW5nKDEpIDogaW50U3RyOyAvLyDljrvmjokr56ym5Y+3XG4gIGNvbnN0IG5lZ2F0aXZlU3ltYm9sID0gTnVtYmVyKGludFN0cikgPCAwID8gJy0nIDogJyc7XG4gIGNvbnN0IHJlQXJyID0gbmVnYXRpdmVTeW1ib2wgPyBpbnRTdHIuc3Vic3RyaW5nKDEpLnNwbGl0KCcnKS5yZXZlcnNlKCkgOiBpbnRTdHIuc3BsaXQoJycpLnJldmVyc2UoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgdHh0ICs9IHJlQXJyW2ldICsgKChpICsgMSkgJSAzID09PSAwICYmIGkgKyAxICE9PSByZUFyci5sZW5ndGggPyB0aG91c2FuZCA6ICcnKTtcbiAgfVxuXG4gIHJldHVybiBuZWdhdGl2ZVN5bWJvbCArIHR4dC5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIOagvOW8j+WMluWwj+aVsOmDqOWIhu+8jOWmguaenOS9v+eUqCB0b0ZpeGVk77yM6LaF5aSn6aKd5pWw5a2X5Lya6Ieq5Yqo6KKr5oiq5patXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWNTdHIg5bCP5pWw54K56YOo5YiG55qE5a2X56ym5LiyXG4gKiBAcGFyYW0ge251bWJlcn0gcHJlY2lzaW9uIOS/neeVmeS9jeaVsFxuICogQHBhcmFtIHtzdHJpbmd9IGRlY2ltYWwg5bCP5pWw54K556ym5Y+3XG4gKiBAcmV0dXJucyDmoLzlvI/ljJblkI7nmoTlgLxcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RGVjKGRlY1N0ciwgcHJlY2lzaW9uLCBkZWNpbWFsKSB7XG4gIGlmIChwcmVjaXNpb24gPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCB6ZXJvID0gMDtcbiAgbGV0IHJldCA9ICcnO1xuXG4gIGlmIChkZWNTdHIgJiYgTnVtYmVyKGRlY1N0cikgPiAwKSB7XG4gICAgbGV0IHRtcE51bSA9IHBhcnNlRmxvYXQoJzAuJyArIGRlY1N0cik7XG4gICAgcmV0ID0gdG1wTnVtLnRvRml4ZWQocHJlY2lzaW9uKS5zdWJzdHJpbmcoMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gemVyby50b0ZpeGVkKHByZWNpc2lvbikuc3Vic3RyaW5nKDIpO1xuICB9XG5cbiAgcmV0dXJuIGRlY2ltYWwgKyByZXQ7XG59XG5cbi8qKlxuICog5qC85byP5YyW6YeR6aKdXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IuZm9ybWF0TW9uZXlcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IG51bSDpnIDovazmjaLph5Hpop0gKOacgOWkp++8mjkwMDcxOTkyNTQ3NDA5OTEg5pyA5bCP77yaIC05MDA3MTk5MjU0NzQwOTkxKVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIOmHkemineagvOW8j+WMlumFjee9rlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFtvcHRpb25zLnByZWNpc2lvbj0yXSAtIOS/neeVmeS9jeaVsCDvvIjmnIDpq5jvvJoxMOS9je+8iVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN5bWJvbF0gLSDotKfluIHnrKblj7dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aG91c2FuZD1cIixcIl0gLSDljYPliIbkvY3nrKblj7dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5kZWNpbWFsPVwiLlwiXSAtIOWwj+aVsOS9jeespuWPt1xuICogQHJldHVybnMge3N0cmluZ30g5qC85byP5YyW55qE6YeR6aKdXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIOaVtOaVsFxuICogZm9ybWF0TW9uZXkoJzEwMDAnKTtcbiAqIC8vID0+IDEsMDAwLjAwXG4gKlxuICogLy8g5bCP5pWw77yI6buY6K6k5L+d55WZMuS9jeWwj+aVsO+8iVxuICogZm9ybWF0TW9uZXkoJzMwMDAuMDMnKTtcbiAqIC8vID0+IDMsMDAwLjAzXG4gKlxuICogLy8g5L+d55WZNOS9jeWwj+aVsFxuICogZm9ybWF0TW9uZXkoJzMwMDAuMDMwMCcsIHsgcHJlY2lzaW9uOiA0IH0pO1xuICogLy8gPT4gMywwMDAuMDMwMFxuICpcbiAqIC8vIOS/neeVmTEw5L2N5bCP5pWwXG4gKiBmb3JtYXRNb25leSgnMTUwMC4yJywgeyBwcmVjaXNpb246IDEwIH0pO1xuICogLy8gPT4gMSw1MDAuMjAwMDAwMDAwMFxuICpcbiAqIC8vIOiHquWumuS5ieWNleS9jeespuWPt1xuICogZm9ybWF0TW9uZXkoMTAwMC4wMCwgeyBzeW1ib2w6ICckJyB9KTtcbiAqIC8vID0+ICQxLDAwMC4wMFxuICpcbiAqIC8vIOiHquWumuS5ieWNg+S9jeWIhuWJsuespu+8iOm7mOiupCcsJ++8iVxuICogZm9ybWF0TW9uZXkoMTAwMC4wMCwgeyB0aG91c2FuZDogJ3wnIH0pO1xuICogLy8gPT4gMXwwMDAuMDBcbiAqXG4gKiAvLyDoh6rlrprkuYnlsI/mlbDkvY3liIblibLnrKYo6buY6K6kJy4nKVxuICogZm9ybWF0TW9uZXkoMTAwMC4wMCwgeyBkZWNpbWFsOiAnJicgfSk7XG4gKiAvLyA9PiAxLDAwMCYwMFxuICovXG5jb25zdCBmb3JtYXRNb25leSA9IChudW0sIHsgcHJlY2lzaW9uID0gMiwgc3ltYm9sLCB0aG91c2FuZCA9ICcsJywgZGVjaW1hbCA9ICcuJyB9ID0ge30pID0+IHtcbiAgLy8g5pWw5a2X5Y+C5pWw5LiN5q2j56Gu77yM6L+U5Zue56m65a2X56ym5LiyXG4gIC8vIEB0cy1pZ25vcmVcbiAgaWYgKCFjaGVja051bWJlcihudW0pKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8g5Y+C5pWw6KeE5pW05YyWXG4gIGlmICh0eXBlb2YgcHJlY2lzaW9uICE9PSAnbnVtYmVyJyB8fCBpc05hTihwcmVjaXNpb24pIHx8IHByZWNpc2lvbiA8IDApIHtcbiAgICBwcmVjaXNpb24gPSAyO1xuICB9IGVsc2UgaWYgKHByZWNpc2lvbiA+IDEwKSB7XG4gICAgcHJlY2lzaW9uID0gMTA7XG4gIH1cbiAgc3ltYm9sID0gdHlwZW9mIHN5bWJvbCA9PT0gJ3N0cmluZycgPyBzeW1ib2wgOiAnJztcbiAgdGhvdXNhbmQgPSB0eXBlb2YgdGhvdXNhbmQgPT09ICdzdHJpbmcnID8gdGhvdXNhbmQgOiAnLCc7XG4gIGRlY2ltYWwgPSB0eXBlb2YgZGVjaW1hbCA9PT0gJ3N0cmluZycgPyBkZWNpbWFsIDogJy4nO1xuXG4gIC8vIOi9rOaNouaVsOWtl+Wtl+espuS4su+8jOaUr+aMgeenkeWtpuiusOaVsOazlVxuICBjb25zdCBudW1TdHIgPSBzY2llbnRpZmljVG9OdW1iZXIobnVtKSArICcnO1xuICAvLyDmlbTmlbDlkozlsI/mlbDpg6jliIZcbiAgY29uc3QgW2ludFN0ciwgZGVjU3RyXSA9IG51bVN0ci5zcGxpdCgnLicpO1xuXG4gIHJldHVybiBzeW1ib2wgKyBmb3JtYXRJbnQoaW50U3RyLCB0aG91c2FuZCkgKyBmb3JtYXREZWMoZGVjU3RyLCBwcmVjaXNpb24sIGRlY2ltYWwpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TW9uZXk7XG4iLCIvKipcbiAqIOajgOafpeWAvOaYr+WQpuS4ulVuZGVmaW5lZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc1VuZGVmaW5lZFxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4ulVuZGVmaW5lZFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc1VuZGVmaW5lZCh1bmRlZmluZWQpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNVbmRlZmluZWQodm9pZCAwKVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzVW5kZWZpbmVkKG51bGwpXG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZvaWQgMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNVbmRlZmluZWQ7XG4iLCIvKipcbiAqIOajgOafpeWAvOaYr+WQpuS4uk51bGxcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlR5cGUuaXNOdWxsXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg5qOA5p+l5YC8XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0g5piv5ZCm5Li6TnVsbFxuICogQGV4YW1wbGVcbiAqXG4gKiBpc051bGwobnVsbClcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc051bGwodm9pZCAwKVxuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOdWxsO1xuIiwiaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5cbi8qKlxuICog5qOA5p+l5YC85piv5ZCm5Li6IHVuZGVmaW5lZCDmiJYgbnVsbFxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc05hTlxuICogQHNpbmNlIDQuMy4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uiB1bmRlZmluZWQg5oiWIG51bGxcbiAqL1xuZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05pbDtcbiIsImltcG9ydCBpc05pbCBmcm9tICcuL3V0aWxzL3R5cGUvaXNOaWwnO1xuaW1wb3J0IGNvbnZlcnRUb1N0cmluZyBmcm9tICcuL3V0aWxzL2NvbnZlcnRUb1N0cmluZyc7XG5cbi8qKlxuICog6KeE5pW05YyW5a2X56ym5Liy44CC5aaC5p6c5YC85Li6IHVuZGVmaW5lZCDmiJYgbnVsbCDlsIbovazkuLrnqbrlrZfnrKbkuLLvvIzlpoLmnpzlgLzkuI3mmK/lrZfnrKbkuLLnsbvlnovlsIbovazkuLrlrZfnrKbkuLLjgIJcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlByb2Nlc3Nvci5ub3JtYWxpemVTdHJpbmdcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcjc3RyaW5nX2luc3RhbmNlc3xTdHJpbmd9XG4gKiBAc2luY2UgNC4zLjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUg5b6F5aSE55CG55qE5YC8XG4gKiBAcmV0dXJucyB7c3RyaW5nfSDop4TmlbTljJbnmoTlgLxcbiAqIEBleGFtcGxlXG4gKiBub3JtYWxpemVTdHJpbmcoKTsgLy8gJydcbiAqIG5vcm1hbGl6ZVN0cmluZyh1bmRlZmluZWQpOyAvLyAnJ1xuICogbm9ybWFsaXplU3RyaW5nKHZvaWQgMCk7IC8vICcnXG4gKiBub3JtYWxpemVTdHJpbmcobnVsbCk7IC8vICcnXG4gKlxuICogbm9ybWFsaXplU3RyaW5nKHRydWUpOyAvLyAndHJ1ZSdcbiAqIG5vcm1hbGl6ZVN0cmluZyhOYU4pOyAvLyAnTmFOJ1xuICogbm9ybWFsaXplU3RyaW5nKDEpOyAvLyAnMSdcbiAqIG5vcm1hbGl6ZVN0cmluZygnYScpOyAvLyAnYSdcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHZhbHVlKSB7XG4gIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5vcm1hbGl6ZVN0cmluZztcbiIsImltcG9ydCBub3JtYWxpemVTdHJpbmcgZnJvbSAnLi9ub3JtYWxpemVTdHJpbmcnO1xuXG4vKipcbiAqIOagvOW8j+WMlumTtuihjOWNoeWPt1xuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLmZvcm1hdEJhbmtDYXJkXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYW5rQ2FyZE5vIOimgeWkhOeQhueahOWtl+espuS4slxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSDphY3nva7poblcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaGFyPVwiIFwiXSDpl7TpmpTlrZfnrKZcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9NF0g6Ze06ZqU6ZW/5bqmXG4gKiBAcmV0dXJucyB7c3RyaW5nfSDmoLzlvI/ljJbnmoTpk7booYzljaHlj7dcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gMTnkvY3pk7booYzljaFcbiAqIGZvcm1hdEJhbmtDYXJkKCc2MjI4NDgwNDAyNTY0ODkwMDE4Jyk7XG4gKiAvLyA9PiA2MjI4IDQ4MDQgMDI1NiA0ODkwIDAxOFxuICpcbiAqIC8vIDE25L2N6ZO26KGM5Y2hXG4gKiBmb3JtYXRCYW5rQ2FyZCgnNjIyODQ4MDQwMjU2NDg5MCcpO1xuICogLy8gPT4gNjIyOCA0ODA0IDAyNTYgNDg5MFxuICpcbiAqIC8vIOiEseaVj+mTtuihjOWNoVxuICogZm9ybWF0QmFua0NhcmQoJzYyMjgqKioqKioqKjg5MCcpO1xuICogLy8gPT4gNjIyOCAqKioqICoqKiogODkwXG4gKlxuICogLy8gMTbkvY3pk7booYzljaHvvIxcIi1cIumXtOmalFxuICogZm9ybWF0QmFua0NhcmQoJzYyMjg0ODA0MDI1NjQ4OTAnLCB7Y2hhcjogJy0nfSk7XG4gKiAvLyA9PiA2MjI4LTQ4MDQtMDI1Ni00ODkwXG4gKlxuICovXG5mdW5jdGlvbiBmb3JtYXRCYW5rQ2FyZChiYW5rQ2FyZE5vID0gJycsIHsgY2hhciA9ICcgJywgbGVuZ3RoID0gNCB9ID0ge30pIHtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChgKC57JHtsZW5ndGh9fSlgLCAnZycpO1xuICBjb25zdCByZWdDaGFyID0gbmV3IFJlZ0V4cChgJHtjaGFyfWAsICdnJyk7XG5cbiAgY29uc3QgcmVhbFZhbHVlID0gbm9ybWFsaXplU3RyaW5nKGJhbmtDYXJkTm8pLnJlcGxhY2UocmVnQ2hhciwgJycpO1xuICBjb25zdCBzdHIgPSByZWFsVmFsdWUucmVwbGFjZShyZWcsIGAkMSR7Y2hhcn1gKTtcblxuICByZXR1cm4gcmVhbFZhbHVlLmxlbmd0aCAlIGxlbmd0aCA9PT0gMCA/IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpIDogc3RyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRCYW5rQ2FyZDtcbiIsIi8qKlxuICog5pu/5o2i5a2X56ym77yM5bqU55So5Zy65pmv5aaC77ya6ISx5pWPXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IucmVwbGFjZUNoYXJcbiAqIEBzaW5jZSAxLjEuMFxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciDopoHlpITnkIbnmoTlrZfnrKbkuLJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3RhcnQ9M10g5byA5aeL5L2N572uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZW5kPS00XSDnu5PmnZ/kvY3nva5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jaGFyPVwiKlwiXSDmm7/mjaLlrZfnrKZcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5yZXBlYXRdIOabv+aNouWtl+espueahOmHjeWkjeasoeaVsO+8jOm7mOiupOS4uuabv+aNouWGheWuuemVv+W6pu+8jOWPr+iuvue9ruS4uuWbuuWumuWAvFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmV4Y2x1ZGVdIOaOkumZpOWtl+espu+8jOWmguaenOaMh+WumuaOkumZpOmhue+8jHJlcGVhdOiuvue9ruaXoOaViFxuICogQHJldHVybnMge3N0cmluZ30g5aSE55CG5ZCO55qE5a2X56ymXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIOaJi+acuuWPt1xuICogcmVwbGFjZUNoYXIoJzEzMDAwMDAwMDAwJyk7XG4gKiAvLyA9PiAxMzAqKioqMDAwMFxuICpcbiAqIC8vIOi6q+S7veivgVxuICogcmVwbGFjZUNoYXIoJzEzMDcwMTE5OTMxMDMwMjI4OCcpO1xuICogLy8gPT4gMTMwKioqKioqKioqKioyMjg4XG4gKlxuICogLy8g6YKu566xXG4gKiBjb25zdCBlbWFpbCA9ICcxMjM0NUBxcS5jb20nXG4gKiByZXBsYWNlQ2hhcihlbWFpbCwge3N0YXJ0OiAyLCBlbmQ6IGVtYWlsLmluZGV4T2YoJ0AnKSwgcmVwZWF0OiA0fSk7XG4gKiAvLyA9PiAxMioqKipAcXEuY29tXG4gKlxuICogLy8g6ZO26KGM5Y2h5Y+3XG4gKiByZXBsYWNlQ2hhcignNjIyODQ4MDQwMjU2NDg5MDAxOCcsIHtzdGFydDogMCwgZW5kOiAtNCwgcmVwZWF0OiA0fSk7XG4gKiAvLyA9PiAqKioqMDAxOFxuICpcbiAqIC8vIOW4puagvOW8j+eahOmTtuihjOWNoeWPt1xuICogcmVwbGFjZUNoYXIoJzYyMjggNDgwNCAwMjU2IDQ4OTAgMDE4Jywge3N0YXJ0OiA0LCBlbmQ6IC00LCBleGNsdWRlOiAnICd9KTtcbiAqIC8vID0+IDYyMjggKioqKiAqKioqICoqKiogMDE4XG4gKlxuICogLy8g55So5oi35ZCNXG4gKiByZXBsYWNlQ2hhcign5p6X5p+Q5p+QJywge3N0YXJ0OiAxLCBlbmQ6IEluZmluaXR5LCByZXBlYXQ6IDJ9KTtcbiAqIC8vID0+IOaelyoqXG4gKiByZXBsYWNlQ2hhcign5p6X5p+QJywge3N0YXJ0OiAxLCBlbmQ6IEluZmluaXR5LCByZXBlYXQ6IDJ9KTtcbiAqIC8vID0+IOaelyoqXG4gKiByZXBsYWNlQ2hhcign5p6X5p+Q5p+Q5p+QJywge3N0YXJ0OiAxLCBlbmQ6IEluZmluaXR5LCByZXBlYXQ6IDJ9KTtcbiAqIC8vID0+IOaelyoqXG4gKlxuICovXG5mdW5jdGlvbiByZXBsYWNlQ2hhcihzdHIgPSAnJywgeyBzdGFydCA9IDMsIGVuZCA9IC00LCBjaGFyID0gJyonLCByZXBlYXQsIGV4Y2x1ZGUgfSA9IHt9KSB7XG4gIGNvbnN0IHN0ckxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgLy8g5byA5aeL5L2N572u6LaF6L+Hc3Ry6ZW/5bqmXG4gIGlmIChNYXRoLmFicyhzdGFydCkgPj0gc3RyTGVuKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj0gMCA/IHN0YXJ0IDogc3RyTGVuICsgc3RhcnQ7XG4gIGVuZCA9IGVuZCA+PSAwID8gZW5kIDogc3RyTGVuICsgZW5kO1xuXG4gIC8vIOW8gOWni+S9jee9ruWkp+S6jue7k+adn+S9jee9rlxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGxldCBtaWRkbGVTdHIgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG4gIGlmIChleGNsdWRlKSB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChgW14ke2V4Y2x1ZGV9XWAsICdnJyk7XG4gICAgbWlkZGxlU3RyID0gbWlkZGxlU3RyLnJlcGxhY2UocmVnLCBjaGFyKTtcbiAgfSBlbHNlIHtcbiAgICByZXBlYXQgPSB0eXBlb2YgcmVwZWF0ID09PSAnbnVtYmVyJyAmJiByZXBlYXQgPj0gMCA/IHJlcGVhdCA6IG1pZGRsZVN0ci5sZW5ndGg7XG4gICAgbWlkZGxlU3RyID0gY2hhci5yZXBlYXQocmVwZWF0KTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIG1pZGRsZVN0ciArIHN0ci5zdWJzdHJpbmcoZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVwbGFjZUNoYXI7XG4iLCJpbXBvcnQgeyBjaGVja0JvdW5kYXJ5IH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuXG4vLyDnroDkvZNcbmNvbnN0IGNobk51bWJlckNoYXIgPSBbJ+mbticsICfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrScsICfkuIMnLCAn5YWrJywgJ+S5nSddO1xuY29uc3QgY2huVW5pdENoYXIgPSBbJycsICfljYEnLCAn55m+JywgJ+WNgyddO1xuXG4vLyDnuYHkvZNcbmNvbnN0IGJpZzVOdW1iZXJDaGFyID0gWyfpm7YnLCAn5aO5JywgJ+i0sCcsICflj4EnLCAn6IKGJywgJ+S8jScsICfpmYYnLCAn5p+SJywgJ+aNjCcsICfnjpYnXTtcbmNvbnN0IGJpZzVVbml0Q2hhciA9IFsnJywgJ+aLvicsICfkvbAnLCAn5LufJ107XG5cbi8vIOaVsOWtl+Wtl+espuOAgeiuoeaVsOWNleS9jVxuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBudW1iZXJDaGFyO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCB1bml0Q2hhcjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nW119XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgdW5pdFNlY3Rpb247XG5cbi8qKlxuICog5q+P5Liq5bCP6IqC55qE5YaF6YOo6L+b6KGM6L2s5YyWXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWN0aW9uIOaVsOWtl1xuICogQHJldHVybnMge3N0cmluZ30g6L2s5YyW55qE5pWw5a2XXG4gKi9cbmZ1bmN0aW9uIHNlY3Rpb25Ub0NoaW5lc2Uoc2VjdGlvbikge1xuICBsZXQgc3RyID0gJycsXG4gICAgY2huc3RyID0gJycsXG4gICAgemVybyA9IGZhbHNlLCAvL3plcm/kuLrmmK/lkKbov5vooYzooaXpm7bvvIwg56ys5LiA5qyh6L+b6KGM5Y+W5L2Z55Sx5LqO5Li65Liq5L2N5pWw77yM6buY6K6k5LiN6KGl6Zu2XG4gICAgdW5pdFBvcyA9IDA7XG5cbiAgd2hpbGUgKHNlY3Rpb24gPiAwKSB7XG4gICAgLy8g5a+55pWw5a2X5Y+W5L2ZMTDvvIzlvpfliLDnmoTmlbDljbPkuLrkuKrkvY3mlbBcbiAgICBsZXQgdiA9IHNlY3Rpb24gJSAxMDtcblxuICAgIC8v5aaC5p6c5pWw5a2X5Li66Zu277yM5YiZ5a+55a2X56ym5Liy6L+b6KGM6KGl6Zu2XG4gICAgaWYgKHYgPT0gMCkge1xuICAgICAgaWYgKHplcm8pIHtcbiAgICAgICAgLy/lpoLmnpzpgYfliLDov57nu63lpJrmrKHlj5bkvZnpg73mmK8w77yM6YKj5LmI5Y+q6ZyA6KGl5LiA5Liq6Zu25Y2z5Y+vXG4gICAgICAgIHplcm8gPSBmYWxzZTtcbiAgICAgICAgY2huc3RyID0gbnVtYmVyQ2hhclt2XSArIGNobnN0cjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy/nrKzkuIDmrKHlj5bkvZnkuYvlkI7vvIzlpoLmnpzlho3mrKHlj5bkvZnkuLrpm7bvvIzliJnpnIDopoHooaXpm7ZcbiAgICAgIHplcm8gPSB0cnVlO1xuICAgICAgc3RyID0gbnVtYmVyQ2hhclt2XTtcbiAgICAgIHN0ciArPSB1bml0Q2hhclt1bml0UG9zXTtcbiAgICAgIGNobnN0ciA9IHN0ciArIGNobnN0cjtcbiAgICB9XG4gICAgdW5pdFBvcysrO1xuICAgIHNlY3Rpb24gPSBNYXRoLmZsb29yKHNlY3Rpb24gLyAxMCk7XG4gIH1cbiAgcmV0dXJuIGNobnN0cjtcbn1cblxuLyoqXG4gKiDovazmjaLmlbTmlbBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG51bSDopoHovazmjaLnmoTmlbDlrZdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IOS4reaWh+aVsOWtl1xuICovXG5mdW5jdGlvbiBjb252ZXJ0SW50ZWdlcihudW0pIHtcbiAgbnVtID0gTWF0aC5mbG9vcihudW0pO1xuXG4gIGxldCB1bml0UG9zID0gMDtcbiAgbGV0IHN0cklucyA9ICcnLFxuICAgIGNoblN0ciA9ICcnO1xuICBsZXQgbmVlZFplcm8gPSBmYWxzZTtcblxuICBpZiAobnVtID09PSAwKSB7XG4gICAgcmV0dXJuIG51bWJlckNoYXJbMF07XG4gIH1cbiAgd2hpbGUgKG51bSA+IDApIHtcbiAgICB2YXIgc2VjdGlvbiA9IG51bSAlIDEwMDAwO1xuICAgIGlmIChuZWVkWmVybykge1xuICAgICAgY2huU3RyID0gbnVtYmVyQ2hhclswXSArIGNoblN0cjtcbiAgICB9XG4gICAgc3RySW5zID0gc2VjdGlvblRvQ2hpbmVzZShzZWN0aW9uKTtcbiAgICBzdHJJbnMgKz0gc2VjdGlvbiAhPT0gMCA/IHVuaXRTZWN0aW9uW3VuaXRQb3NdIDogdW5pdFNlY3Rpb25bMF07XG4gICAgY2huU3RyID0gc3RySW5zICsgY2huU3RyO1xuICAgIG5lZWRaZXJvID0gc2VjdGlvbiA8IDEwMDAgJiYgc2VjdGlvbiA+IDA7XG4gICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyAxMDAwMCk7XG4gICAgdW5pdFBvcysrO1xuICB9XG4gIHJldHVybiBjaG5TdHI7XG59XG5cbi8qKlxuICog6L2s5o2i5bCP5pWwXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0g6KaB6L2s5o2i55qE5pWw5a2XXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnREZWNpbWFsKG51bSkge1xuICBjb25zdCBudW1TdHIgPSBudW0gKyAnJztcbiAgY29uc3QgaW5kZXggPSBudW1TdHIuaW5kZXhPZignLicpO1xuXG4gIGxldCByZXQgPSAnJztcblxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGxldCBkZWNpbWFsU3RyID0gbnVtU3RyLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgcmV0ID0gbWFwTnVtYmVyQ2hhcihwYXJzZUludChkZWNpbWFsU3RyKSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIOaYoOWwhOS4uuS4reaWh+aVsOWtl1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIOimgeWkhOeQhueahOaVsOWtl1xuICogQHJldHVybnMge3N0cmluZ30g6L+U5Zue5Lit5paH5pWw5a2X55qE5pig5bCEXG4gKi9cbmZ1bmN0aW9uIG1hcE51bWJlckNoYXIobnVtKSB7XG4gIGNvbnN0IG51bVN0ciA9IG51bSArICcnO1xuICBsZXQgcmV0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG51bVN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHJldCArPSBudW1iZXJDaGFyW3BhcnNlSW50KG51bVN0cltpXSldO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiDmlbDlrZfovazkuK3mlofmlbDlrZdcbiAqIOS4jeWcqOWuieWFqOaVsOWtlyAtOTAwNzE5OTI1NDc0MDk5Me+9njkwMDcxOTkyNTQ3NDA5OTEg5YaF77yM5aSE55CG5Lya5pyJ5byC5bi4XG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IubnVtYmVyVG9DaGluZXNlXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0g5pWw5a2XXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIOmFjee9rumhuVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5iaWc1PWZhbHNlXSDnuYHkvZNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudW5pdD10cnVlXSDorqHmlbDljZXkvY1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5kZWNpbWFsPVwi54K5XCJdIOS4reaWh+Wwj+aVsOeCuVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnplcm89XCLpm7ZcIl0g6K6+572uMOOAguW4uOeUqOmFjee9riDjgIdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5uZWdhdGl2ZT1cIui0n1wiXSDotJ/mlbDliY3pnaLnmoTlrZdcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy51bml0Q29uZmlnXSDoioLngrnljZXkvY3phY3nva5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51bml0Q29uZmlnLnc9XCLkuIdcIl0g6K6+572u6K6h5pWw5Y2V5L2N5LiH44CC5bi455So6YWN572uIOiQrFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVuaXRDb25maWcueT1cIuS6v1wiXSDorr7nva7orqHmlbDljZXkvY3kur/jgILluLjnlKjphY3nva4g5YSEXG4gKiBAcmV0dXJucyB7c3RyaW5nfSDkuK3mlofmlbDlrZdcbiAqIEBleGFtcGxlXG4gKlxuICogbnVtYmVyVG9DaGluZXNlKDEwMCk7XG4gKiAvLyA9PiDkuIDnmb5cbiAqXG4gKiBudW1iZXJUb0NoaW5lc2UoMTAwLjMpO1xuICogLy8gPT4g5LiA55m+54K55LiJXG4gKlxuICogLy8g57mB5L2TXG4gKiBudW1iZXJUb0NoaW5lc2UoMTAwLCB7YmlnNTogdHJ1ZX0pO1xuICogLy8gPT4g5aO55L2wXG4gKlxuICogbnVtYmVyVG9DaGluZXNlKDEwMC4zLCB7YmlnNTogdHJ1ZX0pO1xuICogLy8gPT4g5aO55L2w54K55Y+BXG4gKlxuICogbnVtYmVyVG9DaGluZXNlKDEyMzQ1Njc4OTAsIHtiaWc1OiB0cnVlfSk7XG4gKiAvLyA9PiDlo7nmi77otLDkur/lj4Hku5/ogobkvbDkvI3mi77pmYbkuIfmn5Lku5/mjYzkvbDnjpbmi75cbiAqXG4gKiAvLyDkuI3luKborqHmlbDljZXkvY1cbiAqIG51bWJlclRvQ2hpbmVzZSgxOTkwLCB7dW5pdDogZmFsc2V9KTtcbiAqIC8vID0+IOS4gOS5neS5nembtlxuICpcbiAqIC8vIOS4jeW4puiuoeaVsOWNleS9je+8jOS/ruaUuTBcbiAqIG51bWJlclRvQ2hpbmVzZSgxOTkwLCB7dW5pdDogZmFsc2UsIHplcm86J+OAhyd9KTtcbiAqIC8vID0+IOS4gOS5neS5neOAh1xuICpcbiAqL1xuZnVuY3Rpb24gbnVtYmVyVG9DaGluZXNlKFxuICBudW0sXG4gIHtcbiAgICBiaWc1ID0gZmFsc2UsXG4gICAgdW5pdCA9IHRydWUsXG4gICAgZGVjaW1hbCA9ICfngrknLFxuICAgIHplcm8gPSAnJyxcbiAgICBuZWdhdGl2ZSA9ICfotJ8nLFxuICAgIHVuaXRDb25maWcgPSB7XG4gICAgICB3OiAn5LiHJywgLy8gJ+iQrCdcbiAgICAgIHk6ICfkur8nIC8vICflhIQnXG4gICAgfVxuICB9ID0ge31cbikge1xuICAvLyDpnZ7mlbDlrZcg5oiWIE5hTiDkuI3lpITnkIZcbiAgaWYgKHR5cGVvZiBudW0gIT09ICdudW1iZXInIHx8IGlzTmFOKG51bSkpIHtcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlV2FybmluZykge1xuICAgICAgY29uc29sZS53YXJuKGDlj4LmlbDplJnor68gJHtudW1977yM6K+35Lyg5YWl5pWw5a2XYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8g6LaF6L+H5a6J5YWo5pWw5a2X5o+Q56S6XG4gIGNoZWNrQm91bmRhcnkobnVtKTtcblxuICAvLyDorr7nva7mlbDlrZflrZfnrKblkozorqHmlbDljZXkvY1cbiAgaWYgKGJpZzUpIHtcbiAgICBudW1iZXJDaGFyID0gYmlnNU51bWJlckNoYXIuc2xpY2UoKTtcbiAgICB1bml0Q2hhciA9IGJpZzVVbml0Q2hhci5zbGljZSgpO1xuICB9IGVsc2Uge1xuICAgIG51bWJlckNoYXIgPSBjaG5OdW1iZXJDaGFyLnNsaWNlKCk7XG4gICAgdW5pdENoYXIgPSBjaG5Vbml0Q2hhci5zbGljZSgpO1xuICB9XG5cbiAgLy8g6K6+572u6IqC54K56K6h5pWw5Y2V5L2N77yM5LiH44CB5Lq/44CB5LiH5Lq/XG4gIGNvbnN0IGRlZmF1bHRVbml0V2FuID0gJ+S4hyc7XG4gIGNvbnN0IGRlZmF1bHRVbml0WWkgPSAn5Lq/JztcbiAgdW5pdFNlY3Rpb24gPSBbJycsIHVuaXRDb25maWcudyB8fCBkZWZhdWx0VW5pdFdhbiwgdW5pdENvbmZpZy55IHx8IGRlZmF1bHRVbml0WWksIHVuaXRDb25maWcudyAmJiB1bml0Q29uZmlnLnkgPyB1bml0Q29uZmlnLncgKyB1bml0Q29uZmlnLnkgOiBkZWZhdWx0VW5pdFdhbiArIGRlZmF1bHRVbml0WWldO1xuXG4gIC8vIOiuvue9rjBcbiAgaWYgKHplcm8pIHtcbiAgICBudW1iZXJDaGFyWzBdID0gemVybztcbiAgfVxuXG4gIC8vIOWJjee9ruWtl+espu+8jOi0n+aVsOWkhOeQhlxuICBjb25zdCBwcmVTdHIgPSBudW0gPCAwID8gbmVnYXRpdmUgOiAnJztcblxuICAvLyDmlbTmlbDlkozlsI/mlbBcbiAgbGV0IGNobkludGVnZXIsIGNobkRlY2ltYWw7XG5cbiAgLy8g5aSE55CG5pW05pWwXG4gIGlmICh1bml0KSB7XG4gICAgY2huSW50ZWdlciA9IGNvbnZlcnRJbnRlZ2VyKG51bSk7XG4gIH0gZWxzZSB7XG4gICAgY2huSW50ZWdlciA9IG1hcE51bWJlckNoYXIoTWF0aC5mbG9vcihudW0pKTtcbiAgfVxuXG4gIC8vIOWkhOeQhuWwj+aVsFxuICBjaG5EZWNpbWFsID0gY29udmVydERlY2ltYWwobnVtKTtcblxuICByZXR1cm4gY2huRGVjaW1hbCA/IGAke3ByZVN0cn0ke2NobkludGVnZXJ9JHtkZWNpbWFsfSR7Y2huRGVjaW1hbH1gIDogYCR7cHJlU3RyfSR7Y2huSW50ZWdlcn1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBudW1iZXJUb0NoaW5lc2U7XG4iLCIvKipcbiAqIOWtl+iKgui9rOaNouWtmOWCqOWNleS9je+8jOS/neeVmTLkvY3lsI/mlbDngrlcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOlByb2Nlc3Nvci5ieXRlc1RvU2l6ZVxuICogQHNpbmNlIDMuOC4wXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZXMg5a2X6IqC5aSn5bCPXG4gKiBAcmV0dXJucyB7c3RyaW5nfSDlrZjlgqjljZXkvY3lgLxcbiAqIEBleGFtcGxlXG4gKlxuICogYnl0ZXNUb1NpemUoMCk7XG4gKiAvLyA9PiAwIEJcbiAqXG4gKiBieXRlc1RvU2l6ZSgxMDI0KTtcbiAqIC8vID0+IDEgS0JcbiAqXG4gKiBieXRlc1RvU2l6ZSgzLjIxMzI0MyoxMDI0KjEwMjQpO1xuICogLy8gPT4gMy4yMSBNQlxuICpcbiAqIGJ5dGVzVG9TaXplKDEwMjQqMTAyNCoxMDI0KTtcbiAqIC8vID0+IDEgR0JcbiAqL1xuZnVuY3Rpb24gYnl0ZXNUb1NpemUoYnl0ZXMpIHtcbiAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gJzAgQic7XG4gIGNvbnN0IGsgPSAxMDI0O1xuICAvLyDlrZjlgqjljZXkvY1cbiAgY29uc3Qgc2l6ZXMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcbiAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gIHJldHVybiBzaXplc1tpXSA/IGAke051bWJlcigoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSl9ICR7c2l6ZXNbaV19YCA6IGJ5dGVzICsgJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ5dGVzVG9TaXplO1xuIiwiaW1wb3J0IGlzSWRDYXJkIGZyb20gJy4vaXNJZENhcmQnO1xuXG5jb25zdCByZWdJZENhcmQgPSAvXig/PHByb3ZpbmNlPlxcZHsyfSkoPzxjaXR5PlxcZHsyfSkoPzxhcmVhPlxcZHsyfSkoPzx5ZWFyPig/OlxcZHsyfSk/XFxkezJ9KSg/PG1vbnRoPlxcZHsyfSkoPzxkYXk+XFxkezJ9KVxcZHsyfSg/PGdlbmRlcj5cXGQpKD86XFxkfFgpPyQvaTtcblxuY29uc3QgUHJvdmluY2VzID0gW1xuICAvLyDljY7ljJflnLDljLrvvJrljJfkuqzluIJ8MTEwMDAw77yM5aSp5rSl5biCfDEyMDAwMO+8jOays+WMl+ecgXwxMzAwMDDvvIzlsbHopb/nnIF8MTQwMDAw77yM5YaF6JKZ5Y+k6Ieq5rK75Yy6fDE1MDAwMFxuICBbJzExJywgJ+WMl+S6rOW4giddLFxuICBbJzEyJywgJ+Wkqea0peW4giddLFxuICBbJzEzJywgJ+ays+WMl+ecgSddLFxuICBbJzE0JywgJ+Wxseilv+ecgSddLFxuICBbJzE1JywgJ+WGheiSmeWPpOiHquayu+WMuiddLFxuXG4gIC8vIOS4nOWMl+WcsOWMuu+8miDovr3lroHnnIF8MjEwMDAw77yM5ZCJ5p6X55yBfDIyMDAwMO+8jOm7kem+meaxn+ecgXwyMzAwMDBcbiAgWycyMScsICfovr3lroHnnIEnXSxcbiAgWycyMicsICflkInmnpfnnIEnXSxcbiAgWycyMycsICfpu5HpvpnmsZ/nnIEnXSxcblxuICAvLyDljY7kuJzlnLDljLrvvJog5LiK5rW35biCfDMxMDAwMO+8jOaxn+iLj+ecgXwzMjAwMDDvvIzmtZnmsZ/nnIF8MzMwMDAw77yM5a6J5b6955yBfDM0MDAwMO+8jOemj+W7uuecgXwzNTAwMDDvvIzmsZ/opb/nnIF8MzYwMDAw77yM5bGx5Lic55yBfDM3MDAwMFxuICBbJzMxJywgJ+S4iua1t+W4giddLFxuICBbJzMyJywgJ+axn+iLj+ecgSddLFxuICBbJzMzJywgJ+a1meaxn+ecgSddLFxuICBbJzM0JywgJ+WuieW+veecgSddLFxuICBbJzM1JywgJ+emj+W7uuecgSddLFxuICBbJzM2JywgJ+axn+ilv+ecgSddLFxuICBbJzM3JywgJ+WxseS4nOecgSddLFxuXG4gIC8vIOWNjuS4reWcsOWMuu+8miDmsrPljZfnnIF8NDEwMDAw77yM5rmW5YyX55yBfDQyMDAwMO+8jOa5luWNl+ecgXw0MzAwMDBcbiAgWyc0MScsICfmsrPljZfnnIEnXSxcbiAgWyc0MicsICfmuZbljJfnnIEnXSxcbiAgWyc0MycsICfmuZbljZfnnIEnXSxcblxuICAvLyDljY7ljZflnLDljLrvvJrlub/kuJznnIF8NDQwMDAw77yM5bm/6KW/5aOu5peP6Ieq5rK75Yy6fDQ1MDAwMO+8jOa1t+WNl+ecgXw0NjAwMDBcbiAgWyc0NCcsICflub/kuJznnIEnXSxcbiAgWyc0NScsICflub/opb/lo67ml4/oh6rmsrvljLonXSxcbiAgWyc0NicsICfmtbfljZfnnIEnXSxcblxuICAvLyDopb/ljZflnLDljLrvvJrph43luobluIJ8NTAwMDAw77yM5Zub5bed55yBfDUxMDAwMO+8jOi0teW3nuecgXw1MjAwMDDvvIzkupHljZfnnIF8NTMwMDAw77yM6KW/6JeP6Ieq5rK75Yy6fDU0MDAwMFxuICBbJzUwJywgJ+mHjeW6huW4giddLFxuICBbJzUxJywgJ+Wbm+W3neecgSddLFxuICBbJzUyJywgJ+i0teW3nuecgSddLFxuICBbJzUzJywgJ+S6keWNl+ecgSddLFxuICBbJzU0JywgJ+ilv+iXj+iHquayu+WMuiddLFxuXG4gIC8vIOilv+WMl+WcsOWMuu+8miDpmZXopb/nnIF8NjEwMDAw77yM55SY6IKD55yBfDYyMDAwMO+8jOmdkua1t+ecgXw2MzAwMDDvvIzlroHlpI/lm57ml4/oh6rmsrvljLp8NjQwMDAw77yM5paw55aG57u05ZC+5bCU6Ieq5rK75Yy6fDY1MDAwMFxuICBbJzYxJywgJ+mZleilv+ecgSddLFxuICBbJzYyJywgJ+eUmOiCg+ecgSddLFxuICBbJzYzJywgJ+mdkua1t+ecgSddLFxuICBbJzY0JywgJ+WugeWkj+WbnuaXj+iHquayu+WMuiddLFxuICBbJzY1JywgJ+aWsOeWhue7tOWQvuWwlOiHquayu+WMuiddLFxuXG4gIC8vIOWPsOa5vuWcsOWMuu+8muWPsOa5vuecgXw3MTAwMDBcbiAgLy8g5Y+w5rm+5bGF5rCR5YWs5rCR6Lqr5Lu95Y+356CB5Zyw5Z2A56CB5Li6ODMwMDAw77yM5Y+C6ICDIGh0dHA6Ly93d3cud2Fud2VpYmFpa2UuY29tL3dpa2kt5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu96KGM5pS/5Yy65YiS5Luj56CBXyg35Yy6KeOAgWh0dHBzOi8vemgud2lraXBlZGlhLm9yZy93aWtpL+a4r+a+s+WPsOWxheawkeWxheS9j+ivgVxuICBbJzcxJywgJ+WPsOa5vuecgSddLFxuICBbJzgzJywgJ+WPsOa5vuecgSddLFxuXG4gIC8vIOa4r+a+s+WcsOWMuu+8mummmea4r+eJueWIq+ihjOaUv+WMunw4MTAwMDDvvIzmvrPpl6jnibnliKvooYzmlL/ljLp8ODIwMDAwXG4gIFsnODEnLCAn6aaZ5riv54m55Yir6KGM5pS/5Yy6J10sXG4gIFsnODInLCAn5r6z6Zeo54m55Yir6KGM5pS/5Yy6J11cbl07XG5cbi8vIOesrOS4gOS9jeaVsOWtl+aYr+S7peWJjeeahOWkp+WMuuWItuS7o+eggeOAguesrOS6jOS9jeaYr+Wkp+WMuuaJgOWcqOecgeW4gue8lueggeOAguWFqOWbveWFseWIhuS4ujjkuKrlpKfljLrvvJrljY7ljJfvvIgx77yJ44CB5Lic5YyX77yIMu+8ieOAgeWNjuS4nO+8iDPvvInjgIHkuK3ljZfvvIg077yJ44CB6KW/5Y2X77yINe+8ieOAgeilv+WMl++8iDbvvInjgIHlj7Dmub7vvIg377yJ5ZKM5riv5r6z77yIOO+8ieOAglxuLy8gY29uc3QgUmVnaW9ucyA9IFtcbi8vICAgWycxJywgJ+WNjuWMl+WcsOWMuiddLFxuLy8gICBbJzInLCAn5Lic5YyX5Zyw5Yy6J10sXG4vLyAgIFsnMycsICfljY7kuJzlnLDljLonXSxcbi8vICAgWyc0JywgJ+S4reWNl+WcsOWMuiddLFxuLy8gICBbJzUnLCAn6KW/5Y2X5Zyw5Yy6J10sXG4vLyAgIFsnNicsICfopb/ljJflnLDljLonXSxcbi8vICAgWyc3JywgJ+WPsOa5vuWcsOWMuiddLFxuLy8gICBbJzgnLCAn5riv5r6z5Zyw5Yy6J11cbi8vIF07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSWRDYXJkT3JpZ2luIC0g6Kej5p6Q6Lqr5Lu96K+B5Y6f5pWw5o2uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdmluY2UgLSDnnIHku73nvJbnoIFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaXR5IC0g5Z+O5biC57yW56CBXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXJlYSAtIOWcsOWMuue8lueggVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHllYXIgLSDlh7rnlJ/lubRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb250aCAtIOWHuueUn+aciFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRheSAtIOWHuueUn+aXpVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGdlbmRlciAtIOaAp+WIqyDog73mlbTpmaQy5Li65aWz77yM5ZCm5YiZ5Li655S3XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJZENhcmRJbmZvIC0g6Lqr5Lu96K+B5L+h5oGvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdmluY2UgLSDnnIHku71cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiaXJ0aGRheSAtIOeUn+aXpVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGdlbmRlciAtIOaAp+WIq1xuICogQHByb3BlcnR5IHtJZENhcmRPcmlnaW59IG9yaWdpbiAtIOino+aekOi6q+S7veivgeWOn+aVsOaNrlxuICovXG5cbi8qKlxuICog6Kej5p6Q6Lqr5Lu96K+B5Y+356CB77yM5pSv5oyBMTXjgIExOOS9jei6q+S7veivgeWPt+eggVxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLnBhcnNlSWRDYXJkXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2JhaWtlLmJhaWR1LmNvbS9pdGVtL+Wxheawkei6q+S7veivgeWPt+eggXzlsYXmsJHouqvku73or4Hlj7fnoIF9XG4gKiBAcGFyYW0ge3N0cmluZ30gaWQg6Lqr5Lu96K+B5Y+356CB77yM5pSv5oyBMTXkvY1cbiAqIEByZXR1cm5zIHtudWxsfElkQ2FyZEluZm99IG51bGwg5oiWIOecgeS7veOAgeeUn+aXpeOAgeaAp+WIq++8jOecgS/luIIv5Yy6L+W5tC/mnIgv5pelL+aAp+WIq+e8lueggVxuICogQGV4YW1wbGVcbiAqIHBhcnNlSWRDYXJkKCcxMjM0NTY3ODkxMjM0NTYnKTtcbiAqIC8vID0+IG51bGxcbiAqXG4gKiAvLyAxOOS9jei6q+S7veivgeWPt+eggVxuICogcGFyc2VJZENhcmQoJzEzMDcwMTE5OTMxMDMwMjI4OCcpXG4gKiAvLyA9PlxuICoge1xuICogICBiaXJ0aGRheTogXCIxOTkzLTEwLTMwXCIsXG4gKiAgIGdlbmRlcjogXCLlpbNcIixcbiAqICAgb3JpZ2luOiB7IHByb3ZpbmNlOiBcIjEzXCIsIGNpdHk6IFwiMDdcIiwgYXJlYTogXCIwMVwiLCB5ZWFyOiBcIjE5OTNcIiwgbW9udGg6IFwiMTBcIiwgZGF5OiBcIjMwXCIsIGdlbmRlcjogXCI4XCIgfSxcbiAqICAgcHJvdmluY2U6IFwi5rKz5YyX55yBXCJcbiAqIH1cbiAqXG4gKiAvLyAxNeS9jei6q+S7veivgeWPt+eggVxuICogcGFyc2VJZENhcmQoJzEzMDcwMTkzMTAzMDIyOCcpO1xuICogLy8gPT5cbiAqIHtcbiAqICAgYmlydGhkYXk6IFwiOTMtMTAtMzBcIixcbiAqICAgZ2VuZGVyOiBcIuWls1wiLFxuICogICBvcmlnaW46IHsgcHJvdmluY2U6IFwiMTNcIiwgY2l0eTogXCIwN1wiLCBhcmVhOiBcIjAxXCIsIHllYXI6IFwiOTNcIiwgbW9udGg6IFwiMTBcIiwgZGF5OiBcIjMwXCIsIGdlbmRlcjogXCI4XCIgfSxcbiAqICAgcHJvdmluY2U6IFwi5rKz5YyX55yBXCJcbiAqIH1cbiAqXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSWRDYXJkKGlkKSB7XG4gIGlmICghaXNJZENhcmQoaWQsIHsgbG9vc2U6IHRydWUgfSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGluZm8gPSByZWdJZENhcmQuZXhlYyhpZCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge3sgcHJvdmluY2U6IHN0cmluZywgY2l0eTogc3RyaW5nLCBhcmVhOiBzdHJpbmcsIHllYXI6IHN0cmluZywgbW9udGg6IHN0cmluZywgZGF5OiBzdHJpbmcsIGdlbmRlcjogc3RyaW5nIH19XG4gICAqXG4gICAqL1xuICBsZXQgb3JpZ2luID0ge1xuICAgIHByb3ZpbmNlOiAnJyxcbiAgICBjaXR5OiAnJyxcbiAgICBhcmVhOiAnJyxcbiAgICB5ZWFyOiAnJyxcbiAgICBtb250aDogJycsXG4gICAgZGF5OiAnJyxcbiAgICBnZW5kZXI6ICcnXG4gIH07XG5cbiAgaWYgKGluZm8uZ3JvdXBzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbiA9IGluZm8uZ3JvdXBzO1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbiA9IHtcbiAgICAgIHByb3ZpbmNlOiBpbmZvWzFdLFxuICAgICAgY2l0eTogaW5mb1syXSxcbiAgICAgIGFyZWE6IGluZm9bM10sXG4gICAgICB5ZWFyOiBpbmZvWzRdLFxuICAgICAgbW9udGg6IGluZm9bNV0sXG4gICAgICBkYXk6IGluZm9bNl0sXG4gICAgICBnZW5kZXI6IGluZm9bN11cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJvdmluY2UgPSBQcm92aW5jZXMuZmluZCgoaXRlbSkgPT4gaXRlbVswXSA9PT0gb3JpZ2luLnByb3ZpbmNlKTtcblxuICBpZiAoIXByb3ZpbmNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBiaXJ0aGRheSA9IGAke29yaWdpbi55ZWFyfS0ke29yaWdpbi5tb250aH0tJHtvcmlnaW4uZGF5fWA7XG4gIGNvbnN0IGdlbmRlciA9IE51bWJlcihvcmlnaW4uZ2VuZGVyKSAlIDIgPT09IDAgPyAn5aWzJyA6ICfnlLcnO1xuICAvLyBjb25zdCByZWdpb24gPSBSZWdpb25zLmZpbmQoaXRlbSA9PiBpdGVtWzBdID09PSBvcmlnaW4ucHJvdmluY2U/LnN1YnN0cmluZygwLCAxKSk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyByZWdpb24sXG4gICAgcHJvdmluY2U6IHByb3ZpbmNlWzFdLFxuICAgIGJpcnRoZGF5LFxuICAgIGdlbmRlcixcbiAgICBvcmlnaW5cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJZENhcmQ7XG4iLCIvLyAgZmlsZeOAgWJsb2Lmlofku7blpoLkvZXpooTop4jlm77niYfvvJ9cbi8vICDmlrnms5Ux77ya5bCGZmlsZeaIluiAhWJsb2Lnsbvlnovmlofku7bovazmiJBiYXNlNjTmlbDmja7vvIzlho3kvZzkuLpzcmPotYvlgLznu5lpbWfmoIfnrb5cbi8vICDmlrnms5Uy77ya5L2/55SoIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpIOS4umJsb2LjgIFmaWxlIOWIm+W7uuS4gOS4quaMh+WQkeivpeWPguaVsOWvueixoeeahFVSTFxuXG4vKipcbiAqIOWwhiBCbG9iIOaIliBGaWxlIOWvueixoei9rOaIkCBkYXRhOlVSTCDmoLzlvI/nmoQgQmFzZTY0IOWtl+espuS4suOAglxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLmJsb2JUb0RhdGFVUkxcbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9BUEkvRmlsZVJlYWRlci9yZWFkQXNEYXRhVVJMfEZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCgpfVxuICogQHNpbmNlIDQuMS4wXG4gKiBAcGFyYW0ge0Jsb2J9IGJsb2IgQmxvYiDmiJYgRmlsZSDlr7nosaFcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IGRhdGE6VVJMIOagvOW8j+eahCBCYXNlNjQg5a2X56ym5Liy44CCXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYUZpbGVQYXJ0cyA9IFsnPGEgaWQ9XCJhXCI+PGIgaWQ9XCJiXCI+aGV5ITwvYj48L2E+J107IC8vIOS4gOS4quWMheWQq0RPTVN0cmluZ+eahOaVsOe7hFxuICogY29uc3QgaHRtbEJsb2IgPSBuZXcgQmxvYihhRmlsZVBhcnRzLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pOyAvLyDlvpfliLAgYmxvYlxuICpcbiAqIGJsb2JUb0RhdGFVUkwoaHRtbEJsb2IpLnRoZW4oZGF0YT0+e1xuICogICBjb25zb2xlLmxvZyhkYXRhKTsgLy8gZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LFBHRWdhV1E5SW1FaVBqeGlJR2xrUFNKaUlqNW9aWGtoUEM5aVBqd3ZZVDQ9XG4gKiB9KTtcbiAqXG4gKiBjb25zdCB0ZXh0QmxvYiA9IG5ldyBCbG9iKGFGaWxlUGFydHMsIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pO1xuICpcbiAqIGJsb2JUb0RhdGFVUkwodGV4dEJsb2IpLnRoZW4oZGF0YT0+e1xuICogICBjb25zb2xlLmxvZyhkYXRhKTsgLy8gZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0RhdGFVUkwoYmxvYikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmxvYlRvRGF0YVVSTDtcbiIsIi8qKlxuICog5bCGIERhdGFVUkwg6L2s5Li6IEJsb2Ig5a+56LGhXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IuZGF0YVVSTFRvQmxvYlxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvR2xvc3NhcnkvQmFzZTY0fEJhc2U2NH1cbiAqIEBzaW5jZSA0LjEuMFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGF1cmwgZGF0YTog5Y2P6K6u55qEVVJMXG4gKiBAcmV0dXJucyB7QmxvYn0gQmxvYiDlr7nosaFcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhdXJsID0gJ2RhdGE6dGV4dC9odG1sO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PSc7XG4gKiBkYXRhVVJMVG9CbG9iKGRhdGF1cmwpO1xuICovXG5mdW5jdGlvbiBkYXRhVVJMVG9CbG9iKGRhdGF1cmwpIHtcbiAgY29uc3QgYXJyID0gZGF0YXVybC5zcGxpdCgnLCcpO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXTtcbiAgY29uc3QgYnN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgbGV0IG4gPSBic3RyLmxlbmd0aDtcbiAgY29uc3QgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcblxuICB3aGlsZSAobi0tKSB7XG4gICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XG4gIH1cbiAgcmV0dXJuIG5ldyBCbG9iKFt1OGFycl0sIHsgdHlwZTogbWltZSB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGF0YVVSTFRvQmxvYjtcbiIsIi8qKlxuICog6K6+572uIERhdGFVUkwg5YmN57yA44CBTUlNRSDnsbvlnovjgIFiYXNlNjQg5qCH6K+G44CCPGJyLz5cbiAqIOWmguaenOS9oOmcgOimgeiOt+WPlkRhdGFVUkwg55qEIE1JTUUg57G75Z6L5ZKM5pWw5o2u5pys6Lqr77yM5o6o6I2Q5L2/55SoIDxhIGhyZWY9XCJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9kYXRhLXVybHNcIj5kYXRhLXVybHM8L2E+44CCXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3Iuc2V0RGF0YVVSTFByZWZpeFxuICogQHNlZSDlj4LogIMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzfERhdGEgVVJMc31cbiAqIEBzZWUg5Y+C6ICDIHtAbGluayBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3VuZGVyc3RhbmRpbmctbWltZS10eXBlc3xNSU1FIHR5cGVzfVxuICogQHNpbmNlIDQuMS4wXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSDmlbDmja7mnKzouqtcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWltZXR5cGU9XCJpbWFnZS9wbmdcIl0gTUlNRSDnsbvlnotcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Jhc2U2ND10cnVlXSDmt7vliqAgYmFzZTY0IOagh+ivhlxuICogQHJldHVybnMge3N0cmluZ30gRGF0YVVSTCDmoLzlvI/nmoTlrZfnrKbkuLJcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhID0gJ1BHRWdhV1E5SW1FaVBqeGlJR2xrUFNKaUlqNW9aWGtoUEM5aVBqd3ZZVDQ9JztcbiAqIHNldERhdGFVUkxQcmVmaXgoZGF0YSk7IC8vIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnaW1hZ2UvcG5nJywgZmFsc2UpOyAvLyBkYXRhOmltYWdlL3BuZyxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnaW1hZ2UvanBnJyk7IC8vIGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAndGV4dC9odG1sJyk7IC8vIGRhdGE6dGV4dC9odG1sO2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnJyk7IC8vIGRhdGE6O2Jhc2U2NCxQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICogc2V0RGF0YVVSTFByZWZpeChkYXRhLCAnJywgZmFsc2UpOyAvLyBkYXRhOixQR0VnYVdROUltRWlQanhpSUdsa1BTSmlJajVvWlhraFBDOWlQand2WVQ0PVxuICovXG5mdW5jdGlvbiBzZXREYXRhVVJMUHJlZml4KGRhdGEsIG1pbWV0eXBlID0gJ2ltYWdlL3BuZycsIGJhc2U2NCA9IHRydWUpIHtcbiAgcmV0dXJuIGBkYXRhOiR7bWltZXR5cGV9JHtiYXNlNjQgPyAnO2Jhc2U2NCcgOiAnJ30sJHtkYXRhfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldERhdGFVUkxQcmVmaXg7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi91dGlscy90eXBlL2lzTmlsJztcblxuLy8gVE9ETzog5Ye95pWw6YeN6L2977yM57G75Z6L5Y+C54WnIERhdGVcblxuLyoqXG4gKiDliJvlu7rkuIDkuKogRGF0ZSDlrp7kvovml6XmnJ/lr7nosaHvvIzlkIwgbmV3IERhdGUoKSDjgII8YnIvPlxuICog6KeE6YG/5LqG6Iu55p6c6K6+5aSH5rWP6KeI5Zmo5LiN5pSv5oyB6YOo5YiG5qC85byP77yIWVlZWS1NTS1ERCBISC1tbSDmiJYgWVlZWS5NTS5ERO+8ieOAglxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLnNhZmVEYXRlXG4gKiBAc2VlIOWPguiAgyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvemgtQ04vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZXxEYXRlfVxuICogQHNpbmNlIDQuNC4wXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8RGF0ZX0gW3ZhbHVlXSDml6XmnJ/ml7bpl7TlrZfnrKbkuLLjgIHmr6vnp5LmlbDjgIHml6XmnJ/lr7nosaFcbiAqIEBwYXJhbSB7Li4ubnVtYmVyfSBhcmdzIOaciC/ml6Uv5pe2L+WIhi/np5Iv5q+r56eSXG4gKiBAcmV0dXJucyB7RGF0ZX0gRGF0ZSDlrp7kvovml6XmnJ/lr7nosaFcbiAqIEBleGFtcGxlXG4gKiBzYWZlRGF0ZSgnMjAyMi0xLTEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSgnMjAyMi8xLzEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSgnMjAyMi4xLjEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSgnMjAyMi4xLjEgMTE6MTEnKTsgLy8gU2F0IEphbiAwMSAyMDIyIDExOjExOjAwIEdNVCswODAwICjkuK3lm73moIflh4bml7bpl7QpXG4gKiBzYWZlRGF0ZSg5OSwgMSk7IC8vIE1vbiBGZWIgMDEgMTk5OSAwMDowMDowMCBHTVQrMDgwMCAo5Lit5Zu95qCH5YeG5pe26Ze0KVxuICogc2FmZURhdGUoMTY0NjcxMTIzMzE3MSk7IC8vIFR1ZSBNYXIgMDggMjAyMiAxMTo0NzoxMyBHTVQrMDgwMCAo5Lit5Zu95qCH5YeG5pe26Ze0KVxuICpcbiAqL1xuZnVuY3Rpb24gc2FmZURhdGUodmFsdWUsIC4uLmFyZ3MpIHtcbiAgY29uc3Qgc2FmZVZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnJlcGxhY2UoL1tcXFxcLi1dL2csICcvJykgOiB2YWx1ZTtcblxuICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBEYXRlKHNhZmVWYWx1ZSwgLi4uYXJncyk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBpc05pbChzYWZlVmFsdWUpID8gbmV3IERhdGUoKSA6IG5ldyBEYXRlKHNhZmVWYWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNhZmVEYXRlO1xuIiwiaW1wb3J0IG5vcm1hbGl6ZVN0cmluZyBmcm9tICcuL25vcm1hbGl6ZVN0cmluZyc7XG5cbi8qKlxuICog5qC85byP5YyW5omL5py65Y+356CBXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpQcm9jZXNzb3IuZm9ybWF0TW9iaWxlXG4gKiBAc2luY2UgNC41LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2JpbGVObyDmiYvmnLrlj7fnoIFcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10g6YWN572u6aG5XG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2hhcj0nICddIOmXtOmalOWtl+esplxuICogQHJldHVybnMge3N0cmluZ30g5qC85byP5YyW5ZCO55qE5omL5py65Y+356CBXG4gKiBAZXhhbXBsZVxuICogZm9ybWF0TW9iaWxlKCcxMzM0NTY3ODkwMCcpIC8vICcxMzMgNDU2NyA4OTAwJ1xuICogZm9ybWF0TW9iaWxlKCcxMzM0NTY3ODkwMCcsIHsgY2hhcjogJy0nIH0pIC8vICcxMzMtNDU2Ny04OTAwJ1xuICpcbiAqIC8vIOiEseaVj+aJi+acuuWPt+eggVxuICogZm9ybWF0TW9iaWxlKCcxMzMqKioqMTIzNCcpIC8vICcxMzMgKioqKiAxMjM0J1xuICogZm9ybWF0TW9iaWxlKCcxMzMqKioqMTIzNCcsIHsgY2hhcjogJy0nIH0pIC8vICcxMzMtKioqKi0xMjM0J1xuICpcbiAqIC8vIOaJi+acuuWPt+eggeS9jeaVsOS4jeWkn1xuICogZm9ybWF0TW9iaWxlKCcxMzMnKSAvLyAnMTMzJ1xuICogZm9ybWF0TW9iaWxlKCcxMzM0NTYnKSAvLyAnMTMzIDQ1NidcbiAqIGZvcm1hdE1vYmlsZSgnMTMzNDU2NzgnKSAvLyAnMTMzIDQ1NjcgOCdcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TW9iaWxlKG1vYmlsZU5vLCB7IGNoYXIgPSAnICcgfSA9IHt9KSB7XG4gIGNvbnN0IHJlZ0NoYXIgPSBuZXcgUmVnRXhwKGNoYXIsICdnJyk7XG4gIGNvbnN0IHJlYWxWYWx1ZSA9IG5vcm1hbGl6ZVN0cmluZyhtb2JpbGVObykucmVwbGFjZShyZWdDaGFyLCAnJykuc3Vic3RyaW5nKDAsIDExKTtcblxuICBpZiAocmVhbFZhbHVlLmxlbmd0aCA+IDcpIHtcbiAgICByZXR1cm4gcmVhbFZhbHVlLnJlcGxhY2UoL14oLi4uKSguLi4uKS9nLCBgJDEke2NoYXJ9JDIke2NoYXJ9YCk7XG4gIH1cbiAgaWYgKHJlYWxWYWx1ZS5sZW5ndGggPiAzKSB7XG4gICAgcmV0dXJuIHJlYWxWYWx1ZS5yZXBsYWNlKC9eKC4uLikvZywgYCQxJHtjaGFyfWApO1xuICB9XG4gIHJldHVybiByZWFsVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdE1vYmlsZTtcbiIsImltcG9ydCBub3JtYWxpemVTdHJpbmcgZnJvbSAnLi9ub3JtYWxpemVTdHJpbmcnO1xuXG4vKipcbiAqIOWJjee9ruihpembtlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6UHJvY2Vzc29yLnBhZFplcm9cbiAqIEBzaW5jZSA0LjcuMFxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2YWx1ZSDopoHlpITnkIbnmoTlgLxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0yXSDmjIflrprlrZfnrKbkuLLplb/luqZcbiAqIEByZXR1cm5zIHtzdHJpbmd9IOeUqOmbtuWhq+WFheaVsOWtl+WIsOe7meWumumVv+W6pueahOWtl+espuS4slxuICogQGV4YW1wbGVcbiAqIHBhZFplcm8oNSk7IC8vICcwNSdcbiAqIHBhZFplcm8oJzUnKTsgLy8gJzA1J1xuICpcbiAqIHBhZFplcm8oMTIpOyAvLyAnMTInXG4gKiBwYWRaZXJvKCcxMicpOyAvLyAnMTInXG4gKlxuICogcGFkWmVybyg2ODgpOyAvLyAnNjg4J1xuICogcGFkWmVybygnNjg4Jyk7IC8vICc2ODgnXG4gKlxuICogcGFkWmVybyg2ODgsIDUpOyAvLyAnMDA2ODgnXG4gKiBwYWRaZXJvKCc2ODgnLCA1KTsgLy8gJzAwNjg4J1xuICovXG5mdW5jdGlvbiBwYWRaZXJvKHZhbHVlLCBzaXplID0gMikge1xuICBjb25zdCBzdHIgPSBub3JtYWxpemVTdHJpbmcodmFsdWUpO1xuICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicgfHwgc2l6ZSA8IDApIHtcbiAgICBzaXplID0gMDtcbiAgfVxuXG4gIGlmIChsZW4gPCBzaXplKSB7XG4gICAgcmV0dXJuICcwJy5yZXBlYXQoc2l6ZSAtIGxlbikgKyBzdHI7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFkWmVybztcbiIsImltcG9ydCBpc1R5cGUgZnJvbSAnLi9pc1R5cGUnO1xuXG4vKipcbiAqIOajgOafpeWAvOaYr+WQpuS4uk51bWJlclxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6VHlwZS5pc051bWJlclxuICogQHNpbmNlIDEuMS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlIOajgOafpeWAvFxuICogQHJldHVybnMge2Jvb2xlYW59IOaYr+WQpuS4uk51bWJlclxuICogQGV4YW1wbGVcbiAqXG4gKiBpc051bWJlcigxKVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOdW1iZXIoSW5maW5pdHkpXG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOdW1iZXIoTmFOKVxuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTnVtYmVyKCcxJylcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBpc1R5cGUodmFsdWUsICdOdW1iZXInKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOdW1iZXI7XG4iLCJpbXBvcnQgeyBkaWdpdExlbmd0aCwgZmxvYXQyRml4ZWQsIGNoZWNrQm91bmRhcnkgfSBmcm9tICcuL3V0aWxzL21hdGgudXRpbCc7XG5pbXBvcnQgeyBpc051bWJlciwgaXNOYU4sIGlzU3RyaW5nIH0gZnJvbSAnLi91dGlscy90eXBlJztcblxuLyoqXG4gKiDnsr7noa7kuZjms5XvvIzmlK/mjIHlpJrkuKrmlbDnm7jkuZhcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOk1hdGgudGltZXNcbiAqIEBzaW5jZSAzLjEuMFxuICogQHBhcmFtIHsuLi5udW1iZXJ8c3RyaW5nfSBudW1zIOebuOS5mOeahOaVsFxuICogQHJldHVybnMge251bWJlcn0g5LmY56evXG4gKiBAZXhhbXBsZVxuICpcbiAqIHRpbWVzKDMsIDAuNik7XG4gKiAvLyA9PiAxLjhcbiAqXG4gKiB0aW1lcygzLCAwLjYsIDIpO1xuICogLy8gPT4gMy42XG4gKlxuICogdGltZXMoMywgMC42LCAyLCAxMCk7XG4gKiAvLyA9PiAzNlxuICovXG5mdW5jdGlvbiB0aW1lcyguLi5udW1zKSB7XG4gIGNvbnN0IFtudW0xLCBudW0yLCAuLi5yZXN0XSA9IG51bXM7XG4gIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdGltZXModGltZXMobnVtMSwgbnVtMiksIC4uLnJlc3QpO1xuICB9XG5cbiAgLy8g5YW85a655aSE55CG77yM5aaC5p6c56ysMuS4quWPguaVsOS4uumdnuaVsOWtl+aIluWtl+espuS4suaXtu+8jOi/lOWbnuesrOS4gOS4quWPguaVsFxuICBpZiAoKCFpc051bWJlcihudW0yKSB8fCBpc05hTihudW0yKSkgJiYgIWlzU3RyaW5nKG51bTIpKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBudW0xO1xuICB9XG5cbiAgY29uc3QgbnVtMUNoYW5nZWQgPSBmbG9hdDJGaXhlZChudW0xKTtcbiAgY29uc3QgbnVtMkNoYW5nZWQgPSBmbG9hdDJGaXhlZChudW0yKTtcbiAgY29uc3QgYmFzZU51bSA9IGRpZ2l0TGVuZ3RoKG51bTEpICsgZGlnaXRMZW5ndGgobnVtMik7XG4gIGNvbnN0IGxlZnRWYWx1ZSA9IG51bTFDaGFuZ2VkICogbnVtMkNoYW5nZWQ7XG5cbiAgY2hlY2tCb3VuZGFyeShsZWZ0VmFsdWUpO1xuXG4gIHJldHVybiBsZWZ0VmFsdWUgLyBNYXRoLnBvdygxMCwgYmFzZU51bSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRpbWVzO1xuIiwiaW1wb3J0IHsgZGlnaXRMZW5ndGggfSBmcm9tICcuL3V0aWxzL21hdGgudXRpbCc7XG5pbXBvcnQgdGltZXMgZnJvbSAnLi90aW1lcyc7XG5pbXBvcnQgeyBpc051bWJlciwgaXNOYU4sIGlzU3RyaW5nIH0gZnJvbSAnLi91dGlscy90eXBlJztcblxuLyoqXG4gKiDnsr7noa7liqDms5XvvIzmlK/mjIHlpJrkuKrmlbDnm7jliqBcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOk1hdGgucGx1c1xuICogQHNpbmNlIDMuMS4wXG4gKiBAcGFyYW0gey4uLm51bWJlcnxzdHJpbmd9IG51bXMg55u45Yqg55qE5pWwXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDmgLvlkoxcbiAqIEBleGFtcGxlXG4gKlxuICogcGx1cygwLjEsIDAuMik7XG4gKiAvLyA9PiAwLjNcbiAqXG4gKiBwbHVzKDAuMSwgMC4yLCAwLjMpO1xuICogLy8gPT4gMC42XG4gKlxuICogcGx1cygwLjEsIDAuMiwgMC4zLCAwLjQpO1xuICogLy8gPT4gMVxuICovXG5mdW5jdGlvbiBwbHVzKC4uLm51bXMpIHtcbiAgY29uc3QgW251bTEsIG51bTIsIC4uLnJlc3RdID0gbnVtcztcblxuICBpZiAocmVzdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBsdXMocGx1cyhudW0xLCBudW0yKSwgLi4ucmVzdCk7XG4gIH1cblxuICAvLyDlhbzlrrnlpITnkIbvvIzlpoLmnpznrKwy5Liq5Y+C5pWw5Li66Z2e5pWw5a2X5oiW5a2X56ym5Liy5pe277yM6L+U5Zue56ys5LiA5Liq5Y+C5pWwXG4gIGlmICgoIWlzTnVtYmVyKG51bTIpIHx8IGlzTmFOKG51bTIpKSAmJiAhaXNTdHJpbmcobnVtMikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG51bTE7XG4gIH1cblxuICBjb25zdCBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KGRpZ2l0TGVuZ3RoKG51bTEpLCBkaWdpdExlbmd0aChudW0yKSkpO1xuICByZXR1cm4gKHRpbWVzKG51bTEsIGJhc2VOdW0pICsgdGltZXMobnVtMiwgYmFzZU51bSkpIC8gYmFzZU51bTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGx1cztcbiIsImltcG9ydCB7IGRpZ2l0TGVuZ3RoIH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHRpbWVzIGZyb20gJy4vdGltZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIsIGlzTmFOLCBpc1N0cmluZyB9IGZyb20gJy4vdXRpbHMvdHlwZSc7XG5cbi8qKlxuICog57K+56Gu5YeP5rOV77yM5pSv5oyB5aSa5Liq5pWw55u45YePXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpNYXRoLm1pbnVzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBwYXJhbSB7Li4ubnVtYmVyfHN0cmluZ30gbnVtcyDnm7jlh4/nmoTmlbBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IOW3rlxuICogQGV4YW1wbGVcbiAqXG4gKiBtaW51cygxLCAwLjkpO1xuICogLy8gPT4gMC4xXG4gKlxuICogbWludXMoMSwgMC45LCAwLjAyKTtcbiAqIC8vID0+IDAuMDhcbiAqXG4gKiBtaW51cygxLCAwLjksIDAuMDIsIDAuMDgpO1xuICogLy8gPT4gMFxuICovXG5mdW5jdGlvbiBtaW51cyguLi5udW1zKSB7XG4gIGNvbnN0IFtudW0xLCBudW0yLCAuLi5yZXN0XSA9IG51bXM7XG5cbiAgaWYgKHJlc3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBtaW51cyhtaW51cyhudW0xLCBudW0yKSwgLi4ucmVzdCk7XG4gIH1cblxuICAvLyDlhbzlrrnlpITnkIbvvIzlpoLmnpznrKwy5Liq5Y+C5pWw5Li66Z2e5pWw5a2X5oiW5a2X56ym5Liy5pe277yM6L+U5Zue56ys5LiA5Liq5Y+C5pWwXG4gIGlmICgoIWlzTnVtYmVyKG51bTIpIHx8IGlzTmFOKG51bTIpKSAmJiAhaXNTdHJpbmcobnVtMikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG51bTE7XG4gIH1cblxuICBjb25zdCBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KGRpZ2l0TGVuZ3RoKG51bTEpLCBkaWdpdExlbmd0aChudW0yKSkpO1xuICByZXR1cm4gKHRpbWVzKG51bTEsIGJhc2VOdW0pIC0gdGltZXMobnVtMiwgYmFzZU51bSkpIC8gYmFzZU51bTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWludXM7XG4iLCJpbXBvcnQgeyBzdHJpcCwgZGlnaXRMZW5ndGgsIGZsb2F0MkZpeGVkLCBjaGVja0JvdW5kYXJ5IH0gZnJvbSAnLi91dGlscy9tYXRoLnV0aWwnO1xuaW1wb3J0IHRpbWVzIGZyb20gJy4vdGltZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIsIGlzTmFOLCBpc1N0cmluZyB9IGZyb20gJy4vdXRpbHMvdHlwZSc7XG5cbi8qKlxuICog57K+56Gu6Zmk5rOV77yM5pSv5oyB5aSa5Liq5pWw55u46ZmkXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpNYXRoLmRpdmlkZVxuICogQHNpbmNlIDMuMS4wXG4gKiBAcGFyYW0gey4uLm51bWJlcnxzdHJpbmd9IG51bXMg6Zmk5pWw5ZKM6KKr6Zmk5pWwXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDllYbmlbBcbiAqIEBleGFtcGxlXG4gKlxuICogZGl2aWRlKDEuMjEsIDEuMSk7XG4gKiAvLyA9PiAxLjFcbiAqXG4gKiBkaXZpZGUoMTAwMCwgMTAsIDEwKTtcbiAqIC8vID0+IDEwXG4gKlxuICogZGl2aWRlKDEwMDAsIDEwLCAxMCwgMTApO1xuICogLy8gPT4gMVxuICovXG5mdW5jdGlvbiBkaXZpZGUoLi4ubnVtcykge1xuICBjb25zdCBbbnVtMSwgbnVtMiwgLi4ucmVzdF0gPSBudW1zO1xuXG4gIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZGl2aWRlKGRpdmlkZShudW0xLCBudW0yKSwgLi4ucmVzdCk7XG4gIH1cblxuICAvLyDlhbzlrrnlpITnkIbvvIzlpoLmnpznrKwy5Liq5Y+C5pWw5Li66Z2e5pWw5a2X5oiW5a2X56ym5Liy5pe277yM6L+U5Zue56ys5LiA5Liq5Y+C5pWwXG4gIGlmICgoIWlzTnVtYmVyKG51bTIpIHx8IGlzTmFOKG51bTIpKSAmJiAhaXNTdHJpbmcobnVtMikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG51bTE7XG4gIH1cblxuICBjb25zdCBudW0xQ2hhbmdlZCA9IGZsb2F0MkZpeGVkKG51bTEpO1xuICBjb25zdCBudW0yQ2hhbmdlZCA9IGZsb2F0MkZpeGVkKG51bTIpO1xuICBjaGVja0JvdW5kYXJ5KG51bTFDaGFuZ2VkKTtcbiAgY2hlY2tCb3VuZGFyeShudW0yQ2hhbmdlZCk7XG4gIC8vIGZpeDog57G75Ly8IDEwICoqIC00IOS4uiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk577yMc3RyaXAg5L+u5q2jXG4gIHJldHVybiB0aW1lcyhudW0xQ2hhbmdlZCAvIG51bTJDaGFuZ2VkLCBzdHJpcChNYXRoLnBvdygxMCwgZGlnaXRMZW5ndGgobnVtMikgLSBkaWdpdExlbmd0aChudW0xKSkpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGl2aWRlO1xuIiwiaW1wb3J0IGRpdmlkZSBmcm9tICcuL2RpdmlkZSc7XG5pbXBvcnQgdGltZXMgZnJvbSAnLi90aW1lcyc7XG5cbi8qKlxuICog5Zub6IiN5LqU5YWl77yM5pSv5oyB6K6+572u57K+5bqmXG4gKlxuICogQHN0YXRpY1xuICogQGFsaWFzIG1vZHVsZTpNYXRoLnJvdW5kXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbnVtIOimgeWbm+iIjeS6lOWFpeeahOaVsOWtl1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0g5Zub6IiN5LqU5YWl55qE57K+5bqmXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDlm5voiI3kupTlhaXnmoTmlbDlrZdcbiAqIEBleGFtcGxlXG4gKlxuICogcm91bmQoNC4wMDYpO1xuICogLy8gPT4gNFxuICpcbiAqIHJvdW5kKDQuMDA2LCAyKTtcbiAqIC8vID0+IDQuMDFcbiAqXG4gKiByb3VuZCg0MDYwLCAtMik7XG4gKiAvLyA9PiA0MTAwXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKG51bSwgcHJlY2lzaW9uID0gMCkge1xuICBjb25zdCBiYXNlID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gIHJldHVybiBkaXZpZGUoTWF0aC5yb3VuZCh0aW1lcyhudW0sIGJhc2UpKSwgYmFzZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJvdW5kO1xuIiwiLyoqXG4gKiDnrYnlvoXml7bpl7Tov5Tlm54gUHJvbWlzZSDjgILluLjnlKjkuo7lvILmraXmlrnms5XkuK3lu7bml7bjgIJcbiAqXG4gKiBAc3RhdGljXG4gKiBAYWxpYXMgbW9kdWxlOk90aGVyLndhaXRUaW1lXG4gKiBAc2luY2UgNC4yLjBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZT0xMDAwXSDlu7bml7bml7bpl7TvvIzljZXkvY3mr6vnp5JcbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRlc3QgPSBhc3luYyAoKT0+e1xuICogICBhd2FpdCB3YWl0VGltZSgpO1xuICogICAvLyBkbyBzb21ldGhpbmdcbiAqIH1cbiAqXG4gKiB3YWl0VGltZSg1MDApLnRoZW4oKCk9PntcbiAqICAgLy8gZG8gc29tZXRoaW5nXG4gKiB9KVxuICovXG5mdW5jdGlvbiB3YWl0VGltZSh0aW1lID0gMTAwMCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2FpdFRpbWU7XG4iLCJpbXBvcnQgbm9ybWFsaXplU3RyaW5nIGZyb20gJy4vbm9ybWFsaXplU3RyaW5nJztcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduLW1vYmlsZS9ibG9iL3YyL2NvbXBvbmVudHMvaW5wdXQtaXRlbS9pbmRleC50c3gjTDI0MFxuXG4vKipcbiAqIOiuoeeul+i+k+WFpeahhueahOWAvOagvOW8j+WMluWQjuWFieagh+S9jee9rlxuICpcbiAqIEBzdGF0aWNcbiAqIEBhbGlhcyBtb2R1bGU6T3RoZXIuY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb25cbiAqIEBzaW5jZSA0LjYuMFxuICogQHNlZSDmoLzlvI/ljJbmiYvmnLrlj7fnoIEge0BsaW5rIGh0dHBzOi8vZG9seS1kZXYuZ2l0aHViLmlvL3V0aWwtaGVscGVycy9tb2R1bGUtUHJvY2Vzc29yLmh0bWwjLmZvcm1hdE1vYmlsZXxmb3JtYXRNb2JpbGV9XG4gKiBAc2VlIOagvOW8j+WMlumTtuihjOWNoeWPtyB7QGxpbmsgaHR0cHM6Ly9kb2x5LWRldi5naXRodWIuaW8vdXRpbC1oZWxwZXJzL21vZHVsZS1Qcm9jZXNzb3IuaHRtbCMuZm9ybWF0QmFua0NhcmR8Zm9ybWF0QmFua0NhcmR9XG4gKiBAc2VlIGg156S65L6LIHtAbGluayBodHRwczovLzI5NTB2OS5jc2IuYXBwL3zngrnlh7vmn6XnnIt9XG4gKiBAc2VlIHJlYWN056S65L6LIHtAbGluayBodHRwczovLzMzY2N5OS5jc2IuYXBwL3zngrnlh7vmn6XnnIt9XG4gKiBAcGFyYW0ge251bWJlcn0gcHJldlBvcyDotYvlgLzliY3nmoTlhYnmoIfkvY3nva7vvIxvbkNoYW5nZS9vbklucHV055qE5YWJ5qCH5L2N572uIGUudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICogQHBhcmFtIHtzdHJpbmd9IHByZXZDdHJsVmFsdWUg5LiK5LiA5Liq5qC85byP5YyW5ZCO55qE5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3VmFsdWUg5b2T5YmN6L6T5YWl5Y6f5YC8XG4gKiBAcGFyYW0ge3N0cmluZ30gY3RybFZhbHVlIOW9k+WJjeagvOW8j+WMluWQjueahOWAvFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSDphY3nva7poblcbiAqIEBwYXJhbSB7c3RyaW5nW118c3RyaW5nfSBbb3B0aW9ucy5wbGFjZWhvbGRlckNoYXI9JyAnXSDljaDkvY3nrKZcbiAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5tYXNrUmVnPS9cXEQvZ10g6ZyA6KaB6YGu55uW55qE5a2X56ym6KeE5YiZ44CC6buY6K6k5Y675o6J6Z2e5pWw5a2X77yM5oSP5ZGz552AIGN0cmxWYWx1ZSDpnIDopoHljrvmjonpnZ7mlbDlrZfjgIJcbiAqIEBwYXJhbSB7J21vYmlsZSd8J2JhbmtDYXJkJ30gW29wdGlvbnMudHlwZV0g5qC85byP5YyW57G75Z6L77yM5YaF572u5omL5py65Y+356CB5ZKM6ZO26KGM5Y2h5Y+354m55q6K5aSE55CGXG4gKiBAcmV0dXJucyB7bnVtYmVyfSDmoLzlvI/ljJblkI7nmoTlhYnmoIfkvY3nva5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb24ocHJldlBvcywgcHJldkN0cmxWYWx1ZSwgcmF3VmFsdWUsIGN0cmxWYWx1ZSwgeyBwbGFjZWhvbGRlckNoYXIgPSAnICcsIG1hc2tSZWcgPSAvXFxEL2csIHR5cGUgfSA9IHt9KSB7XG4gIGNvbnN0IHJlYWxDdHJsVmFsdWUgPSBub3JtYWxpemVTdHJpbmcocHJldkN0cmxWYWx1ZSk7XG4gIGNvbnN0IHJlYWxSYXdWYWx1ZSA9IG5vcm1hbGl6ZVN0cmluZyhyYXdWYWx1ZSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyQ2hhcnMgPSBBcnJheS5pc0FycmF5KHBsYWNlaG9sZGVyQ2hhcikgPyBwbGFjZWhvbGRlckNoYXIgOiBbcGxhY2Vob2xkZXJDaGFyXTtcblxuICBjb25zdCBlZGl0TGVuZ3RoID0gcmVhbFJhd1ZhbHVlLmxlbmd0aCAtIHJlYWxDdHJsVmFsdWUubGVuZ3RoO1xuICBjb25zdCBpc0FkZGl0aW9uID0gZWRpdExlbmd0aCA+IDA7XG5cbiAgbGV0IHBvcyA9IHByZXZQb3M7XG5cbiAgaWYgKGlzQWRkaXRpb24pIHtcbiAgICBjb25zdCBhZGRpdGlvblN0ciA9IHJlYWxSYXdWYWx1ZS5zdWJzdHJpbmcocG9zIC0gZWRpdExlbmd0aCwgcG9zKTtcbiAgICBsZXQgY3RybENoYXJDb3VudCA9IGFkZGl0aW9uU3RyLnJlcGxhY2UobWFza1JlZywgJycpLmxlbmd0aDtcbiAgICBwb3MgLT0gZWRpdExlbmd0aCAtIGN0cmxDaGFyQ291bnQ7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXJDaGFyQ291bnQgPSAwO1xuICAgIHdoaWxlIChjdHJsQ2hhckNvdW50ID4gMCkge1xuICAgICAgaWYgKHBsYWNlaG9sZGVyQ2hhcnMuaW5kZXhPZihjdHJsVmFsdWUuY2hhckF0KHBvcyAtIGN0cmxDaGFyQ291bnQgKyBwbGFjZWhvbGRlckNoYXJDb3VudCkpICE9PSAtMSkge1xuICAgICAgICBwbGFjZWhvbGRlckNoYXJDb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3RybENoYXJDb3VudC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBwb3MgKz0gcGxhY2Vob2xkZXJDaGFyQ291bnQ7XG4gIH1cblxuICBpZiAoKHR5cGUgPT09ICdtb2JpbGUnICYmIChwb3MgPT09IDQgfHwgcG9zID09PSA5KSkgfHwgKHR5cGUgPT09ICdiYW5rQ2FyZCcgJiYgcG9zID4gMCAmJiBwb3MgJSA1ID09PSAwKSkge1xuICAgIHBvcyAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIHBvcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FsY3VsYXRlQ3Vyc29yUG9zaXRpb247XG4iXSwibmFtZXMiOlsicmVnIiwicmVnSWRDYXJkIiwiYmFzZVJlZyIsInN1bUNoZWNrQ29kZSIsImlzTmFOIl0sIm1hcHBpbmdzIjoiOzs7Ozs7RUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUMzQztFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7RUFDakMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pEOztFQ1hBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0VBQ3pCLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0VBQ2pDOztFQ2xCQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUU7RUFDaEMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ2pEOztFQ1JBO0VBQ0EsTUFBTUEsS0FBRyxHQUFHLG1CQUFtQixDQUFDO0FBQ2hDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtFQUN6QixFQUFFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENB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O0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRTtFQUN2QixFQUFFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMxQyxFQUFFLE9BQU9BLEtBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDNUI7O0VDdERBO0VBQ0EsTUFBTUEsS0FBRyxHQUFHLHVLQUF1SyxDQUFDO0FBQ3BMO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtFQUN0QixFQUFFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMxQyxFQUFFLE9BQU9BLEtBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDNUI7O0VDdENBO0VBQ0EsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBQzNCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtFQUMvQixFQUFFLElBQUksTUFBTSxDQUFDO0FBQ2I7RUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkO0VBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0VBQy9CLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxJQUFJ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QyxDQUFDO0FBQ2xEO0VBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNsRjs7RUN4Q0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO0VBQzFGLEVBQUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtFQUNBO0VBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFO0VBQ2pDLElBQUksT0FBTyxHQUFHLENBQUM7RUFDZixHQUFHO0FBQ0g7RUFDQSxFQUFFLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQzlDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDdEM7RUFDQTtFQUNBLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0VBQ3BCLElBQUksT0FBTyxHQUFHLENBQUM7RUFD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RSxLQUFLLENBQUM7RUFDZixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztFQUNmLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ2YsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7QUFDakI7RUFDQTtFQUNBLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ2YsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7RUFDZixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztFQUNmLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0VBQ25CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO0FBQ3BCO0VBQ0E7RUFDQTtFQUNBLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0VBQ2YsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7QUFDZjtFQUNBO0VBQ0EsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7RUFDbkIsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7RUFDbkIsQ0FBQyxDQUFDO0FBQ0Y7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxXQUFXLENBQUMsRUFBRSxFQUFFO0VBQ3pCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVB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V0FBVyxFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUU7RUFDdkUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzlEOztFQ3RCQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRTtFQUNsQyxFQUFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDdEY7RUFDQSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0VBQy9CO0VBQ0EsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ3hDLEdBQUc7QUFDSDtFQUNBO0VBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQzdEOztFQ2hDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtFQUNyRCxFQUFFLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FB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
2689
+ //# sourceMappingURL=util-helpers.js.map