@plait/core 0.75.0 → 0.76.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.
@@ -50,7 +50,10 @@ export const PlaitBoard = {
50
50
  getElementUpperHost(board) {
51
51
  return BOARD_TO_ELEMENT_HOST.get(board)?.upperHost;
52
52
  },
53
- getElementActiveHost(board) {
53
+ getElementTopHost(board) {
54
+ return BOARD_TO_ELEMENT_HOST.get(board)?.topHost;
55
+ },
56
+ getActiveHost(board) {
54
57
  return BOARD_TO_ELEMENT_HOST.get(board)?.activeHost;
55
58
  },
56
59
  getRoughSVG(board) {
@@ -102,4 +105,4 @@ export const PlaitBoard = {
102
105
  return (board.options.themeColors || ThemeColors);
103
106
  }
104
107
  };
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbnRlcmZhY2VzL2JvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsOEJBQThCLEVBQzlCLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsY0FBYyxFQUNqQixNQUFNLG9CQUFvQixDQUFDO0FBSTVCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSTFELE9BQU8sRUFBMEIsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXFGakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCLE9BQU8sQ0FBQyxLQUFVO1FBQ2QsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO1FBQzFGLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBaUI7UUFDckIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUNELFFB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QUM5QixDQUFDO0lBQ0QsU0FBUyxDQUF1QixLQUFpQixFQUFFLE9BQVU7UUFDekQsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBQ0QsV0FBVyxDQUF1QixLQUFpQixFQUFFLFFBQWE7UUFDOUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQVksQ0FBQztRQUNqQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELHFCQUFxQixDQUFDLEtBQWlCO1FBQ25DLE9BQU8sOEJBQThCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFpQjtRQUNsQyxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekUsSUFBSSxLQUFLLElBQUksZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELGNBQWMsQ0FBb0MsS0FBaUI7UUFDL0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBUSxDQUFDO0lBQzdELENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRQb2ludGVyVHlwZSB9IGZyb20gJy4vcG9pbnRlcic7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBQbGFpdEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCB9IGZyb20gJy4uL2NvcmUvZWxlbWVudC9jb250ZXh0JztcbmltcG9ydCB7IFBsYWl0SGlzdG9yeSB9IGZyb20gJy4vaGlzdG9yeSc7XG5pbXBvcnQgeyBQbGFpdE9wZXJhdGlvbiB9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4vc2VsZWN0aW9uJztcbmltcG9ydCB7IFZpZXdwb3J0IH0gZnJvbSAnLi92aWV3cG9ydCc7XG5pbXBvcnQge1xuICAgIEJPQVJEX1RPX0NPTlRFWFQsXG4gICAgQk9BUkRfVE9fRUxFTUVOVF9IT1NULFxuICAgIEJPQVJEX1RPX0hPU1QsXG4gICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULFxuICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRCxcbiAgICBCT0FSRF9UT19ST1VHSF9TVkcsXG4gICAgSVNfQk9BUkRfQUxJVkUsXG4gICAgSVNfQk9BUkRfQ0FDSEUsXG4gICAgSVNfVEVYVF9FRElUQUJMRSxcbiAgICBOT0RFX1RPX0lOREVYLFxuICAgIE5PREVfVE9fUEFSRU5UXG59IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vcG9pbnQnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi9yZWN0YW5nbGUtY2xpZW50JztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9lbGVtZW50JztcbmltcG9ydCB7IFBhdGhSZWYsIFBhdGhSZWZPcHRpb25zIH0gZnJvbSAnLi9wYXRoLXJlZic7XG5pbXBvcnQgeyBBbmNlc3RvciwgUGxhaXROb2RlIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCB7IFBhdGggfSBmcm9tICcuL3BhdGgnO1xuaW1wb3J0IHsgUGxhaXRUaGVtZSwgVGhlbWVDb2xvciwgVGhlbWVDb2xvcnMgfSBmcm9tICcuL3RoZW1lJztcbmltcG9ydCB7IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlIH0gZnJvbSAnLi4vdXRpbHMvbWF0aCc7XG5pbXBvcnQgeyBDbGlwYm9hcmREYXRhLCBXcml0YWJsZUNsaXBib2FyZENvbnRleHQsIFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEVsZW1lbnRGbGF2b3VyIH0gZnJvbSAnLi4vY29yZS9lbGVtZW50L2VsZW1lbnQtZmxhdm91cic7XG5pbXBvcnQgeyBQbGFpdEJvYXJkQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWl0Qm9hcmQge1xuICAgIHZpZXdwb3J0OiBWaWV3cG9ydDtcbiAgICBjaGlsZHJlbjogUGxhaXRFbGVtZW50W107XG4gICAgdGhlbWU6IFBsYWl0VGhlbWU7XG4gICAgb3BlcmF0aW9uczogUGxhaXRPcGVyYXRpb25bXTtcbiAgICAvLyByZWNvcmQgcG9pbnRlciBzZWxlY3Rpb24gb3IgZHJhZyBzZWxlY3Rpb25cbiAgICAvLyBpdCB3aWxsIGJlIGRpcnR5IHdoZW4gYm9hcmQgdmlld3BvcnQgY2hhbmdlXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsO1xuICAgIHBvaW50ZXI6IFBsYWl0UG9pbnRlclR5cGUgfCBzdHJpbmc7XG4gICAgaGlzdG9yeTogUGxhaXRIaXN0b3J5O1xuICAgIG9wdGlvbnM6IFBsYWl0Qm9hcmRPcHRpb25zO1xuICAgIHVuZG86ICgpID0+IHZvaWQ7XG4gICAgcmVkbzogKCkgPT4gdm9pZDtcbiAgICBhcHBseTogKG9wZXJhdGlvbjogUGxhaXRPcGVyYXRpb24pID0+IHZvaWQ7XG4gICAgb25DaGFuZ2U6ICgpID0+IHZvaWQ7XG4gICAgYWZ0ZXJDaGFuZ2U6ICgpID0+IHZvaWQ7XG4gICAgZHJhd1NlbGVjdGlvblJlY3RhbmdsZTogKCkgPT4gU1ZHR0VsZW1lbnQgfCBudWxsO1xuICAgIG1vdXNlZG93bjogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIG1vdXNlbW92ZTogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIG1vdXNlbGVhdmU6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBtb3VzZXVwOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgZ2xvYmFsTW91c2Vtb3ZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgZ2xvYmFsTW91c2V1cDogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIGtleURvd246IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBnbG9iYWxLZXlEb3duOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAga2V5VXA6IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBidWlsZEZyYWdtZW50OiAoXG4gICAgICAgIGNsaXBib2FyZENvbnRleHQ6IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCB8IG51bGwsXG4gICAgICAgIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLFxuICAgICAgICBvcmlnaW5EYXRhPzogUGxhaXRFbGVtZW50W11cbiAgICApID0+IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCB8IG51bGw7XG4gICAgaW5zZXJ0RnJhZ21lbnQ6IChjbGlwYm9hcmREYXRhOiBDbGlwYm9hcmREYXRhIHwgbnVsbCwgdGFyZ2V0UG9pbnQ6IFBvaW50LCBvcGVyYXRpb25UeXBlPzogV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlKSA9PiB2b2lkO1xuICAgIGRlbGV0ZUZyYWdtZW50OiAoZGF0YTogUGxhaXRFbGVtZW50W10pID0+IHZvaWQ7XG4gICAgZ2V0RGVsZXRlZEZyYWdtZW50OiAoZGF0YTogUGxhaXRFbGVtZW50W10pID0+IFBsYWl0RWxlbWVudFtdO1xuICAgIGdldFJlbGF0ZWRGcmFnbWVudDogKGRhdGE6IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5EYXRhPzogUGxhaXRFbGVtZW50W10pID0+IFBsYWl0RWxlbWVudFtdO1xuICAgIGRibENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgbm9ybWFsaXplRWxlbWVudDogKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHZvaWQ7XG4gICAgZHJhd0VsZW1lbnQ6IChjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0KSA9PiBDb21wb25lbnRUeXBlPEVsZW1lbnRGbGF2b3VyPjtcbiAgICBpc1JlY3RhbmdsZUhpdDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcmFuZ2U6IFNlbGVjdGlvbikgPT4gYm9vbGVhbjtcbiAgICAvLyBXaGVuIHRoZSBlbGVtZW50IGhhcyBubyBmaWxsIGNvbG9yLCBpdCBpcyBjb25zaWRlcmVkIGEgaGl0IG9ubHkgaWYgaXQgaGl0cyB0aGUgYm9yZGVyLlxuICAgIGlzSGl0OiAoZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQsIGlzU3RyaWN0PzogYm9vbGVhbikgPT4gYm9vbGVhbjtcbiAgICBpc0luc2lkZVBvaW50OiAoZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IGJvb2xlYW47XG4gICAgLy8gdGhlIGhpdCBlbGVtZW50IGlzIGRldGVybWluZWQgYnkgdGhlIHBsdWdpblxuICAgIGdldE9uZUhpdEVsZW1lbnQ6IChoaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IFBsYWl0RWxlbWVudDtcbiAgICBpc1JlY3Vyc2lvbjogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgICBpc01vdmFibGU6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgZ2V0UmVjdGFuZ2xlOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBSZWN0YW5nbGVDbGllbnQgfCBudWxsO1xuICAgIGlzV2l0aGluU2VsZWN0aW9uOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIHBhdGhSZWY6IChwYXRoOiBQYXRoLCBvcHRpb25zPzogUGF0aFJlZk9wdGlvbnMpID0+IFBhdGhSZWY7XG4gICAgcGF0aFJlZnM6ICgpID0+IFNldDxQYXRoUmVmPjtcbiAgICBhcHBseVRoZW1lOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB2b2lkO1xuICAgIGlzQWxpZ246IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgaXNJbWFnZUJpbmRpbmdBbGxvd2VkOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIGNhbkFkZFRvR3JvdXA6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgY2FuU2V0WkluZGV4OiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIGlzRXhwYW5kZWQ6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgLy8gcG9pbnRlciBob29rXG4gICAgcG9pbnRlckRvd246IChwb2ludGVyOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgcG9pbnRlck1vdmU6IChwb2ludGVyOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgcG9pbnRlclVwOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJDYW5jZWw6IChwb2ludGVyOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgcG9pbnRlck91dDogKHBvaW50ZXI6IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbiAgICBwb2ludGVyTGVhdmU6IChwb2ludGVyOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgZ2xvYmFsUG9pbnRlck1vdmU6IChwb2ludGVyOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgZ2xvYmFsUG9pbnRlclVwOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWl0Qm9hcmRPcHRpb25zIHtcbiAgICByZWFkb25seT86IGJvb2xlYW47XG4gICAgaGlkZVNjcm9sbGJhcj86IGJvb2xlYW47XG4gICAgZGlzYWJsZWRTY3JvbGxPbk5vbkZvY3VzPzogYm9vbGVhbjtcbiAgICB0aGVtZUNvbG9ycz86IFRoZW1lQ29sb3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFpdEJvYXJkTW92ZSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFBsYWl0Qm9hcmQgPSB7XG4gICAgaXNCb2FyZCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUGxhaXRCb2FyZCB7XG4gICAgICAgIGNvbnN0IGNhY2hlZElzQm9hcmQgPSBJU19CT0FSRF9DQUNIRS5nZXQodmFsdWUpO1xuICAgICAgICBpZiAoY2FjaGVkSXNCb2FyZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkSXNCb2FyZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0JvYXJkID0gdHlwZW9mIHZhbHVlLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS5hcHBseSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgSVNfQk9BUkRfQ0FDSEUuc2V0KHZhbHVlLCBpc0JvYXJkKTtcbiAgICAgICAgcmV0dXJuIGlzQm9hcmQ7XG4gICAgfSxcbiAgICBpc0FsaXZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIGNvbnN0IGlzQWxpdmUgPSBJU19CT0FSRF9BTElWRS5nZXQoYm9hcmQpO1xuICAgICAgICByZXR1cm4gISFpc0FsaXZlO1xuICAgIH0sXG4gICAgZmluZFBhdGgoYm9hcmQ6IFBsYWl0Qm9hcmQsIG5vZGU6IFBsYWl0Tm9kZSk6IFBhdGgge1xuICAgICAgICBjb25zdCBwYXRoOiBQYXRoID0gW107XG4gICAgICAgIGxldCBjaGlsZDogQW5jZXN0b3IgPSBub2RlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gTk9ERV9UT19QQVJFTlQuZ2V0KGNoaWxkIGFzIFBsYWl0RWxlbWVudCk7XG4gICAgICAgICAgICBpZiAocGFyZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpID0gTk9ERV9UT19JTkRFWC5nZXQoY2hpbGQgYXMgUGxhaXRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgudW5zaGlmdChpKTtcbiAgICAgICAgICAgIGNoaWxkID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgdGhlIHBhdGggZm9yIFBsYWl0IG5vZGU6ICR7SlNPTi5zdHJpbmdpZnkobm9kZSl9YCk7XG4gICAgfSxcbiAgICBnZXRIb3N0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19IT1NULmdldChib2FyZCkgYXMgU1ZHU1ZHRWxlbWVudDtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRMb3dlckhvc3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIEJPQVJEX1RPX0VMRU1FTlRfSE9TVC5nZXQoYm9hcmQpPy5sb3dlckhvc3QgYXMgU1ZHU1ZHRWxlbWVudDtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRIb3N0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZ2V0KGJvYXJkKT8uaG9zdCBhcyBTVkdTVkdFbGVtZW50O1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudFVwcGVySG9zdChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fRUxFTUVOVF9IT1NULmdldChib2FyZCk/LnVwcGVySG9zdCBhcyBTVkdTVkdFbGVtZW50O1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIEJPQVJEX1RPX0VMRU1FTlRfSE9TVC5nZXQoYm9hcmQpPy5hY3RpdmVIb3N0IGFzIFNWR1NWR0VsZW1lbnQ7XG4gICAgfSxcbiAgICBnZXRSb3VnaFNWRyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fUk9VR0hfU1ZHLmdldChib2FyZCkgYXMgUm91Z2hTVkc7XG4gICAgfSxcbiAgICBnZXRCb2FyZENvbnRhaW5lcihib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fRUxFTUVOVF9IT1NULmdldChib2FyZCk/LmNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICB9LFxuICAgIGdldEJvYXJkQ29udGV4dChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fQ09OVEVYVC5nZXQoYm9hcmQpIGFzIFBsYWl0Qm9hcmRDb250ZXh0O1xuICAgIH0sXG4gICAgZ2V0UmVjdGFuZ2xlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBib2FyZC5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBnZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fRUxFTUVOVF9IT1NULmdldChib2FyZCk/LnZpZXdwb3J0Q29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgIH0sXG4gICAgaXNGb2N1cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gISFib2FyZC5zZWxlY3Rpb247XG4gICAgfSxcbiAgICBpc1JlYWRvbmx5KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBib2FyZC5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH0sXG4gICAgaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiAhIUlTX1RFWFRfRURJVEFCTEUuZ2V0KGJvYXJkKTtcbiAgICB9LFxuICAgIGdldFBvaW50ZXI8VCA9IFBsYWl0UG9pbnRlclR5cGU+KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBib2FyZC5wb2ludGVyIGFzIFQ7XG4gICAgfSxcbiAgICBpc1BvaW50ZXI8VCA9IFBsYWl0UG9pbnRlclR5cGU+KGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludGVyOiBUKSB7XG4gICAgICAgIHJldHVybiBib2FyZC5wb2ludGVyID09PSBwb2ludGVyO1xuICAgIH0sXG4gICAgaXNJblBvaW50ZXI8VCA9IFBsYWl0UG9pbnRlclR5cGU+KGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludGVyczogVFtdKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gYm9hcmQucG9pbnRlciBhcyBUO1xuICAgICAgICByZXR1cm4gcG9pbnRlcnMuaW5jbHVkZXMocG9pbnQpO1xuICAgIH0sXG4gICAgZ2V0TW92aW5nUG9pbnRJbkJvYXJkKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuZ2V0KGJvYXJkKTtcbiAgICB9LFxuICAgIGlzTW92aW5nUG9pbnRJbkJvYXJkKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gQk9BUkRfVE9fTU9WSU5HX1BPSU5ULmdldChib2FyZCk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHBvaW50ICYmIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlKHBvaW50WzBdLCBwb2ludFsxXSwgcmVjdCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGdldFRoZW1lQ29sb3JzPFQgZXh0ZW5kcyBUaGVtZUNvbG9yID0gVGhlbWVDb2xvcj4oYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIChib2FyZC5vcHRpb25zLnRoZW1lQ29sb3JzIHx8IFRoZW1lQ29sb3JzKSBhcyBUW107XG4gICAgfVxufTtcbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbnRlcmZhY2VzL2JvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsOEJBQThCLEVBQzlCLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsY0FBYyxFQUNqQixNQUFNLG9CQUFvQixDQUFDO0FBSTVCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSTFELE9BQU8sRUFBMEIsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXFGakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCLE9BQU8sQ0FBQyxLQUFVO1FBQ2QsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO1FBQzFGLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBaUI7UUFDckIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFpQixFQUFFLElBQWU7UUFDdkMsTUFBTSxJQUFJLEdBQVMsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxHQUFhLElBQUksQ0FBQztRQUMzQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFxQixDQUFDLENBQUM7WUFDekQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM1QixPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQXFCLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDWixNQUFNO1lBQ1YsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFpQjtRQUNyQixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFrQixDQUFDO0lBQ3JELENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxLQUFpQjtRQUNqQyxPQUFPLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUEwQixDQUFDO0lBQ3hFLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBaUI7UUFDNUIsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBcUIsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsS0FBaUI7UUFDakMsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBMEIsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBaUI7UUFDL0IsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBd0IsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQWlCO1FBQzNCLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQTJCLENBQUM7SUFDekUsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQWEsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBaUI7UUFDL0IsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBd0IsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsZUFBZSxDQUFDLEtBQWlCO1FBQzdCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBc0IsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQWlCO1FBQzFCLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELG9CQUFvQixDQUFDLEtBQWlCO1FBQ2xDLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLGlCQUFnQyxDQUFDO0lBQzlFLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBaUI7UUFDckIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsVUFBVSxDQUFDLEtBQWlCO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUNELGtCQUFrQixDQUFDLEtBQWlCO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsVUFBVSxDQUF1QixLQUFpQjtRQUM5QyxPQUFPLEtBQUssQ0FBQyxPQUFZLENBQUM7SUFDOUIsQ0FBQztJQUNELFNBQVMsQ0FBdUIsS0FBaUIsRUFBRSxPQUFVO1FBQ3pELE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUNELFdBQVcsQ0FBdUIsS0FBaUIsRUFBRSxRQUFhO1FBQzlELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFZLENBQUM7UUFDakMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxLQUFpQjtRQUNuQyxPQUFPLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBaUI7UUFDbEMsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3pFLElBQUksS0FBSyxJQUFJLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxjQUFjLENBQW9DLEtBQWlCO1FBQy9ELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQVEsQ0FBQztJQUM3RCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0UG9pbnRlclR5cGUgfSBmcm9tICcuL3BvaW50ZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQgfSBmcm9tICcuLi9jb3JlL2VsZW1lbnQvY29udGV4dCc7XG5pbXBvcnQgeyBQbGFpdEhpc3RvcnkgfSBmcm9tICcuL2hpc3RvcnknO1xuaW1wb3J0IHsgUGxhaXRPcGVyYXRpb24gfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQgeyBTZWxlY3Rpb24gfSBmcm9tICcuL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBWaWV3cG9ydCB9IGZyb20gJy4vdmlld3BvcnQnO1xuaW1wb3J0IHtcbiAgICBCT0FSRF9UT19DT05URVhULFxuICAgIEJPQVJEX1RPX0VMRU1FTlRfSE9TVCxcbiAgICBCT0FSRF9UT19IT1NULFxuICAgIEJPQVJEX1RPX01PVklOR19QT0lOVCxcbiAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQsXG4gICAgQk9BUkRfVE9fUk9VR0hfU1ZHLFxuICAgIElTX0JPQVJEX0FMSVZFLFxuICAgIElTX0JPQVJEX0NBQ0hFLFxuICAgIElTX1RFWFRfRURJVEFCTEUsXG4gICAgTk9ERV9UT19JTkRFWCxcbiAgICBOT0RFX1RPX1BBUkVOVFxufSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50JztcbmltcG9ydCB7IFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4vcmVjdGFuZ2xlLWNsaWVudCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvZWxlbWVudCc7XG5pbXBvcnQgeyBQYXRoUmVmLCBQYXRoUmVmT3B0aW9ucyB9IGZyb20gJy4vcGF0aC1yZWYnO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Tm9kZSB9IGZyb20gJy4vbm9kZSc7XG5pbXBvcnQgeyBQYXRoIH0gZnJvbSAnLi9wYXRoJztcbmltcG9ydCB7IFBsYWl0VGhlbWUsIFRoZW1lQ29sb3IsIFRoZW1lQ29sb3JzIH0gZnJvbSAnLi90aGVtZSc7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZSB9IGZyb20gJy4uL3V0aWxzL21hdGgnO1xuaW1wb3J0IHsgQ2xpcGJvYXJkRGF0YSwgV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0LCBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBFbGVtZW50Rmxhdm91ciB9IGZyb20gJy4uL2NvcmUvZWxlbWVudC9lbGVtZW50LWZsYXZvdXInO1xuaW1wb3J0IHsgUGxhaXRCb2FyZENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBQbGFpdEJvYXJkIHtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gICAgY2hpbGRyZW46IFBsYWl0RWxlbWVudFtdO1xuICAgIHRoZW1lOiBQbGFpdFRoZW1lO1xuICAgIG9wZXJhdGlvbnM6IFBsYWl0T3BlcmF0aW9uW107XG4gICAgLy8gcmVjb3JkIHBvaW50ZXIgc2VsZWN0aW9uIG9yIGRyYWcgc2VsZWN0aW9uXG4gICAgLy8gaXQgd2lsbCBiZSBkaXJ0eSB3aGVuIGJvYXJkIHZpZXdwb3J0IGNoYW5nZVxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbDtcbiAgICBwb2ludGVyOiBQbGFpdFBvaW50ZXJUeXBlIHwgc3RyaW5nO1xuICAgIGhpc3Rvcnk6IFBsYWl0SGlzdG9yeTtcbiAgICBvcHRpb25zOiBQbGFpdEJvYXJkT3B0aW9ucztcbiAgICB1bmRvOiAoKSA9PiB2b2lkO1xuICAgIHJlZG86ICgpID0+IHZvaWQ7XG4gICAgYXBwbHk6IChvcGVyYXRpb246IFBsYWl0T3BlcmF0aW9uKSA9PiB2b2lkO1xuICAgIG9uQ2hhbmdlOiAoKSA9PiB2b2lkO1xuICAgIGFmdGVyQ2hhbmdlOiAoKSA9PiB2b2lkO1xuICAgIGRyYXdTZWxlY3Rpb25SZWN0YW5nbGU6ICgpID0+IFNWR0dFbGVtZW50IHwgbnVsbDtcbiAgICBtb3VzZWRvd246IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBtb3VzZW1vdmU6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBtb3VzZWxlYXZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgbW91c2V1cDogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIGdsb2JhbE1vdXNlbW92ZTogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIGdsb2JhbE1vdXNldXA6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBrZXlEb3duOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgZ2xvYmFsS2V5RG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIGtleVVwOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgYnVpbGRGcmFnbWVudDogKFxuICAgICAgICBjbGlwYm9hcmRDb250ZXh0OiBXcml0YWJsZUNsaXBib2FyZENvbnRleHQgfCBudWxsLFxuICAgICAgICByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCB8IG51bGwsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZSxcbiAgICAgICAgb3JpZ2luRGF0YT86IFBsYWl0RWxlbWVudFtdXG4gICAgKSA9PiBXcml0YWJsZUNsaXBib2FyZENvbnRleHQgfCBudWxsO1xuICAgIGluc2VydEZyYWdtZW50OiAoY2xpcGJvYXJkRGF0YTogQ2xpcGJvYXJkRGF0YSB8IG51bGwsIHRhcmdldFBvaW50OiBQb2ludCwgb3BlcmF0aW9uVHlwZT86IFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZSkgPT4gdm9pZDtcbiAgICBkZWxldGVGcmFnbWVudDogKGRhdGE6IFBsYWl0RWxlbWVudFtdKSA9PiB2b2lkO1xuICAgIGdldERlbGV0ZWRGcmFnbWVudDogKGRhdGE6IFBsYWl0RWxlbWVudFtdKSA9PiBQbGFpdEVsZW1lbnRbXTtcbiAgICBnZXRSZWxhdGVkRnJhZ21lbnQ6IChkYXRhOiBQbGFpdEVsZW1lbnRbXSwgb3JpZ2luRGF0YT86IFBsYWl0RWxlbWVudFtdKSA9PiBQbGFpdEVsZW1lbnRbXTtcbiAgICBkYmxDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIG5vcm1hbGl6ZUVsZW1lbnQ6IChjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0KSA9PiB2b2lkO1xuICAgIGRyYXdFbGVtZW50OiAoY29udGV4dDogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCkgPT4gQ29tcG9uZW50VHlwZTxFbGVtZW50Rmxhdm91cj47XG4gICAgaXNSZWN0YW5nbGVIaXQ6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHJhbmdlOiBTZWxlY3Rpb24pID0+IGJvb2xlYW47XG4gICAgLy8gV2hlbiB0aGUgZWxlbWVudCBoYXMgbm8gZmlsbCBjb2xvciwgaXQgaXMgY29uc2lkZXJlZCBhIGhpdCBvbmx5IGlmIGl0IGhpdHMgdGhlIGJvcmRlci5cbiAgICBpc0hpdDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50LCBpc1N0cmljdD86IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gICAgaXNJbnNpZGVQb2ludDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiBib29sZWFuO1xuICAgIC8vIHRoZSBoaXQgZWxlbWVudCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwbHVnaW5cbiAgICBnZXRPbmVIaXRFbGVtZW50OiAoaGl0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiBQbGFpdEVsZW1lbnQ7XG4gICAgaXNSZWN1cnNpb246IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgaXNNb3ZhYmxlOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIGdldFJlY3RhbmdsZTogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbDtcbiAgICBpc1dpdGhpblNlbGVjdGlvbjogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgICBwYXRoUmVmOiAocGF0aDogUGF0aCwgb3B0aW9ucz86IFBhdGhSZWZPcHRpb25zKSA9PiBQYXRoUmVmO1xuICAgIHBhdGhSZWZzOiAoKSA9PiBTZXQ8UGF0aFJlZj47XG4gICAgYXBwbHlUaGVtZTogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gdm9pZDtcbiAgICBpc0FsaWduOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIGlzSW1hZ2VCaW5kaW5nQWxsb3dlZDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgICBjYW5BZGRUb0dyb3VwOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIGNhblNldFpJbmRleDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgICBpc0V4cGFuZGVkOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuO1xuICAgIC8vIHBvaW50ZXIgaG9va1xuICAgIHBvaW50ZXJEb3duOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJNb3ZlOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJVcDogKHBvaW50ZXI6IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbiAgICBwb2ludGVyQ2FuY2VsOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJPdXQ6IChwb2ludGVyOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgcG9pbnRlckxlYXZlOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAgIGdsb2JhbFBvaW50ZXJNb3ZlOiAocG9pbnRlcjogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAgIGdsb2JhbFBvaW50ZXJVcDogKHBvaW50ZXI6IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFpdEJvYXJkT3B0aW9ucyB7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAgIGhpZGVTY3JvbGxiYXI/OiBib29sZWFuO1xuICAgIGRpc2FibGVkU2Nyb2xsT25Ob25Gb2N1cz86IGJvb2xlYW47XG4gICAgdGhlbWVDb2xvcnM/OiBUaGVtZUNvbG9yW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhaXRCb2FyZE1vdmUge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBQbGFpdEJvYXJkID0ge1xuICAgIGlzQm9hcmQodmFsdWU6IGFueSk6IHZhbHVlIGlzIFBsYWl0Qm9hcmQge1xuICAgICAgICBjb25zdCBjYWNoZWRJc0JvYXJkID0gSVNfQk9BUkRfQ0FDSEUuZ2V0KHZhbHVlKTtcbiAgICAgICAgaWYgKGNhY2hlZElzQm9hcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZElzQm9hcmQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNCb2FyZCA9IHR5cGVvZiB2YWx1ZS5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUuYXBwbHkgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIElTX0JPQVJEX0NBQ0hFLnNldCh2YWx1ZSwgaXNCb2FyZCk7XG4gICAgICAgIHJldHVybiBpc0JvYXJkO1xuICAgIH0sXG4gICAgaXNBbGl2ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICBjb25zdCBpc0FsaXZlID0gSVNfQk9BUkRfQUxJVkUuZ2V0KGJvYXJkKTtcbiAgICAgICAgcmV0dXJuICEhaXNBbGl2ZTtcbiAgICB9LFxuICAgIGZpbmRQYXRoKGJvYXJkOiBQbGFpdEJvYXJkLCBub2RlOiBQbGFpdE5vZGUpOiBQYXRoIHtcbiAgICAgICAgY29uc3QgcGF0aDogUGF0aCA9IFtdO1xuICAgICAgICBsZXQgY2hpbGQ6IEFuY2VzdG9yID0gbm9kZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IE5PREVfVE9fUEFSRU5ULmdldChjaGlsZCBhcyBQbGFpdEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaSA9IE5PREVfVE9fSU5ERVguZ2V0KGNoaWxkIGFzIFBsYWl0RWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoaSk7XG4gICAgICAgICAgICBjaGlsZCA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHRoZSBwYXRoIGZvciBQbGFpdCBub2RlOiAke0pTT04uc3RyaW5naWZ5KG5vZGUpfWApO1xuICAgIH0sXG4gICAgZ2V0SG9zdChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fSE9TVC5nZXQoYm9hcmQpIGFzIFNWR1NWR0VsZW1lbnQ7XG4gICAgfSxcbiAgICBnZXRFbGVtZW50TG93ZXJIb3N0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZ2V0KGJvYXJkKT8ubG93ZXJIb3N0IGFzIFNWR1NWR0VsZW1lbnQ7XG4gICAgfSxcbiAgICBnZXRFbGVtZW50SG9zdChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fRUxFTUVOVF9IT1NULmdldChib2FyZCk/Lmhvc3QgYXMgU1ZHU1ZHRWxlbWVudDtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRVcHBlckhvc3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIEJPQVJEX1RPX0VMRU1FTlRfSE9TVC5nZXQoYm9hcmQpPy51cHBlckhvc3QgYXMgU1ZHU1ZHRWxlbWVudDtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRUb3BIb3N0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZ2V0KGJvYXJkKT8udG9wSG9zdCBhcyBTVkdTVkdFbGVtZW50O1xuICAgIH0sXG4gICAgZ2V0QWN0aXZlSG9zdChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gQk9BUkRfVE9fRUxFTUVOVF9IT1NULmdldChib2FyZCk/LmFjdGl2ZUhvc3QgYXMgU1ZHU1ZHRWxlbWVudDtcbiAgICB9LFxuICAgIGdldFJvdWdoU1ZHKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19ST1VHSF9TVkcuZ2V0KGJvYXJkKSBhcyBSb3VnaFNWRztcbiAgICB9LFxuICAgIGdldEJvYXJkQ29udGFpbmVyKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZ2V0KGJvYXJkKT8uY29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgIH0sXG4gICAgZ2V0Qm9hcmRDb250ZXh0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19DT05URVhULmdldChib2FyZCkgYXMgUGxhaXRCb2FyZENvbnRleHQ7XG4gICAgfSxcbiAgICBnZXRSZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICB9LFxuICAgIGdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZ2V0KGJvYXJkKT8udmlld3BvcnRDb250YWluZXIgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfSxcbiAgICBpc0ZvY3VzKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHJldHVybiAhIWJvYXJkLnNlbGVjdGlvbjtcbiAgICB9LFxuICAgIGlzUmVhZG9ubHkoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLm9wdGlvbnMucmVhZG9ubHk7XG4gICAgfSxcbiAgICBoYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuICEhSVNfVEVYVF9FRElUQUJMRS5nZXQoYm9hcmQpO1xuICAgIH0sXG4gICAgZ2V0UG9pbnRlcjxUID0gUGxhaXRQb2ludGVyVHlwZT4oYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLnBvaW50ZXIgYXMgVDtcbiAgICB9LFxuICAgIGlzUG9pbnRlcjxUID0gUGxhaXRQb2ludGVyVHlwZT4oYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50ZXI6IFQpIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLnBvaW50ZXIgPT09IHBvaW50ZXI7XG4gICAgfSxcbiAgICBpc0luUG9pbnRlcjxUID0gUGxhaXRQb2ludGVyVHlwZT4oYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50ZXJzOiBUW10pIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBib2FyZC5wb2ludGVyIGFzIFQ7XG4gICAgICAgIHJldHVybiBwb2ludGVycy5pbmNsdWRlcyhwb2ludCk7XG4gICAgfSxcbiAgICBnZXRNb3ZpbmdQb2ludEluQm9hcmQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRC5nZXQoYm9hcmQpO1xuICAgIH0sXG4gICAgaXNNb3ZpbmdQb2ludEluQm9hcmQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuZ2V0KGJvYXJkKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAocG9pbnQgJiYgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUocG9pbnRbMF0sIHBvaW50WzFdLCByZWN0KSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgZ2V0VGhlbWVDb2xvcnM8VCBleHRlbmRzIFRoZW1lQ29sb3IgPSBUaGVtZUNvbG9yPihib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICByZXR1cm4gKGJvYXJkLm9wdGlvbnMudGhlbWVDb2xvcnMgfHwgVGhlbWVDb2xvcnMpIGFzIFRbXTtcbiAgICB9XG59O1xuIl19
@@ -7,5 +7,4 @@ export * from './with-moving';
7
7
  export * from './with-options';
8
8
  export * from './with-related-fragment';
9
9
  export * from './with-selection';
10
- export * from './with-viewport';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLWJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1oYW5kJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1oaXN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1ob3RrZXknO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLW1vdmluZyc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtcmVsYXRlZC1mcmFnbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtc2VsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC12aWV3cG9ydCc7XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JlYXRlLWJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1ib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtaGFuZCc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtaGlzdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtaG90a2V5JztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1tb3ZpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXJlbGF0ZWQtZnJhZ21lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXNlbGVjdGlvbic7XG4iXX0=
@@ -1,24 +1,44 @@
1
1
  import { DRAG_SELECTION_PRESS_AND_MOVE_BUFFER } from '../constants';
2
2
  import { PlaitPointerType, PlaitBoard, PlaitPluginKey } from '../interfaces';
3
- import { BoardTransforms } from '../transforms';
4
3
  import { distanceBetweenPointAndPoint, isHitElement, isMovingElements, isSelectionMoving, toHostPoint, toViewBoxPoint } from '../utils';
5
- import { isMainPointer } from '../utils/dom/common';
4
+ import { isMainPointer, isWheelPointer } from '../utils/dom/common';
6
5
  import { isSmartHand } from '../utils/mobile';
7
6
  import { updateViewportContainerScroll } from '../utils/viewport';
7
+ const ShortcutKey = 'Space';
8
8
  export function withHandPointer(board) {
9
9
  const { pointerDown, pointerMove, globalPointerUp, keyDown, keyUp, pointerUp } = board;
10
- let isMoving = false;
10
+ let isHandMoving = false;
11
11
  let movingPoint = null;
12
12
  let pointerDownEvent = null;
13
+ let hasWheelPressed = false;
14
+ let beingPressedShortcutKey = false;
13
15
  board.pointerDown = (event) => {
14
16
  const options = board.getPluginOptions(PlaitPluginKey.withHand);
15
17
  const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
16
18
  const isHitTarget = isHitElement(board, point);
17
- if ((options?.isHandMode(board, event) || (isSmartHand(board, event) && !isHitTarget)) && isMainPointer(event)) {
19
+ const canEnterHandMode = options?.isHandMode(board, event) ||
20
+ PlaitBoard.isPointer(board, PlaitPointerType.hand) ||
21
+ (isSmartHand(board, event) && !isHitTarget) ||
22
+ beingPressedShortcutKey;
23
+ if (canEnterHandMode && isMainPointer(event)) {
18
24
  movingPoint = {
19
25
  x: event.x,
20
26
  y: event.y
21
27
  };
28
+ if (!PlaitBoard.isPointer(board, PlaitPointerType.hand)) {
29
+ PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');
30
+ }
31
+ }
32
+ else if (isWheelPointer(event)) {
33
+ hasWheelPressed = true;
34
+ // Prevent the browser's default behavior of scrolling the page when the mouse wheel is pressed.
35
+ event.preventDefault();
36
+ movingPoint = {
37
+ x: event.x,
38
+ y: event.y
39
+ };
40
+ isHandMoving = true;
41
+ PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');
22
42
  }
23
43
  pointerDownEvent = event;
24
44
  pointerDown(event);
@@ -33,19 +53,20 @@ export function withHandPointer(board) {
33
53
  // withHand behavior is only triggered if drag selection state is not initiated.
34
54
  const triggerDistance = DRAG_SELECTION_PRESS_AND_MOVE_BUFFER + 4;
35
55
  if (movingPoint &&
36
- !isMoving &&
56
+ !isHandMoving &&
37
57
  !isSelectionMoving(board) &&
38
58
  pointerDownEvent &&
39
59
  distanceBetweenPointAndPoint(pointerDownEvent.x, pointerDownEvent.y, event.x, event.y) > triggerDistance &&
40
60
  !isMovingElements(board)) {
41
- isMoving = true;
61
+ isHandMoving = true;
42
62
  PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');
43
63
  }
44
- if ((options?.isHandMode(board, event) || isSmartHand(board, event)) &&
45
- isMoving &&
46
- movingPoint &&
47
- !isSelectionMoving(board) &&
48
- !isMovingElements(board)) {
64
+ const canEnterHandMode = options?.isHandMode(board, event) ||
65
+ PlaitBoard.isPointer(board, PlaitPointerType.hand) ||
66
+ isSmartHand(board, event) ||
67
+ hasWheelPressed ||
68
+ beingPressedShortcutKey;
69
+ if (canEnterHandMode && isHandMoving && movingPoint && !isSelectionMoving(board) && !isMovingElements(board)) {
49
70
  const viewportContainer = PlaitBoard.getViewportContainer(board);
50
71
  const left = viewportContainer.scrollLeft - (event.x - movingPoint.x);
51
72
  const top = viewportContainer.scrollTop - (event.y - movingPoint.y);
@@ -56,7 +77,7 @@ export function withHandPointer(board) {
56
77
  pointerMove(event);
57
78
  };
58
79
  board.pointerUp = (event) => {
59
- if (isMoving) {
80
+ if (isHandMoving) {
60
81
  return;
61
82
  }
62
83
  pointerUp(event);
@@ -65,27 +86,28 @@ export function withHandPointer(board) {
65
86
  if (movingPoint) {
66
87
  movingPoint = null;
67
88
  }
68
- if (isMoving) {
69
- isMoving = false;
70
- PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');
71
- }
89
+ isHandMoving = false;
90
+ PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');
91
+ hasWheelPressed = false;
72
92
  globalPointerUp(event);
73
93
  };
74
94
  board.keyDown = (event) => {
75
- if (event.code === 'Space') {
95
+ if (event.code === ShortcutKey) {
76
96
  if (!PlaitBoard.isPointer(board, PlaitPointerType.hand)) {
77
- BoardTransforms.updatePointerType(board, PlaitPointerType.hand);
97
+ beingPressedShortcutKey = true;
98
+ PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');
78
99
  }
79
100
  event.preventDefault();
80
101
  }
81
102
  keyDown(event);
82
103
  };
83
104
  board.keyUp = (event) => {
84
- if (!board.options.readonly && event.code === 'Space') {
85
- BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
105
+ if (!board.options.readonly && event.code === ShortcutKey) {
106
+ beingPressedShortcutKey = true;
107
+ PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');
86
108
  }
87
109
  keyUp(event);
88
110
  };
89
111
  return board;
90
112
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1oYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy93aXRoLWhhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQXlDLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2xFLE1BQU0sVUFBVSxlQUFlLENBQXVCLEtBQVE7SUFDMUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3ZGLElBQUksUUFBUSxHQUFZLEtBQUssQ0FBQztJQUM5QixJQUFJLFdBQVcsR0FBMEIsSUFBSSxDQUFDO0lBQzlDLElBQUksZ0JBQWdCLEdBQXdCLElBQUksQ0FBQztJQUVqRCxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sT0FBTyxHQUFJLEtBQXNDLENBQUMsZ0JBQWdCLENBQXdCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6SCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FB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LE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEUkFHX1NFTEVDVElPTl9QUkVTU19BTkRfTU9WRV9CVUZGRVIgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRQb2ludGVyVHlwZSwgUGxhaXRCb2FyZCwgUGxhaXRCb2FyZE1vdmUsIFdpdGhIYW5kUGx1Z2luT3B0aW9ucywgUGxhaXRQbHVnaW5LZXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJvYXJkVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCwgaXNIaXRFbGVtZW50LCBpc01vdmluZ0VsZW1lbnRzLCBpc1NlbGVjdGlvbk1vdmluZywgdG9Ib3N0UG9pbnQsIHRvVmlld0JveFBvaW50IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgaXNNYWluUG9pbnRlciB9IGZyb20gJy4uL3V0aWxzL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgaXNTbWFydEhhbmQgfSBmcm9tICcuLi91dGlscy9tb2JpbGUnO1xuaW1wb3J0IHsgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwgfSBmcm9tICcuLi91dGlscy92aWV3cG9ydCc7XG5pbXBvcnQgeyBQbGFpdE9wdGlvbnNCb2FyZCB9IGZyb20gJy4vd2l0aC1vcHRpb25zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIYW5kUG9pbnRlcjxUIGV4dGVuZHMgUGxhaXRCb2FyZD4oYm9hcmQ6IFQpIHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwLCBrZXlEb3duLCBrZXlVcCwgcG9pbnRlclVwIH0gPSBib2FyZDtcbiAgICBsZXQgaXNNb3Zpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgbW92aW5nUG9pbnQ6IFBsYWl0Qm9hcmRNb3ZlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHBvaW50ZXJEb3duRXZlbnQ6IFBvaW50ZXJFdmVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgYm9hcmQucG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gKGJvYXJkIGFzIHVua25vd24gYXMgUGxhaXRPcHRpb25zQm9hcmQpLmdldFBsdWdpbk9wdGlvbnM8V2l0aEhhbmRQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoSGFuZCk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgIGNvbnN0IGlzSGl0VGFyZ2V0ID0gaXNIaXRFbGVtZW50KGJvYXJkLCBwb2ludCk7XG4gICAgICAgIGlmICgob3B0aW9ucz8uaXNIYW5kTW9kZShib2FyZCwgZXZlbnQpIHx8IChpc1NtYXJ0SGFuZChib2FyZCwgZXZlbnQpICYmICFpc0hpdFRhcmdldCkpICYmIGlzTWFpblBvaW50ZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBtb3ZpbmdQb2ludCA9IHtcbiAgICAgICAgICAgICAgICB4OiBldmVudC54LFxuICAgICAgICAgICAgICAgIHk6IGV2ZW50LnlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd25FdmVudCA9IGV2ZW50O1xuICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChib2FyZCBhcyB1bmtub3duIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5nZXRQbHVnaW5PcHRpb25zPFdpdGhIYW5kUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aEhhbmQpO1xuICAgICAgICAvLyDpmIjlgLzlv4XpobvlpKfkuo4gd2l0aFNlbGVjdGlvbiDkuK0gcG9pbnRlck1vdmUg55qEIFBSRVNTX0FORF9NT1ZFX0JVRkZFUu+8mlxuICAgICAgICAvLyAxLiDpppblhYjmo4DmtYvmmK/lkKbmu6HotrPov5vlhaXmi5bpgInnirbmgIHnmoTmnaHku7ZcbiAgICAgICAgLy8gMi4g5LuF5b2T5LiN5ruh6Laz5ouW6YCJ5p2h5Lu25pe277yM5omN5Lya6ICD6JmR6Kem5Y+RIHdpdGhIYW5kIOihjOS4ulxuICAgICAgICAvLyBNdXN0IGV4Y2VlZCB0aGUgRFJBR19TRUxFQ1RJT05fUFJFU1NfQU5EX01PVkVfQlVGRkVSIHRocmVzaG9sZCBkZWZpbmVkIGluIHdpdGhTZWxlY3Rpb24ncyBwb2ludGVyTW92ZS5cbiAgICAgICAgLy8gVGhlIHN5c3RlbSBmaXJzdCBjaGVja3MgZm9yIGRyYWcgc2VsZWN0aW9uIHN0YXRlIGVsaWdpYmlsaXR5XG4gICAgICAgIC8vIHdpdGhIYW5kIGJlaGF2aW9yIGlzIG9ubHkgdHJpZ2dlcmVkIGlmIGRyYWcgc2VsZWN0aW9uIHN0YXRlIGlzIG5vdCBpbml0aWF0ZWQuXG4gICAgICAgIGNvbnN0IHRyaWdnZXJEaXN0YW5jZSA9IERSQUdfU0VMRUNUSU9OX1BSRVNTX0FORF9NT1ZFX0JVRkZFUiArIDQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1vdmluZ1BvaW50ICYmXG4gICAgICAgICAgICAhaXNNb3ZpbmcgJiZcbiAgICAgICAgICAgICFpc1NlbGVjdGlvbk1vdmluZyhib2FyZCkgJiZcbiAgICAgICAgICAgIHBvaW50ZXJEb3duRXZlbnQgJiZcbiAgICAgICAgICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRlckRvd25FdmVudC54LCBwb2ludGVyRG93bkV2ZW50LnksIGV2ZW50LngsIGV2ZW50LnkpID4gdHJpZ2dlckRpc3RhbmNlICYmXG4gICAgICAgICAgICAhaXNNb3ZpbmdFbGVtZW50cyhib2FyZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpc01vdmluZyA9IHRydWU7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCd2aWV3cG9ydC1tb3ZpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAob3B0aW9ucz8uaXNIYW5kTW9kZShib2FyZCwgZXZlbnQpIHx8IGlzU21hcnRIYW5kKGJvYXJkLCBldmVudCkpICYmXG4gICAgICAgICAgICBpc01vdmluZyAmJlxuICAgICAgICAgICAgbW92aW5nUG9pbnQgJiZcbiAgICAgICAgICAgICFpc1NlbGVjdGlvbk1vdmluZyhib2FyZCkgJiZcbiAgICAgICAgICAgICFpc01vdmluZ0VsZW1lbnRzKGJvYXJkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAtIChldmVudC54IC0gbW92aW5nUG9pbnQueCk7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgLSAoZXZlbnQueSAtIG1vdmluZ1BvaW50LnkpO1xuICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQsIGxlZnQsIHRvcCwgZmFsc2UpO1xuICAgICAgICAgICAgbW92aW5nUG9pbnQueCA9IGV2ZW50Lng7XG4gICAgICAgICAgICBtb3ZpbmdQb2ludC55ID0gZXZlbnQueTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChpc01vdmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbFBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChtb3ZpbmdQb2ludCkge1xuICAgICAgICAgICAgbW92aW5nUG9pbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc01vdmluZykge1xuICAgICAgICAgICAgaXNNb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoJ3ZpZXdwb3J0LW1vdmluZycpO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScpIHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1BvaW50ZXIoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuaGFuZCkpIHtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuaGFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5rZXlVcCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIWJvYXJkLm9wdGlvbnMucmVhZG9ubHkgJiYgZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1oYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy93aXRoLWhhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQXlDLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEksT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBRTVCLE1BQU0sVUFBVSxlQUFlLENBQXVCLEtBQVE7SUFDMUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3ZGLElBQUksWUFBWSxHQUFZLEtBQUssQ0FBQztJQUNsQyxJQUFJLFdBQVcsR0FBMEIsSUFBSSxDQUFDO0lBQzlDLElBQUksZ0JBQWdCLEdBQXdCLElBQUksQ0FBQztJQUNqRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDNUIsSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFFcEMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN4QyxNQUFNLE9BQU8sR0FBSSxLQUFzQyxDQUFDLGdCQUFnQixDQUF3QixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekgsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxNQUFNLGdCQUFnQixHQUNsQixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDakMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ2xELENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMzQyx1QkFBdUIsQ0FBQztRQUM1QixJQUFJLGdCQUFnQixJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLFdBQVcsR0FBRztnQkFDVixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ1YsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLGdHQUFnRztZQUNoRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsV0FBVyxHQUFHO2dCQUNWLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDVixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDYixDQUFDO1lBQ0YsWUFBWSxHQUFHLElBQUksQ0FBQztZQUNwQixVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsTUFBTSxPQUFPLEdBQUksS0FBc0MsQ0FBQyxnQkFBZ0IsQ0FBd0IsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pILDhEQUE4RDtRQUM5RCx1QkFBdUI7UUFDdkIsbUNBQW1DO1FBQ25DLHlHQUF5RztRQUN6RywrREFBK0Q7UUFDL0QsZ0ZBQWdGO1FBQ2hGLE1BQU0sZUFBZSxHQUFHLG9DQUFvQyxHQUFHLENBQUMsQ0FBQztRQUNqRSxJQUNJLFdBQVc7WUFDWCxDQUFDLFlBQVk7WUFDYixDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUN6QixnQkFBZ0I7WUFDaEIsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO1lBQ3hHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQzFCLENBQUM7WUFDQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQ2xCLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUNqQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDbEQsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDekIsZUFBZTtZQUNmLHVCQUF1QixDQUFDO1FBQzVCLElBQUksZ0JBQWdCLElBQUksWUFBWSxJQUFJLFdBQVcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RSxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxXQUFXLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEIsV0FBVyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN0QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNYLENBQUM7UUFDRCxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUM1QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hFLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0RCx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekUsQ0FBQztZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDeEQsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRFJBR19TRUxFQ1RJT05fUFJFU1NfQU5EX01PVkVfQlVGRkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0UG9pbnRlclR5cGUsIFBsYWl0Qm9hcmQsIFBsYWl0Qm9hcmRNb3ZlLCBXaXRoSGFuZFBsdWdpbk9wdGlvbnMsIFBsYWl0UGx1Z2luS2V5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LCBpc0hpdEVsZW1lbnQsIGlzTW92aW5nRWxlbWVudHMsIGlzU2VsZWN0aW9uTW92aW5nLCB0b0hvc3RQb2ludCwgdG9WaWV3Qm94UG9pbnQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBpc01haW5Qb2ludGVyLCBpc1doZWVsUG9pbnRlciB9IGZyb20gJy4uL3V0aWxzL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgaXNTbWFydEhhbmQgfSBmcm9tICcuLi91dGlscy9tb2JpbGUnO1xuaW1wb3J0IHsgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwgfSBmcm9tICcuLi91dGlscy92aWV3cG9ydCc7XG5pbXBvcnQgeyBQbGFpdE9wdGlvbnNCb2FyZCB9IGZyb20gJy4vd2l0aC1vcHRpb25zJztcblxuY29uc3QgU2hvcnRjdXRLZXkgPSAnU3BhY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEhhbmRQb2ludGVyPFQgZXh0ZW5kcyBQbGFpdEJvYXJkPihib2FyZDogVCkge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAsIGtleURvd24sIGtleVVwLCBwb2ludGVyVXAgfSA9IGJvYXJkO1xuICAgIGxldCBpc0hhbmRNb3Zpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgbW92aW5nUG9pbnQ6IFBsYWl0Qm9hcmRNb3ZlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHBvaW50ZXJEb3duRXZlbnQ6IFBvaW50ZXJFdmVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNXaGVlbFByZXNzZWQgPSBmYWxzZTtcbiAgICBsZXQgYmVpbmdQcmVzc2VkU2hvcnRjdXRLZXkgPSBmYWxzZTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChib2FyZCBhcyB1bmtub3duIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5nZXRQbHVnaW5PcHRpb25zPFdpdGhIYW5kUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aEhhbmQpO1xuICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBjb25zdCBpc0hpdFRhcmdldCA9IGlzSGl0RWxlbWVudChib2FyZCwgcG9pbnQpO1xuICAgICAgICBjb25zdCBjYW5FbnRlckhhbmRNb2RlID1cbiAgICAgICAgICAgIG9wdGlvbnM/LmlzSGFuZE1vZGUoYm9hcmQsIGV2ZW50KSB8fFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5pc1BvaW50ZXIoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuaGFuZCkgfHxcbiAgICAgICAgICAgIChpc1NtYXJ0SGFuZChib2FyZCwgZXZlbnQpICYmICFpc0hpdFRhcmdldCkgfHxcbiAgICAgICAgICAgIGJlaW5nUHJlc3NlZFNob3J0Y3V0S2V5O1xuICAgICAgICBpZiAoY2FuRW50ZXJIYW5kTW9kZSAmJiBpc01haW5Qb2ludGVyKGV2ZW50KSkge1xuICAgICAgICAgICAgbW92aW5nUG9pbnQgPSB7XG4gICAgICAgICAgICAgICAgeDogZXZlbnQueCxcbiAgICAgICAgICAgICAgICB5OiBldmVudC55XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUG9pbnRlcihib2FyZCwgUGxhaXRQb2ludGVyVHlwZS5oYW5kKSkge1xuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoJ3ZpZXdwb3J0LW1vdmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzV2hlZWxQb2ludGVyKGV2ZW50KSkge1xuICAgICAgICAgICAgaGFzV2hlZWxQcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGUgcGFnZSB3aGVuIHRoZSBtb3VzZSB3aGVlbCBpcyBwcmVzc2VkLlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIG1vdmluZ1BvaW50ID0ge1xuICAgICAgICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlzSGFuZE1vdmluZyA9IHRydWU7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCd2aWV3cG9ydC1tb3ZpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyRG93bkV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gKGJvYXJkIGFzIHVua25vd24gYXMgUGxhaXRPcHRpb25zQm9hcmQpLmdldFBsdWdpbk9wdGlvbnM8V2l0aEhhbmRQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoSGFuZCk7XG4gICAgICAgIC8vIOmYiOWAvOW/hemhu+Wkp+S6jiB3aXRoU2VsZWN0aW9uIOS4rSBwb2ludGVyTW92ZSDnmoQgUFJFU1NfQU5EX01PVkVfQlVGRkVS77yaXG4gICAgICAgIC8vIDEuIOmmluWFiOajgOa1i+aYr+WQpua7oei2s+i/m+WFpeaLlumAieeKtuaAgeeahOadoeS7tlxuICAgICAgICAvLyAyLiDku4XlvZPkuI3mu6HotrPmi5bpgInmnaHku7bml7bvvIzmiY3kvJrogIPomZHop6blj5Egd2l0aEhhbmQg6KGM5Li6XG4gICAgICAgIC8vIE11c3QgZXhjZWVkIHRoZSBEUkFHX1NFTEVDVElPTl9QUkVTU19BTkRfTU9WRV9CVUZGRVIgdGhyZXNob2xkIGRlZmluZWQgaW4gd2l0aFNlbGVjdGlvbidzIHBvaW50ZXJNb3ZlLlxuICAgICAgICAvLyBUaGUgc3lzdGVtIGZpcnN0IGNoZWNrcyBmb3IgZHJhZyBzZWxlY3Rpb24gc3RhdGUgZWxpZ2liaWxpdHlcbiAgICAgICAgLy8gd2l0aEhhbmQgYmVoYXZpb3IgaXMgb25seSB0cmlnZ2VyZWQgaWYgZHJhZyBzZWxlY3Rpb24gc3RhdGUgaXMgbm90IGluaXRpYXRlZC5cbiAgICAgICAgY29uc3QgdHJpZ2dlckRpc3RhbmNlID0gRFJBR19TRUxFQ1RJT05fUFJFU1NfQU5EX01PVkVfQlVGRkVSICsgNDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbW92aW5nUG9pbnQgJiZcbiAgICAgICAgICAgICFpc0hhbmRNb3ZpbmcgJiZcbiAgICAgICAgICAgICFpc1NlbGVjdGlvbk1vdmluZyhib2FyZCkgJiZcbiAgICAgICAgICAgIHBvaW50ZXJEb3duRXZlbnQgJiZcbiAgICAgICAgICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRlckRvd25FdmVudC54LCBwb2ludGVyRG93bkV2ZW50LnksIGV2ZW50LngsIGV2ZW50LnkpID4gdHJpZ2dlckRpc3RhbmNlICYmXG4gICAgICAgICAgICAhaXNNb3ZpbmdFbGVtZW50cyhib2FyZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpc0hhbmRNb3ZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgndmlld3BvcnQtbW92aW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FuRW50ZXJIYW5kTW9kZSA9XG4gICAgICAgICAgICBvcHRpb25zPy5pc0hhbmRNb2RlKGJvYXJkLCBldmVudCkgfHxcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLmhhbmQpIHx8XG4gICAgICAgICAgICBpc1NtYXJ0SGFuZChib2FyZCwgZXZlbnQpIHx8XG4gICAgICAgICAgICBoYXNXaGVlbFByZXNzZWQgfHxcbiAgICAgICAgICAgIGJlaW5nUHJlc3NlZFNob3J0Y3V0S2V5O1xuICAgICAgICBpZiAoY2FuRW50ZXJIYW5kTW9kZSAmJiBpc0hhbmRNb3ZpbmcgJiYgbW92aW5nUG9pbnQgJiYgIWlzU2VsZWN0aW9uTW92aW5nKGJvYXJkKSAmJiAhaXNNb3ZpbmdFbGVtZW50cyhib2FyZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAtIChldmVudC54IC0gbW92aW5nUG9pbnQueCk7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgLSAoZXZlbnQueSAtIG1vdmluZ1BvaW50LnkpO1xuICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQsIGxlZnQsIHRvcCwgZmFsc2UpO1xuICAgICAgICAgICAgbW92aW5nUG9pbnQueCA9IGV2ZW50Lng7XG4gICAgICAgICAgICBtb3ZpbmdQb2ludC55ID0gZXZlbnQueTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChpc0hhbmRNb3ZpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAobW92aW5nUG9pbnQpIHtcbiAgICAgICAgICAgIG1vdmluZ1BvaW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpc0hhbmRNb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgndmlld3BvcnQtbW92aW5nJyk7XG4gICAgICAgIGhhc1doZWVsUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5rZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSBTaG9ydGN1dEtleSkge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUG9pbnRlcihib2FyZCwgUGxhaXRQb2ludGVyVHlwZS5oYW5kKSkge1xuICAgICAgICAgICAgICAgIGJlaW5nUHJlc3NlZFNob3J0Y3V0S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCd2aWV3cG9ydC1tb3ZpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAga2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghYm9hcmQub3B0aW9ucy5yZWFkb25seSAmJiBldmVudC5jb2RlID09PSBTaG9ydGN1dEtleSkge1xuICAgICAgICAgICAgYmVpbmdQcmVzc2VkU2hvcnRjdXRLZXkgPSB0cnVlO1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgndmlld3BvcnQtbW92aW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG4iXX0=
@@ -33,7 +33,7 @@ export function withMoving(board) {
33
33
  event.preventDefault();
34
34
  if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
35
35
  pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);
36
- pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);
36
+ pendingNodesG && PlaitBoard.getElementTopHost(board).append(pendingNodesG);
37
37
  }
38
38
  }
39
39
  }
@@ -117,10 +117,10 @@ export function withMoving(board) {
117
117
  offsetY += ref.deltaY;
118
118
  snapG = ref.snapG;
119
119
  snapG.classList.add(ACTIVE_MOVING_CLASS_NAME);
120
- PlaitBoard.getElementActiveHost(board).append(snapG);
120
+ PlaitBoard.getElementTopHost(board).append(snapG);
121
121
  if (event.altKey) {
122
122
  pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);
123
- pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);
123
+ pendingNodesG && PlaitBoard.getElementTopHost(board).append(pendingNodesG);
124
124
  }
125
125
  else {
126
126
  const currentElements = updatePoints(board, activeElements, offsetX, offsetY);
@@ -279,4 +279,4 @@ export function drawPendingNodesG(board, activeElements, offsetX, offsetY) {
279
279
  });
280
280
  return pendingNodesG;
281
281
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1QixXQUFXLEVBQ1gsY0FBYyxFQUNkLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWlCO0lBQ3hDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXJHLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsSUFBSSxVQUF3QixDQUFDO0lBQzdCLElBQUksY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDeEMsSUFBSSxLQUFLLEdBQXVCLElBQUksQ0FBQztJQUNyQyxJQUFJLHVCQUF1QixHQUEyQixJQUFJLENBQUM7SUFDM0QsSUFBSSxzQkFBc0IsR0FBMEIsSUFBSSxDQUFDO0lBQ3pELElBQUksZ0JBQWdCLEdBQTZCLFNBQVMsQ0FBQztJQUMzRCxJQUFJLG1CQUFtQixHQUF3QixTQUFTLENBQUM7SUFDekQsSUFBSSxhQUFhLEdBQXVCLElBQUksQ0FBQztJQUU3QyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxVQUFVLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvRSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzNFLGFBQWEsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksYUFBYSxJQUFJLFVBQVUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RSxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNwRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsZUFBaUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDTCxDQUFDO1FBQ0QsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1FBQ3hDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEgsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRixzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxtQkFBbUIsR0FBRyxnQkFBZ0IsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RixJQUFJLGdCQUFnQixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDMUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixjQUFjLEdBQUcsc0JBQXNCLENBQUM7WUFDeEMsdUJBQXVCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRixDQUFDO2FBQU0sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDbkIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN6RSxjQUFjLEdBQUcsQ0FBQyxHQUFHLDJCQUEyQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUM7WUFDL0YsdUJBQXVCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRixDQUFDO2FBQU0sQ0FBQztZQUNKLHVDQUF1QztZQUN2QyxrS0FBa0s7WUFDbEssTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUgsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLElBQUksZUFBZSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RyxJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ25CLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztnQkFDeEMsdUJBQXVCLEdBQUcsZUFBZSxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsSUFBSSxVQUFVLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNwQixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQztZQUNELEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDeEIsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUMxRSxJQUFJLFFBQVEsR0FBRyxxQkFBcUIsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFFLElBQUksZ0JBQWdCLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxzQkFBc0IsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFHLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDN0MsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO29CQUM3QixzQkFBc0IsR0FBRyxJQUFJLENBQUM7b0JBQzlCLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUU7b0JBQ25DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO3dCQUMzQixPQUFPO29CQUNYLENBQUM7b0JBQ0QsTUFBTSxZQUFZLEdBQUc7d0JBQ2pCLEdBQUcsdUJBQXVCO3dCQUMxQixDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE9BQU87d0JBQ3RDLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsT0FBTztxQkFDekMsQ0FBQztvQkFDRixNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDN0YsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDckUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RCLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUN0QixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDbEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDOUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ2YsYUFBYSxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMzRSxhQUFhLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEYsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDOUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDcEUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGVBQWlDLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLHFFQUFxRTtZQUNyRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDOUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDTCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUM1QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM5RCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDN0Isc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsU0FBUyxVQUFVLENBQUMsS0FBaUI7UUFDakMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QixVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNaLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQixVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFpQjtJQUM3QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNqQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDWCxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztvQkFDcEIsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDbkIsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ3BCLE1BQU07Z0JBQ1YsQ0FBQztnQkFDRCxLQUFLLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxXQUFXLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtnQkFDekMsWUFBWSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQWlCO0lBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JELE9BQU8sZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7SUFDeEMsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLGNBQThCO0lBQzlFLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEksT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBaUIsRUFBRSxjQUE4QixFQUFFLE9BQWUsRUFBRSxPQUFlO0lBQzVHLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5RCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFZLENBQUM7UUFDL0UsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUF1QixDQUFXLENBQUM7UUFDbkUsVUFBVSxDQUFDLE9BQU8sQ0FDZCxLQUFLLEVBQ0w7WUFDSSxNQUFNLEVBQUUsU0FBUztTQUNwQixFQUNELENBQUMsS0FBSyxDQUFDLENBQ1YsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLGNBQThCLEVBQUUsT0FBZSxFQUFFLE9BQWU7SUFDakgsSUFBSSxhQUFhLEdBQXNCLElBQUksQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBbUIsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5RCxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzVCLG1CQUFtQixDQUNmLE9BQU8sRUFDUCxJQUFJLENBQUMsRUFBRTtZQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxFQUNELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FDYixDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsR0FBRztnQkFDUixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxPQUFPO2dCQUN4QixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxPQUFPO2dCQUN4QixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7Z0JBQ3RCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTthQUMzQixDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFVLEVBQUU7Z0JBQzdDLE1BQU0sRUFBRSxzQkFBc0I7Z0JBQzlCLFdBQVcsRUFBRSxDQUFDO2dCQUNkLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLFNBQVMsRUFBRSxPQUFPO2FBQ3JCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxLQUFLLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pGLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IGlzSW5QbGFpdEJvYXJkIH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgY3JlYXRlRywgaXNNYWluUG9pbnRlciB9IGZyb20gJy4uL3V0aWxzL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50JztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRIaXRFbGVtZW50QnlQb2ludCwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXROb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IHRocm90dGxlUkFGIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IGNhY2hlTW92aW5nRWxlbWVudHMsIGdldE1vdmluZ0VsZW1lbnRzLCBpc01vdmluZ0VsZW1lbnRzLCByZW1vdmVNb3ZpbmdFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL21vdmluZy1lbGVtZW50JztcbmltcG9ydCB7IE1FUkdJTkcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2hpc3RvcnknO1xuaW1wb3J0IHtcbiAgICBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgdG9Ib3N0UG9pbnQsXG4gICAgdG9WaWV3Qm94UG9pbnQsXG4gICAgaG90a2V5cyxcbiAgICBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQsXG4gICAgZ2V0UmVjdGFuZ2xlQnlBbmdsZSxcbiAgICBnZXRTZWxlY3Rpb25BbmdsZSxcbiAgICBkdXBsaWNhdGVFbGVtZW50cyxcbiAgICBkcmF3UmVjdGFuZ2xlLFxuICAgIGRlcHRoRmlyc3RSZWN1cnNpb24sXG4gICAgZ2V0QW5nbGVCeUVsZW1lbnQsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIE5PREVfVE9fSU5ERVhcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0U25hcE1vdmluZ1JlZiB9IGZyb20gJy4uL3V0aWxzL3NuYXAvc25hcC1tb3ZpbmcnO1xuaW1wb3J0IHsgUGxhaXRHcm91cEVsZW1lbnQsIFBsYWl0UG9pbnRlclR5cGUsIFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiwgU0VMRUNUSU9OX0ZJTExfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFDVElWRV9NT1ZJTkdfQ0xBU1NfTkFNRSwgUFJFU1NfQU5EX01PVkVfQlVGRkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyB9IGZyb20gJy4uL3RyYW5zZm9ybXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb3ZpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwLCBnbG9iYWxQb2ludGVyTW92ZSwgZ2xvYmFsS2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBsZXQgaXNQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgIGxldCBzdGFydFBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGFjdGl2ZUVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzZWxlY3RlZFRhcmdldEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoaXRUYXJnZXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlzSGl0U2VsZWN0ZWRUYXJnZXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHBlbmRpbmdOb2Rlc0c6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBib2FyZC5nbG9iYWxLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdvcHRpb24nLCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgPSBkcmF3UGVuZGluZ05vZGVzRyhib2FyZCwgYWN0aXZlRWxlbWVudHMsIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHICYmIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChwZW5kaW5nTm9kZXNHKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdOb2Rlc0cgJiYgc3RhcnRQb2ludCAmJiBhY3RpdmVFbGVtZW50cy5sZW5ndGggJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICAgICAgICAgICAgICBjYWNoZU1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICBrZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgfHwgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbikgfHwgIWlzTWFpblBvaW50ZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCwgZWwgPT4gYm9hcmQuaXNNb3ZhYmxlKGVsKSk7XG4gICAgICAgIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgPSBnZXRTZWxlY3RlZFRhcmdldEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IGhpdFRhcmdldEVsZW1lbnQgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5pbmNsdWRlcyhoaXRUYXJnZXRFbGVtZW50KTtcbiAgICAgICAgaWYgKGhpdFRhcmdldEVsZW1lbnQgJiYgaXNIaXRTZWxlY3RlZFRhcmdldCkge1xuICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBzZWxlY3RlZFRhcmdldEVsZW1lbnRzO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0VGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdLCBbaGl0VGFyZ2V0RWxlbWVudF0pO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbLi4uZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50KGJvYXJkLCBoaXRUYXJnZXRFbGVtZW50KSwgLi4ucmVsYXRlZEVsZW1lbnRzXTtcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5Y+q5pyJ5Yik5a6a55So5oi35pyq5Ye75Lit5YWD57Sg5LmL5ZCO5omN5Y+v5Lul6aqM6K+B55So5oi35piv5ZCm5Ye75Lit5LqG5bey6YCJ5YWD57Sg5omA5Zyo55qE56m655m95Yy65Z+fXG4gICAgICAgICAgICAvLyBPbmx5IGFmdGVyIGl0IGlzIGRldGVybWluZWQgdGhhdCB0aGUgdXNlciBoYXMgbm90IGhpdCB0aGUgZWxlbWVudCBjYW4gaXQgYmUgdmVyaWZpZWQgd2hldGhlciB0aGUgdXNlciBoaXQgdGhlIGJsYW5rIGFyZWEgd2hlcmUgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgbG9jYXRlZC5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMubGVuZ3RoID4gMCAmJiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZFRhcmdldEVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdEluVGFyZ2V0UmVjdGFuZ2xlID0gdGFyZ2V0UmVjdGFuZ2xlICYmIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0UmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRJblRhcmdldFJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF07XG4gICAgICAgICAgICBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZFBvaW50LCAuLi5zdGFydFBvaW50KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUiB8fCBnZXRNb3ZpbmdFbGVtZW50cyhib2FyZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRFbGVtZW50ICYmICFpc0hpdFNlbGVjdGVkVGFyZ2V0ICYmIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgW10pO1xuICAgICAgICAgICAgICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhcmdldEVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUueCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZS55ICsgb2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUFuZ2xlKG5ld1JlY3RhbmdsZSwgZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gZ2V0U25hcE1vdmluZ1JlZihib2FyZCwgYWN0aXZlUmVjdGFuZ2xlLCBhY3RpdmVFbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFggKz0gcmVmLmRlbHRhWDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSArPSByZWYuZGVsdGFZO1xuICAgICAgICAgICAgICAgICAgICBzbmFwRyA9IHJlZi5zbmFwRztcbiAgICAgICAgICAgICAgICAgICAgc25hcEcuY2xhc3NMaXN0LmFkZChBQ1RJVkVfTU9WSU5HX0NMQVNTX05BTUUpO1xuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoc25hcEcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gZHJhd1BlbmRpbmdOb2Rlc0coYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdlbGVtZW50LW1vdmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNb3ZpbmdFbGVtZW50cyhib2FyZCwgY3VycmVudEVsZW1lbnRzIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGNhbnZhcyBzY3JvbGxpbmcgYmVoYXZpb3IgZnJvbSBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nIG1vdmVcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgdmFsaWRFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgZHVwbGljYXRlRWxlbWVudHMoYm9hcmQsIHZhbGlkRWxlbWVudHMsIFtyZWN0YW5nbGUueCArIG9mZnNldFgsIHJlY3RhbmdsZS55ICsgb2Zmc2V0WV0pO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IG51bGw7XG4gICAgICAgIGlzSGl0U2VsZWN0ZWRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjYW5jZWxNb3ZlKGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxNb3ZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgcGVuZGluZ05vZGVzRz8ucmVtb3ZlKCk7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGlzTW92aW5nRWxlbWVudHMoYm9hcmQpKSB7XG4gICAgICAgICAgICByZW1vdmVNb3ZpbmdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEFycm93TW92aW5nKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBcnJvd01vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIChob3RrZXlzLmlzQXJyb3coZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRBcnJvdyhldmVudCkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTaGlmdCA9IGV2ZW50LnNoaWZ0S2V5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gaXNTaGlmdCA/IDEwIDogMTtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVVcChldmVudCkgfHwgaG90a2V5cy5pc0V4dGVuZFVwKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSAtYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmREb3duKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRCYWNrd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gLWJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRXh0ZW5kRm9yd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLWFycm93LW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2ludHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBvZmZzZXRbMF0sIG9mZnNldFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUYXJnZXRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdKTtcbiAgICB0YXJnZXRFbGVtZW50cy5wdXNoKC4uLnJlbGF0ZWRFbGVtZW50cyk7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IFsuLi5hY3RpdmVFbGVtZW50c10uZmlsdGVyKGVsZW1lbnQgPT4gIVBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoZWxlbWVudCkgJiYgUGxhaXRFbGVtZW50LmlzUm9vdEVsZW1lbnQoZWxlbWVudCkpO1xuICAgIHJldHVybiB2YWxpZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB2YWxpZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBOT0RFX1RPX0lOREVYLmdldChlbGVtZW50IGFzIFBsYWl0RWxlbWVudCkgYXMgbnVtYmVyO1xuICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoXG4gICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb2ludHM6IG5ld1BvaW50c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtpbmRleF1cbiAgICAgICAgKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHRydWUpO1xuICAgICAgICByZXR1cm4gUGxhaXROb2RlLmdldChib2FyZCwgW2luZGV4XSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdQZW5kaW5nTm9kZXNHKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgbGV0IHBlbmRpbmdOb2Rlc0c6IFNWR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBlbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgIHZhbGlkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHRydWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGl0ZW0pO1xuICAgICAgICBpZiAocmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICByZWN0YW5nbGUgPSB7XG4gICAgICAgICAgICAgICAgeDogcmVjdGFuZ2xlLnggKyBvZmZzZXRYLFxuICAgICAgICAgICAgICAgIHk6IHJlY3RhbmdsZS55ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgICAgICB3aWR0aDogcmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG1vdmluZ0cgPSBkcmF3UmVjdGFuZ2xlKGJvYXJkLCByZWN0YW5nbGUhLCB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgICAgICAgIGZpbGw6IFNFTEVDVElPTl9GSUxMX0NPTE9SLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXBlbmRpbmdOb2Rlc0cpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cuY2xhc3NMaXN0LmFkZChBQ1RJVkVfTU9WSU5HX0NMQVNTX05BTUUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBnZXRBbmdsZUJ5RWxlbWVudChpdGVtKTtcbiAgICAgICAgICAgIGFuZ2xlICYmIHNldEFuZ2xlRm9yRyhtb3ZpbmdHLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKSwgYW5nbGUpO1xuICAgICAgICAgICAgcGVuZGluZ05vZGVzRy5hcHBlbmQobW92aW5nRyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGVuZGluZ05vZGVzRztcbn1cbiJdfQ==
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1QixXQUFXLEVBQ1gsY0FBYyxFQUNkLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFF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LENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IGlzSW5QbGFpdEJvYXJkIH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgY3JlYXRlRywgaXNNYWluUG9pbnRlciB9IGZyb20gJy4uL3V0aWxzL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50JztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRIaXRFbGVtZW50QnlQb2ludCwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXROb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IHRocm90dGxlUkFGIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IGNhY2hlTW92aW5nRWxlbWVudHMsIGdldE1vdmluZ0VsZW1lbnRzLCBpc01vdmluZ0VsZW1lbnRzLCByZW1vdmVNb3ZpbmdFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL21vdmluZy1lbGVtZW50JztcbmltcG9ydCB7IE1FUkdJTkcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2hpc3RvcnknO1xuaW1wb3J0IHtcbiAgICBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgdG9Ib3N0UG9pbnQsXG4gICAgdG9WaWV3Qm94UG9pbnQsXG4gICAgaG90a2V5cyxcbiAgICBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQsXG4gICAgZ2V0UmVjdGFuZ2xlQnlBbmdsZSxcbiAgICBnZXRTZWxlY3Rpb25BbmdsZSxcbiAgICBkdXBsaWNhdGVFbGVtZW50cyxcbiAgICBkcmF3UmVjdGFuZ2xlLFxuICAgIGRlcHRoRmlyc3RSZWN1cnNpb24sXG4gICAgZ2V0QW5nbGVCeUVsZW1lbnQsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIE5PREVfVE9fSU5ERVhcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0U25hcE1vdmluZ1JlZiB9IGZyb20gJy4uL3V0aWxzL3NuYXAvc25hcC1tb3ZpbmcnO1xuaW1wb3J0IHsgUGxhaXRHcm91cEVsZW1lbnQsIFBsYWl0UG9pbnRlclR5cGUsIFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiwgU0VMRUNUSU9OX0ZJTExfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFDVElWRV9NT1ZJTkdfQ0xBU1NfTkFNRSwgUFJFU1NfQU5EX01PVkVfQlVGRkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyB9IGZyb20gJy4uL3RyYW5zZm9ybXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb3ZpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwLCBnbG9iYWxQb2ludGVyTW92ZSwgZ2xvYmFsS2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBsZXQgaXNQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgIGxldCBzdGFydFBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGFjdGl2ZUVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzZWxlY3RlZFRhcmdldEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoaXRUYXJnZXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlzSGl0U2VsZWN0ZWRUYXJnZXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHBlbmRpbmdOb2Rlc0c6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBib2FyZC5nbG9iYWxLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdvcHRpb24nLCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgPSBkcmF3UGVuZGluZ05vZGVzRyhib2FyZCwgYWN0aXZlRWxlbWVudHMsIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHICYmIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudFRvcEhvc3QoYm9hcmQpLmFwcGVuZChwZW5kaW5nTm9kZXNHKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdOb2Rlc0cgJiYgc3RhcnRQb2ludCAmJiBhY3RpdmVFbGVtZW50cy5sZW5ndGggJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICAgICAgICAgICAgICBjYWNoZU1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICBrZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgfHwgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbikgfHwgIWlzTWFpblBvaW50ZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCwgZWwgPT4gYm9hcmQuaXNNb3ZhYmxlKGVsKSk7XG4gICAgICAgIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgPSBnZXRTZWxlY3RlZFRhcmdldEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IGhpdFRhcmdldEVsZW1lbnQgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5pbmNsdWRlcyhoaXRUYXJnZXRFbGVtZW50KTtcbiAgICAgICAgaWYgKGhpdFRhcmdldEVsZW1lbnQgJiYgaXNIaXRTZWxlY3RlZFRhcmdldCkge1xuICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBzZWxlY3RlZFRhcmdldEVsZW1lbnRzO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0VGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdLCBbaGl0VGFyZ2V0RWxlbWVudF0pO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbLi4uZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50KGJvYXJkLCBoaXRUYXJnZXRFbGVtZW50KSwgLi4ucmVsYXRlZEVsZW1lbnRzXTtcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5Y+q5pyJ5Yik5a6a55So5oi35pyq5Ye75Lit5YWD57Sg5LmL5ZCO5omN5Y+v5Lul6aqM6K+B55So5oi35piv5ZCm5Ye75Lit5LqG5bey6YCJ5YWD57Sg5omA5Zyo55qE56m655m95Yy65Z+fXG4gICAgICAgICAgICAvLyBPbmx5IGFmdGVyIGl0IGlzIGRldGVybWluZWQgdGhhdCB0aGUgdXNlciBoYXMgbm90IGhpdCB0aGUgZWxlbWVudCBjYW4gaXQgYmUgdmVyaWZpZWQgd2hldGhlciB0aGUgdXNlciBoaXQgdGhlIGJsYW5rIGFyZWEgd2hlcmUgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgbG9jYXRlZC5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMubGVuZ3RoID4gMCAmJiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZFRhcmdldEVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdEluVGFyZ2V0UmVjdGFuZ2xlID0gdGFyZ2V0UmVjdGFuZ2xlICYmIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0UmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRJblRhcmdldFJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF07XG4gICAgICAgICAgICBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZFBvaW50LCAuLi5zdGFydFBvaW50KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUiB8fCBnZXRNb3ZpbmdFbGVtZW50cyhib2FyZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRFbGVtZW50ICYmICFpc0hpdFNlbGVjdGVkVGFyZ2V0ICYmIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgW10pO1xuICAgICAgICAgICAgICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhcmdldEVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUueCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZS55ICsgb2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUFuZ2xlKG5ld1JlY3RhbmdsZSwgZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gZ2V0U25hcE1vdmluZ1JlZihib2FyZCwgYWN0aXZlUmVjdGFuZ2xlLCBhY3RpdmVFbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFggKz0gcmVmLmRlbHRhWDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSArPSByZWYuZGVsdGFZO1xuICAgICAgICAgICAgICAgICAgICBzbmFwRyA9IHJlZi5zbmFwRztcbiAgICAgICAgICAgICAgICAgICAgc25hcEcuY2xhc3NMaXN0LmFkZChBQ1RJVkVfTU9WSU5HX0NMQVNTX05BTUUpO1xuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRUb3BIb3N0KGJvYXJkKS5hcHBlbmQoc25hcEcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gZHJhd1BlbmRpbmdOb2Rlc0coYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50VG9wSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdlbGVtZW50LW1vdmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNb3ZpbmdFbGVtZW50cyhib2FyZCwgY3VycmVudEVsZW1lbnRzIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGNhbnZhcyBzY3JvbGxpbmcgYmVoYXZpb3IgZnJvbSBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nIG1vdmVcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgdmFsaWRFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgZHVwbGljYXRlRWxlbWVudHMoYm9hcmQsIHZhbGlkRWxlbWVudHMsIFtyZWN0YW5nbGUueCArIG9mZnNldFgsIHJlY3RhbmdsZS55ICsgb2Zmc2V0WV0pO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IG51bGw7XG4gICAgICAgIGlzSGl0U2VsZWN0ZWRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjYW5jZWxNb3ZlKGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxNb3ZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgcGVuZGluZ05vZGVzRz8ucmVtb3ZlKCk7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGlzTW92aW5nRWxlbWVudHMoYm9hcmQpKSB7XG4gICAgICAgICAgICByZW1vdmVNb3ZpbmdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEFycm93TW92aW5nKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBcnJvd01vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIChob3RrZXlzLmlzQXJyb3coZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRBcnJvdyhldmVudCkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTaGlmdCA9IGV2ZW50LnNoaWZ0S2V5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gaXNTaGlmdCA/IDEwIDogMTtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVVcChldmVudCkgfHwgaG90a2V5cy5pc0V4dGVuZFVwKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSAtYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmREb3duKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRCYWNrd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gLWJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRXh0ZW5kRm9yd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLWFycm93LW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2ludHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBvZmZzZXRbMF0sIG9mZnNldFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUYXJnZXRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdKTtcbiAgICB0YXJnZXRFbGVtZW50cy5wdXNoKC4uLnJlbGF0ZWRFbGVtZW50cyk7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IFsuLi5hY3RpdmVFbGVtZW50c10uZmlsdGVyKGVsZW1lbnQgPT4gIVBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoZWxlbWVudCkgJiYgUGxhaXRFbGVtZW50LmlzUm9vdEVsZW1lbnQoZWxlbWVudCkpO1xuICAgIHJldHVybiB2YWxpZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB2YWxpZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBOT0RFX1RPX0lOREVYLmdldChlbGVtZW50IGFzIFBsYWl0RWxlbWVudCkgYXMgbnVtYmVyO1xuICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoXG4gICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb2ludHM6IG5ld1BvaW50c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtpbmRleF1cbiAgICAgICAgKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHRydWUpO1xuICAgICAgICByZXR1cm4gUGxhaXROb2RlLmdldChib2FyZCwgW2luZGV4XSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdQZW5kaW5nTm9kZXNHKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgbGV0IHBlbmRpbmdOb2Rlc0c6IFNWR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBlbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgIHZhbGlkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHRydWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGl0ZW0pO1xuICAgICAgICBpZiAocmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICByZWN0YW5nbGUgPSB7XG4gICAgICAgICAgICAgICAgeDogcmVjdGFuZ2xlLnggKyBvZmZzZXRYLFxuICAgICAgICAgICAgICAgIHk6IHJlY3RhbmdsZS55ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgICAgICB3aWR0aDogcmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG1vdmluZ0cgPSBkcmF3UmVjdGFuZ2xlKGJvYXJkLCByZWN0YW5nbGUhLCB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgICAgICAgIGZpbGw6IFNFTEVDVElPTl9GSUxMX0NPTE9SLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXBlbmRpbmdOb2Rlc0cpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cuY2xhc3NMaXN0LmFkZChBQ1RJVkVfTU9WSU5HX0NMQVNTX05BTUUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBnZXRBbmdsZUJ5RWxlbWVudChpdGVtKTtcbiAgICAgICAgICAgIGFuZ2xlICYmIHNldEFuZ2xlRm9yRyhtb3ZpbmdHLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKSwgYW5nbGUpO1xuICAgICAgICAgICAgcGVuZGluZ05vZGVzRy5hcHBlbmQobW92aW5nRyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGVuZGluZ05vZGVzRztcbn1cbiJdfQ==