@worktile/theia 16.2.1 → 16.2.3

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.
@@ -131,6 +131,11 @@ export const TableEditor = {
131
131
  TheTransforms.setMarks(editor, unsetMarks, cellRange);
132
132
  });
133
133
  },
134
+ formatBrush(editor, marks) {
135
+ return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {
136
+ TheTransforms.setMarks(editor, marks, cellRange);
137
+ });
138
+ },
134
139
  handleSelectedCells(editor, handle) {
135
140
  const cells = TableEditor.getSelectedCells(editor);
136
141
  if (cells) {
@@ -206,4 +211,4 @@ export const TableEditor = {
206
211
  });
207
212
  }
208
213
  };
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFhLFVBQVUsRUFBRSxJQUFJLEVBQWUsSUFBSSxFQUFtQixNQUFNLE9BQU8sQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFhLGlCQUFpQixFQUFFLFlBQVksRUFBVyxTQUFTLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN2QixXQUFXLENBQUMsTUFBYyxFQUFFLFlBQTJCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENB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O1lBQ1IsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM5RjtJQUNMLENBQUM7SUFDRCxZQUFZLENBQUMsTUFBaUIsRUFBRSxVQUFtQjtRQUMvQyxPQUFPLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDbkUsTUFBTSxRQUFRLEdBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFtQixDQUFDLFFBQXFCLENBQUM7WUFFL0YsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNqQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBRSxFQUFFO29CQUMvQyxhQUFhLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgRWxlbWVudCwgTm9kZUVudHJ5LCBUcmFuc2Zvcm1zLCBUZXh0LCBQYXRoLCBSYW5nZSwgTm9kZSwgTG9jYXRpb24sIFBvaW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRUxFTUVOVF9UT19DT01QT05FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IFRhYmxlT3B0aW9ucyB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgQWxpZ25tZW50LCBBTElHTl9CTE9DS19UWVBFUywgRWxlbWVudEtpbmRzLCBJbmRlbnRzLCBNYXJrUHJvcHMsIE1hcmtUeXBlcywgVmVydGljYWxBbGlnbm1lbnQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgaW5zZXJ0VGFibGUsIGluc2VydENvbHVtbiwgaW5zZXJ0Um93LCByZW1vdmVDb2x1bW4sIHJlbW92ZVJvdywgcmVtb3ZlVGFibGUgfSBmcm9tICcuL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgY2xlYXJDZWxsIH0gZnJvbSAnLi90cmFuc2Zvcm1zL2NsZWFyLWNlbGwnO1xuaW1wb3J0IHR5cGUgeyBUaGVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0T3JpZ2luQ2VsbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBzZXRDZWxsSW5kZW50LCBzb3J0Q2VsbCB9IGZyb20gJy4vdXRpbHMvaGFuZGxlLWNlbGwnO1xuaW1wb3J0IHsgY3JlYXRlVGFibGVQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXRhYmxlLXBvc2l0aW9uJztcblxuZXhwb3J0IGNvbnN0IFRhYmxlRWRpdG9yID0ge1xuICAgIGluc2VydFRhYmxlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgaW5zZXJ0VGFibGUob3B0cywgZWRpdG9yKTtcbiAgICB9LFxuICAgIGluc2VydENvbHVtbihlZGl0b3I6IEVkaXRvciwgY291bnQ6IG51bWJlciA9IDEsIGF0PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgaW5zZXJ0Q29sdW1uKG9wdHMsIGVkaXRvciwgY291bnQsIGF0KTtcbiAgICB9LFxuICAgIGluc2VydFJvdyhlZGl0b3I6IEVkaXRvciwgY291bnQ6IG51bWJlciA9IDEsIGF0PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgaW5zZXJ0Um93KG9wdHMsIGVkaXRvciwgY291bnQsIGF0KTtcbiAgICB9LFxuICAgIHJlbW92ZVRhYmxlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgcmVtb3ZlVGFibGUob3B0cywgZWRpdG9yKTtcbiAgICB9LFxuICAgIHJlbW92ZVJvdyhlZGl0b3I6IEVkaXRvciwgcm93SW5kZXg/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVSb3cob3B0cywgZWRpdG9yLCByb3dJbmRleCk7XG4gICAgfSxcbiAgICByZW1vdmVDb2x1bW4oZWRpdG9yOiBFZGl0b3IsIGNvbEluZGV4PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgcmVtb3ZlQ29sdW1uKG9wdHMsIGVkaXRvciwgY29sSW5kZXgpO1xuICAgIH0sXG4gICAgY2xlYXJDZWxsKGVkaXRvcjogRWRpdG9yLCBub2RlRW50cnk/OiBOb2RlRW50cnk8RWxlbWVudD4sIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBjbGVhckNlbGwob3B0cywgZWRpdG9yLCBub2RlRW50cnkpO1xuICAgIH0sXG4gICAgaXNBY3RpdmUoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgW3RhYmxlXSA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHsgbWF0Y2g6IG4gPT4gRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIHJldHVybiAhIXRhYmxlO1xuICAgIH0sXG4gICAgZ2V0U2VsZWN0ZWRDZWxscyhlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgaWYgKHRhYmxlTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFibGVOb2RlWzBdKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZENlbGxQb3NpdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBzZXRBbGlnbihlZGl0b3I6IEVkaXRvciwgYWxpZ25tZW50OiBBbGlnbm1lbnQpIHtcbiAgICAgICAgcmV0dXJuIFRhYmxlRWRpdG9yLmhhbmRsZVNlbGVjdGVkQ2VsbHMoZWRpdG9yLCAoXywgY2VsbFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICB7IGFsaWduOiBhbGlnbm1lbnQgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF0OiBjZWxsUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoOiAobjogRWxlbWVudCkgPT4gQUxJR05fQkxPQ0tfVFlQRVMuaW5jbHVkZXMobi50eXBlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgc2V0VmVydGljYWxBbGlnbihlZGl0b3I6IFRoZUVkaXRvciwgYWxpZ25tZW50OiBWZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIGNlbGxQYXRoID0+IHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IHZlcnRpY2FsQWxpZ246IGFsaWdubWVudCB9LCB7IGF0OiBjZWxsUGF0aCB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgY29uc3QgY2VsbEVudHJ5ID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpO1xuICAgICAgICAgICAgaWYgKGNlbGxFbnRyeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFssIGNlbGxQYXRoXSA9IGNlbGxFbnRyeTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgIHsgdmVydGljYWxBbGlnbjogYWxpZ25tZW50IH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBjZWxsUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiAobjogRWxlbWVudCkgPT4gbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaXNWZXJ0aWNhbEFsaWduQWN0aXZlKGVkaXRvcjogVGhlRWRpdG9yLCBhbGlnbm1lbnQ6IFZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxscyhlZGl0b3IpO1xuICAgICAgICBpZiAoY2VsbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RDZWxsID0gY2VsbHNbY2VsbHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlTm9kZVsxXSwgbGFzdENlbGwucm93LCBsYXN0Q2VsbC5jb2xdO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IE5vZGUuZ2V0KGVkaXRvciwgY2VsbFBhdGgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB7IHZlcnRpY2FsQWxpZ24gfSA9IGNlbGw7XG4gICAgICAgICAgICBpZiAoIXZlcnRpY2FsQWxpZ24gJiYgYWxpZ25tZW50ID09PSBWZXJ0aWNhbEFsaWdubWVudC50b3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduID09PSBhbGlnbm1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGVDZWxsKTtcbiAgICAgICAgICAgIGlmIChjZWxsRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdmVydGljYWxBbGlnbiB9ID0gY2VsbEVsZW1lbnRbMF07XG4gICAgICAgICAgICAgICAgaWYgKCF2ZXJ0aWNhbEFsaWduICYmIGFsaWdubWVudCA9PT0gVmVydGljYWxBbGlnbm1lbnQudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmVydGljYWxBbGlnbiA9PT0gYWxpZ25tZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgdG9nZ2xlTWFyayhlZGl0b3I6IFRoZUVkaXRvciwgaXNBY3RpdmU6IGJvb2xlYW4sIGZvcm1hdDogc3RyaW5nIHwgc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIGF0ID0+IHtcbiAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMudW5zZXROb2RlcyhlZGl0b3IsIGZvcm1hdCwge1xuICAgICAgICAgICAgICAgICAgICBhdCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IFRleHQuaXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICBzcGxpdDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgIHsgW2Zvcm1hdCBhcyBzdHJpbmddOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBUZXh0LmlzVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsZWFyTWFyayhlZGl0b3I6IFRoZUVkaXRvcikge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChjZWxsUGF0aCwgY2VsbFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bnNldE1hcmtzOiB7IFtrZXkgaW4gTWFya1R5cGVzXT86IG51bGwgfCBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgICAgTWFya1Byb3BzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICB1bnNldE1hcmtzW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnNldE1hcmtzKGVkaXRvciwgdW5zZXRNYXJrcywgY2VsbFJhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvcjogVGhlRWRpdG9yLCBoYW5kbGU6IChjZWxsUGF0aDogUGF0aCwgY2VsbFJhbmdlOiBSYW5nZSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yKTtcbiAgICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcm93LCBjb2wgfSA9IGNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlTm9kZVsxXSwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSB7IGFuY2hvcjogRWRpdG9yLnN0YXJ0KGVkaXRvciwgY2VsbFBhdGgpLCBmb2N1czogRWRpdG9yLmVuZChlZGl0b3IsIGNlbGxQYXRoKSB9O1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUoY2VsbFBhdGgsIGNlbGxSYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvdyhlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFibGVFbnRyeVswXSkgYXMgVGhlVGFibGVDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0YWJsZUNvbXBvbmVudC5oZWFkZXJSb3c7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlckNvbHVtbihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRW50cnkgJiYgKHRhYmxlRW50cnlbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUhlYWRlcihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgIGlmICghVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmICFUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCAobG9jYXRpb24gYXMgUG9pbnQpLnBhdGgpO1xuICAgICAgICBpZiAoVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmIHBvc2l0aW9uLmdldFJvd0luZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikgJiYgcG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvd0NlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSb3cgPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PlxuICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KG4pICYmXG4gICAgICAgICAgICAgICAgKChuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdyAmJiBuLmhlYWRlcikgfHwgKG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlICYmIG4ub3B0aW9ucz8uaGVhZGVyUm93KSlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcikgPz8gW107XG4gICAgICAgIHNvcnRDZWxsKHNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5IZWFkZXJSb3cgPSAhIXNlbGVjdGVkQ2VsbHMgJiYgc2VsZWN0ZWRDZWxsc1swXS5yb3cgPT09IDA7XG5cbiAgICAgICAgcmV0dXJuIGlzSGVhZGVyUm93ICYmIGlzQ29udGFpbkhlYWRlclJvdztcbiAgICB9LFxuICAgIGhhc0hlYWRlckNvbHVtbkNlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yKSA/PyBbXTtcbiAgICAgICAgc29ydENlbGwoc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgIGNvbnN0IGlzQ29udGFpbkhlYWRlckNvbHVtbiA9ICEhc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzWzBdLmNvbCA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJDb2x1bW4gPSB0YWJsZSAmJiB0YWJsZVswXSAmJiAodGFibGVbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuXG4gICAgICAgIHJldHVybiBpc0hlYWRlckNvbHVtbiAmJiBpc0NvbnRhaW5IZWFkZXJDb2x1bW47XG4gICAgfSxcbiAgICBzZWxlY3RPcmlnaW5DZWxsKGVkaXRvcjogVGhlRWRpdG9yLCB0YWJsZTogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyLCBpc1N0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbkNlbGwodGFibGUsIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgaXNTdGFydCA/IEVkaXRvci5zdGFydChlZGl0b3IsIHBhdGgpIDogRWRpdG9yLmVuZChlZGl0b3IsIHBhdGgpKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSW5kZW50KGVkaXRvcjogVGhlRWRpdG9yLCBpbmRlbnRUeXBlOiBJbmRlbnRzKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKFRoZVF1ZXJpZXMuZ2V0Tm9kZShlZGl0b3IsIGNlbGxQYXRoKSBhcyBDdXN0b21FbGVtZW50KS5jaGlsZHJlbiBhcyBFbGVtZW50W107XG5cbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRDZWxsSW5kZW50KGVkaXRvciwgaW5kZW50VHlwZSwgY2hpbGQsIFsuLi5jZWxsUGF0aCwgaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiJdfQ==
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFhLFVBQVUsRUFBRSxJQUFJLEVBQWUsSUFBSSxFQUFtQixNQUFNLE9BQU8sQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFhLGlCQUFpQixFQUFFLFlBQVksRUFBVyxTQUFTLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN2QixXQUFXLENBQUMsTUFBYyxFQUFFLFlBQTJCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENB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LCBFbGVtZW50LCBOb2RlRW50cnksIFRyYW5zZm9ybXMsIFRleHQsIFBhdGgsIFJhbmdlLCBOb2RlLCBMb2NhdGlvbiwgUG9pbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBBbGlnbm1lbnQsIEFMSUdOX0JMT0NLX1RZUEVTLCBFbGVtZW50S2luZHMsIEluZGVudHMsIE1hcmtQcm9wcywgTWFya1R5cGVzLCBWZXJ0aWNhbEFsaWdubWVudCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQsIFRhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBpbnNlcnRUYWJsZSwgaW5zZXJ0Q29sdW1uLCBpbnNlcnRSb3csIHJlbW92ZUNvbHVtbiwgcmVtb3ZlUm93LCByZW1vdmVUYWJsZSB9IGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBjbGVhckNlbGwgfSBmcm9tICcuL3RyYW5zZm9ybXMvY2xlYXItY2VsbCc7XG5pbXBvcnQgdHlwZSB7IFRoZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRPcmlnaW5DZWxsIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4uLy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IHNldENlbGxJbmRlbnQsIHNvcnRDZWxsIH0gZnJvbSAnLi91dGlscy9oYW5kbGUtY2VsbCc7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuXG5leHBvcnQgY29uc3QgVGFibGVFZGl0b3IgPSB7XG4gICAgaW5zZXJ0VGFibGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRUYWJsZShvcHRzLCBlZGl0b3IpO1xuICAgIH0sXG4gICAgaW5zZXJ0Q29sdW1uKGVkaXRvcjogRWRpdG9yLCBjb3VudDogbnVtYmVyID0gMSwgYXQ/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRDb2x1bW4ob3B0cywgZWRpdG9yLCBjb3VudCwgYXQpO1xuICAgIH0sXG4gICAgaW5zZXJ0Um93KGVkaXRvcjogRWRpdG9yLCBjb3VudDogbnVtYmVyID0gMSwgYXQ/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRSb3cob3B0cywgZWRpdG9yLCBjb3VudCwgYXQpO1xuICAgIH0sXG4gICAgcmVtb3ZlVGFibGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVUYWJsZShvcHRzLCBlZGl0b3IpO1xuICAgIH0sXG4gICAgcmVtb3ZlUm93KGVkaXRvcjogRWRpdG9yLCByb3dJbmRleD86IG51bWJlciwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIHJlbW92ZVJvdyhvcHRzLCBlZGl0b3IsIHJvd0luZGV4KTtcbiAgICB9LFxuICAgIHJlbW92ZUNvbHVtbihlZGl0b3I6IEVkaXRvciwgY29sSW5kZXg/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVDb2x1bW4ob3B0cywgZWRpdG9yLCBjb2xJbmRleCk7XG4gICAgfSxcbiAgICBjbGVhckNlbGwoZWRpdG9yOiBFZGl0b3IsIG5vZGVFbnRyeT86IE5vZGVFbnRyeTxFbGVtZW50Piwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIGNsZWFyQ2VsbChvcHRzLCBlZGl0b3IsIG5vZGVFbnRyeSk7XG4gICAgfSxcbiAgICBpc0FjdGl2ZShlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBjb25zdCBbdGFibGVdID0gRWRpdG9yLm5vZGVzKGVkaXRvciwgeyBtYXRjaDogbiA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuICEhdGFibGU7XG4gICAgfSxcbiAgICBnZXRTZWxlY3RlZENlbGxzKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICBpZiAodGFibGVOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0YWJsZU5vZGVbMF0pIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHNldEFsaWduKGVkaXRvcjogRWRpdG9yLCBhbGlnbm1lbnQ6IEFsaWdubWVudCkge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChfLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIHsgYWxpZ246IGFsaWdubWVudCB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXQ6IGNlbGxSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBBTElHTl9CTE9DS19UWVBFUy5pbmNsdWRlcyhuLnR5cGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRWZXJ0aWNhbEFsaWduKGVkaXRvcjogVGhlRWRpdG9yLCBhbGlnbm1lbnQ6IFZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgY2VsbFBhdGggPT4ge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgdmVydGljYWxBbGlnbjogYWxpZ25tZW50IH0sIHsgYXQ6IGNlbGxQYXRoIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsRW50cnkgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlQ2VsbCk7XG4gICAgICAgICAgICBpZiAoY2VsbEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgY2VsbFBhdGhdID0gY2VsbEVudHJ5O1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgeyB2ZXJ0aWNhbEFsaWduOiBhbGlnbm1lbnQgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGNlbGxQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpc1ZlcnRpY2FsQWxpZ25BY3RpdmUoZWRpdG9yOiBUaGVFZGl0b3IsIGFsaWdubWVudDogVmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcik7XG4gICAgICAgIGlmIChjZWxscykge1xuICAgICAgICAgICAgY29uc3QgbGFzdENlbGwgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVOb2RlWzFdLCBsYXN0Q2VsbC5yb3csIGxhc3RDZWxsLmNvbF07XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgdmVydGljYWxBbGlnbiB9ID0gY2VsbDtcbiAgICAgICAgICAgIGlmICghdmVydGljYWxBbGlnbiAmJiBhbGlnbm1lbnQgPT09IFZlcnRpY2FsQWxpZ25tZW50LnRvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQWxpZ24gPT09IGFsaWdubWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpO1xuICAgICAgICAgICAgaWYgKGNlbGxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2ZXJ0aWNhbEFsaWduIH0gPSBjZWxsRWxlbWVudFswXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZlcnRpY2FsQWxpZ24gJiYgYWxpZ25tZW50ID09PSBWZXJ0aWNhbEFsaWdubWVudC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduID09PSBhbGlnbm1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB0b2dnbGVNYXJrKGVkaXRvcjogVGhlRWRpdG9yLCBpc0FjdGl2ZTogYm9vbGVhbiwgZm9ybWF0OiBzdHJpbmcgfCBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgYXQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy51bnNldE5vZGVzKGVkaXRvciwgZm9ybWF0LCB7XG4gICAgICAgICAgICAgICAgICAgIGF0LFxuICAgICAgICAgICAgICAgICAgICBtYXRjaDogVGV4dC5pc1RleHQsXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgeyBbZm9ybWF0IGFzIHN0cmluZ106IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IFRleHQuaXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xlYXJNYXJrKGVkaXRvcjogVGhlRWRpdG9yKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVuc2V0TWFya3M6IHsgW2tleSBpbiBNYXJrVHlwZXNdPzogbnVsbCB8IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgICBNYXJrUHJvcHMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHVuc2V0TWFya3Nba2V5XSA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMuc2V0TWFya3MoZWRpdG9yLCB1bnNldE1hcmtzLCBjZWxsUmFuZ2UpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgZm9ybWF0QnJ1c2goZWRpdG9yOiBUaGVFZGl0b3IsIG1hcmtzOiB7IFtrZXkgaW4gTWFya1R5cGVzXT86IGFueSB9KSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMuc2V0TWFya3MoZWRpdG9yLCBtYXJrcywgY2VsbFJhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvcjogVGhlRWRpdG9yLCBoYW5kbGU6IChjZWxsUGF0aDogUGF0aCwgY2VsbFJhbmdlOiBSYW5nZSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yKTtcbiAgICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcm93LCBjb2wgfSA9IGNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlTm9kZVsxXSwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSB7IGFuY2hvcjogRWRpdG9yLnN0YXJ0KGVkaXRvciwgY2VsbFBhdGgpLCBmb2N1czogRWRpdG9yLmVuZChlZGl0b3IsIGNlbGxQYXRoKSB9O1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUoY2VsbFBhdGgsIGNlbGxSYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvdyhlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFibGVFbnRyeVswXSkgYXMgVGhlVGFibGVDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0YWJsZUNvbXBvbmVudC5oZWFkZXJSb3c7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlckNvbHVtbihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRW50cnkgJiYgKHRhYmxlRW50cnlbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUhlYWRlcihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgIGlmICghVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmICFUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCAobG9jYXRpb24gYXMgUG9pbnQpLnBhdGgpO1xuICAgICAgICBpZiAoVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmIHBvc2l0aW9uLmdldFJvd0luZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikgJiYgcG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvd0NlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSb3cgPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PlxuICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KG4pICYmXG4gICAgICAgICAgICAgICAgKChuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdyAmJiBuLmhlYWRlcikgfHwgKG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlICYmIG4ub3B0aW9ucz8uaGVhZGVyUm93KSlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcikgPz8gW107XG4gICAgICAgIHNvcnRDZWxsKHNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5IZWFkZXJSb3cgPSAhIXNlbGVjdGVkQ2VsbHMgJiYgc2VsZWN0ZWRDZWxsc1swXS5yb3cgPT09IDA7XG5cbiAgICAgICAgcmV0dXJuIGlzSGVhZGVyUm93ICYmIGlzQ29udGFpbkhlYWRlclJvdztcbiAgICB9LFxuICAgIGhhc0hlYWRlckNvbHVtbkNlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yKSA/PyBbXTtcbiAgICAgICAgc29ydENlbGwoc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgIGNvbnN0IGlzQ29udGFpbkhlYWRlckNvbHVtbiA9ICEhc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzWzBdLmNvbCA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJDb2x1bW4gPSB0YWJsZSAmJiB0YWJsZVswXSAmJiAodGFibGVbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuXG4gICAgICAgIHJldHVybiBpc0hlYWRlckNvbHVtbiAmJiBpc0NvbnRhaW5IZWFkZXJDb2x1bW47XG4gICAgfSxcbiAgICBzZWxlY3RPcmlnaW5DZWxsKGVkaXRvcjogVGhlRWRpdG9yLCB0YWJsZTogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyLCBpc1N0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbkNlbGwodGFibGUsIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgaXNTdGFydCA/IEVkaXRvci5zdGFydChlZGl0b3IsIHBhdGgpIDogRWRpdG9yLmVuZChlZGl0b3IsIHBhdGgpKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSW5kZW50KGVkaXRvcjogVGhlRWRpdG9yLCBpbmRlbnRUeXBlOiBJbmRlbnRzKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKFRoZVF1ZXJpZXMuZ2V0Tm9kZShlZGl0b3IsIGNlbGxQYXRoKSBhcyBDdXN0b21FbGVtZW50KS5jaGlsZHJlbiBhcyBFbGVtZW50W107XG5cbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRDZWxsSW5kZW50KGVkaXRvciwgaW5kZW50VHlwZSwgY2hpbGQsIFsuLi5jZWxsUGF0aCwgaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiJdfQ==
@@ -1,34 +1,34 @@
1
- import { Transforms, Node, Range, Editor, Element, Path, Operation } from 'slate';
1
+ import { timer } from 'rxjs';
2
+ import { Editor, Element, Node, Operation, Path, Range, Transforms } from 'slate';
2
3
  import { AngularEditor, ELEMENT_TO_COMPONENT, hotkeys } from 'slate-angular';
3
- import { TableOptions } from './table.types';
4
- import { isRangeInTable, isSelectionInTable, TablePosition } from './utils';
5
- import { PluginKeys, TheEditor } from '../../interfaces';
4
+ import { CLIPBOARD_FORMAT_KEY } from '../../constants/default';
6
5
  import { ElementKinds } from '../../constants/node-types';
6
+ import { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';
7
+ import { createPluginFactory } from '../../core';
8
+ import { PluginKeys, TheEditor } from '../../interfaces';
9
+ import * as TheQueries from '../../queries';
10
+ import { createEmptyParagraph } from '../../utils/create-empty-paragraph';
11
+ import { extractFragment } from '../../utils/fragment';
12
+ import { cloneDeep } from '../../utils/lodash';
13
+ import { TheTableRowComponent } from './components/row/row.component';
7
14
  import { TheTableComponent } from './components/table.component';
15
+ import { TheTdComponent } from './components/td/td.component';
8
16
  import { TableEditor } from './table.editor';
17
+ import { TableOptions } from './table.types';
18
+ import { TheTableToolbarItemComponent } from './toolbar-item.component';
9
19
  import { clearTableNode } from './transforms/clear-table-node';
10
- import { isVirtualKey } from './utils/is-virtual-key';
11
20
  import { insertColumnAtRow } from './transforms/insert-column';
21
+ import { TablePosition, isRangeInTable, isSelectionInTable } from './utils';
22
+ import { addColumns } from './utils/add-columns';
12
23
  import { calculateAnchorPositionInCell } from './utils/calc-anchor-position';
13
- import { CLIPBOARD_FORMAT_KEY } from '../../constants/default';
14
24
  import { getOriginCell } from './utils/calc-span';
15
- import { resetTableCell } from './utils/split-cell';
16
- import { removeColumns } from './utils/remove-columns';
17
- import { addColumns } from './utils/add-columns';
18
- import { TheTableRowComponent } from './components/row/row.component';
19
- import { TheTdComponent } from './components/td/td.component';
20
- import { extractFragment } from '../../utils/fragment';
21
- import * as TheQueries from '../../queries';
22
- import { normalizeTable } from './utils/normalize-table';
23
- import { cloneDeep } from '../../utils/lodash';
24
- import { createPluginFactory } from '../../core';
25
- import { TheTableToolbarItemComponent } from './toolbar-item.component';
26
- import { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';
27
- import { isSelectedCellMerged } from './utils/merge-cell';
28
- import { timer } from 'rxjs';
29
- import { isLegalTable } from './utils/is-legal-table';
30
- import { createEmptyParagraph } from '../../utils/create-empty-paragraph';
31
25
  import { createTablePosition } from './utils/create-table-position';
26
+ import { isLegalTable } from './utils/is-legal-table';
27
+ import { isVirtualKey } from './utils/is-virtual-key';
28
+ import { isSelectedCellMerged } from './utils/merge-cell';
29
+ import { normalizeTable } from './utils/normalize-table';
30
+ import { removeColumns } from './utils/remove-columns';
31
+ import { resetTableCell } from './utils/split-cell';
32
32
  export const withTable = (editor) => {
33
33
  const { deleteBackward, deleteForward, onKeydown, setFragmentData, insertData, normalizeNode, isBlockCard, renderElement, deleteCutData, isContainer, onChange, onClick } = editor;
34
34
  editor.deleteBackward = unit => {
@@ -541,4 +541,4 @@ export const createTablePlugin = createPluginFactory({
541
541
  }
542
542
  }
543
543
  });
544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQVEsTUFBTSxPQUFPLENBQUM7QUFDMUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBd0IsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFB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LFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDOUMsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSztZQUNqQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEtBQUs7WUFDL0IsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7U0FDcEI7S0FDSjtJQUNELE9BQU8sRUFBRTtRQUNMLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEtBQWlCLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1lBQ25FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0tBQ0o7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2Zvcm1zLCBQb2ludCwgTm9kZSwgUmFuZ2UsIEVkaXRvciwgTm9kZUVudHJ5LCBFbGVtZW50LCBQYXRoLCBPcGVyYXRpb24sIFRleHQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCwgaG90a2V5cyB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zLCBUaGVQbHVnaW5UYWJsZU9wdGlvbiB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgaXNSYW5nZUluVGFibGUsIGlzU2VsZWN0aW9uSW5UYWJsZSwgVGFibGVQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cywgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbGVtZW50S2luZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbm9kZS10eXBlcyc7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUVsZW1lbnQsIFRhYmxlUm93RWxlbWVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBUaGVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVFZGl0b3IgfSBmcm9tICcuL3RhYmxlLmVkaXRvcic7XG5pbXBvcnQgeyBjbGVhclRhYmxlTm9kZSB9IGZyb20gJy4vdHJhbnNmb3Jtcy9jbGVhci10YWJsZS1ub2RlJztcbmltcG9ydCB7IGlzVmlydHVhbEtleSB9IGZyb20gJy4vdXRpbHMvaXMtdmlydHVhbC1rZXknO1xuaW1wb3J0IHsgaW5zZXJ0Q29sdW1uQXRSb3cgfSBmcm9tICcuL3RyYW5zZm9ybXMvaW5zZXJ0LWNvbHVtbic7XG5pbXBvcnQgeyBjYWxjdWxhdGVBbmNob3JQb3NpdGlvbkluQ2VsbCB9IGZyb20gJy4vdXRpbHMvY2FsYy1hbmNob3ItcG9zaXRpb24nO1xuaW1wb3J0IHsgQ0xJUEJPQVJEX0ZPUk1BVF9LRVkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBnZXRPcmlnaW5DZWxsIH0gZnJvbSAnLi91dGlscy9jYWxjLXNwYW4nO1xuaW1wb3J0IHsgcmVzZXRUYWJsZUNlbGwgfSBmcm9tICcuL3V0aWxzL3NwbGl0LWNlbGwnO1xuaW1wb3J0IHsgcmVtb3ZlQ29sdW1ucyB9IGZyb20gJy4vdXRpbHMvcmVtb3ZlLWNvbHVtbnMnO1xuaW1wb3J0IHsgYWRkQ29sdW1ucyB9IGZyb20gJy4vdXRpbHMvYWRkLWNvbHVtbnMnO1xuaW1wb3J0IHsgVGhlVGFibGVSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcm93L3Jvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGhlVGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGQvdGQuY29tcG9uZW50JztcbmltcG9ydCB7IGV4dHJhY3RGcmFnbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZyYWdtZW50JztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBub3JtYWxpemVUYWJsZSB9IGZyb20gJy4vdXRpbHMvbm9ybWFsaXplLXRhYmxlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZGFzaCc7XG5pbXBvcnQgeyBjcmVhdGVQbHVnaW5GYWN0b3J5IH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUaGVUYWJsZVRvb2xiYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFBsdWdpbk1lbnVJY29ucywgVGhlUGx1Z2luTWVudUl0ZW1UeXBlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BsdWdpbi1tZW51JztcbmltcG9ydCB7IGlzU2VsZWN0ZWRDZWxsTWVyZ2VkIH0gZnJvbSAnLi91dGlscy9tZXJnZS1jZWxsJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0xlZ2FsVGFibGUgfSBmcm9tICcuL3V0aWxzL2lzLWxlZ2FsLXRhYmxlJztcbmltcG9ydCB7IGNyZWF0ZUVtcHR5UGFyYWdyYXBoIH0gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlLWVtcHR5LXBhcmFncmFwaCc7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuXG5leHBvcnQgY29uc3Qgd2l0aFRhYmxlID0gPFQgZXh0ZW5kcyBFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGVsZXRlQmFja3dhcmQsXG4gICAgICAgIGRlbGV0ZUZvcndhcmQsXG4gICAgICAgIG9uS2V5ZG93bixcbiAgICAgICAgc2V0RnJhZ21lbnREYXRhLFxuICAgICAgICBpbnNlcnREYXRhLFxuICAgICAgICBub3JtYWxpemVOb2RlLFxuICAgICAgICBpc0Jsb2NrQ2FyZCxcbiAgICAgICAgcmVuZGVyRWxlbWVudCxcbiAgICAgICAgZGVsZXRlQ3V0RGF0YSxcbiAgICAgICAgaXNDb250YWluZXIsXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBvbkNsaWNrXG4gICAgfSA9IGVkaXRvcjtcblxuICAgIGVkaXRvci5kZWxldGVCYWNrd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uSW5UYWJsZShvcHRzLCBlZGl0b3IpKSB7XG4gICAgICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgIGNvbnN0IFssIHN0YXJ0QmxvY2tQYXRoXSA9IEVkaXRvci5hYm92ZTxFbGVtZW50PihlZGl0b3IsIHtcbiAgICAgICAgICAgIG1hdGNoOiBuID0+IEVkaXRvci5pc0Jsb2NrKGVkaXRvciwgbilcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0QmxvY2tQYXRoLmxlbmd0aCA8PSBzdGFydFBvc2l0aW9uLmNlbGxFbnRyeVsxXS5sZW5ndGggKyAxICYmXG4gICAgICAgICAgICBzdGFydEJsb2NrUGF0aC5wb3AoKSA9PT0gMCAmJlxuICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvci5vZmZzZXQgPT09IDAgJiZcbiAgICAgICAgICAgIFRoZVF1ZXJpZXMuaXNTdGFydChlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIHN0YXJ0QmxvY2tQYXRoKSAmJlxuICAgICAgICAgICAgIUVkaXRvci5pc1ZvaWQoZWRpdG9yLCBUaGVRdWVyaWVzLmFuY2hvckJsb2NrKGVkaXRvcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZUJhY2t3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuZGVsZXRlRm9yd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhZnRlclBvaW50ID0gRWRpdG9yLmFmdGVyKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgIGlmIChhZnRlclBvaW50ICYmIGlzUmFuZ2VJblRhYmxlKG9wdHMsIGVkaXRvciwgeyBhbmNob3I6IGFmdGVyUG9pbnQsIGZvY3VzOiBhZnRlclBvaW50IH0pKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgYWZ0ZXJQb2ludC5wYXRoKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVQb3NpdGlvbi5jZWxsICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwgIT09IGFmdGVyUG9zaXRpb24uY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGVGb3J3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25DbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuZGV0YWlsID09PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBpc01lcmdlZENlbGwgPSBpc1NlbGVjdGVkQ2VsbE1lcmdlZChlZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKGRvbVNlbGVjdGlvbiAmJiAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkICYmIGVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGF0ZVNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKGVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIGVkaXRvciwgc2xhdGVTZWxlY3Rpb24uZm9jdXMucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VkQ2VsbCAmJiBzdGFydFBvc2l0aW9uLmNlbGwgIT09IGVuZFBvc2l0aW9uLmNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIoODEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25LZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZVVwID0gaG90a2V5cy5pc01vdmVVcChldmVudCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZURvd24gPSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVCYWNrd2FyZCA9IGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVGb3J3YXJkID0gaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5hbmNob3IgfHwgIXNlbGVjdGlvbi5mb2N1cykge1xuICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCBzZWxlY3Rpb24uZm9jdXMucGF0aCk7XG4gICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gUmFuZ2UuaXNDb2xsYXBzZWQoc2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gJiYgZW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24uaXNJblRhYmxlKCkpIHtcbiAgICAgICAgICAgIC8vIGZvciBrZXlib2FyZCB1cCBhbmQgZG93biBrZXkgaW4gdGhlIHRhYmxlXG4gICAgICAgICAgICBpZiAoaXNNb3ZlVXAgfHwgaXNNb3ZlRG93bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gZW5kUG9zaXRpb24uY2VsbEVudHJ5WzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UGF0aCA9IEVkaXRvci5zdGFydChlZGl0b3IsIGNlbGxQYXRoKS5wYXRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFBhdGggPSBFZGl0b3IuZW5kKGVkaXRvciwgY2VsbFBhdGgpLnBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc0ZpcnN0TGluZSwgaXNMYXN0TGluZSB9ID0gY2FsY3VsYXRlQW5jaG9yUG9zaXRpb25JbkNlbGwoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBzdGFydFBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgZW5kUGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgICAgIGlmICgoVGhlUXVlcmllcy5hbmNob3JCbG9ja0VudHJ5KGVkaXRvcilbMV0udG9TdHJpbmcoKSAhPT0gc3RhcnRQYXRoLnRvU3RyaW5nKCkgfHwgIWlzRmlyc3RMaW5lKSAmJiBpc01vdmVVcCkge1xuICAgICAgICAgICAgICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChUaGVRdWVyaWVzLmFuY2hvckJsb2NrRW50cnkoZWRpdG9yKVsxXS50b1N0cmluZygpICE9PSBlbmRQYXRoLnRvU3RyaW5nKCkgfHwgIWlzTGFzdExpbmUpICYmIGlzTW92ZURvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IGF0OiBQb2ludDtcbiAgICAgICAgICAgICAgICBpZiAoaXNNb3ZlVXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvdmVSb3cgPSBzdGFydFBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuW3N0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm92ZUNlbGwgPSBhYm92ZVJvdyAmJiBhYm92ZVJvdy5jaGlsZHJlbltzdGFydFBvc2l0aW9uLmdldENvbHVtbkluZGV4KCldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWJvdmVDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvdmVDZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBhYm92ZUNlbGwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzTm9kZUVudHJ5ID0gRWRpdG9yLnByZXZpb3VzKGVkaXRvciwgeyBhdDogc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlUG9pbnQgPSBFZGl0b3IuYmVmb3JlKGVkaXRvciwgc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5uZXh0KGVkaXRvciwgeyBhdDogc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBwcmV2aW91c05vZGVFbnRyeVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNOb2RlRW50cnkgJiYgYmVmb3JlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBiZWZvcmVQb2ludC5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c05vZGVFbnRyeSAmJiAhYmVmb3JlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLm1vdmVCbG9ja0NhcmQoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMF0sIHsgZGlyZWN0aW9uOiAnbGVmdCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBiZWxvd1Jvd0luZGV4ID0gc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24uY2VsbC5yb3dzcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3dSb3dJbmRleCA9IHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSArIHN0YXJ0UG9zaXRpb24uY2VsbC5yb3dzcGFuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlbG93Um93ID0gc3RhcnRQb3NpdGlvbi50YWJsZS5jaGlsZHJlbltiZWxvd1Jvd0luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVsb3dDZWxsID0gYmVsb3dSb3cgJiYgYmVsb3dSb3cuY2hpbGRyZW5bc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlbG93Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlbG93Q2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5zZWxlY3RPcmlnaW5DZWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24udGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGJlbG93Q2VsbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGVFbnRyeSA9IEVkaXRvci5uZXh0KGVkaXRvciwgeyBhdDogc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW92ZVBhdGggPSBuZXh0Tm9kZUVudHJ5ID8gbmV4dE5vZGVFbnRyeVsxXSA6IEVkaXRvci5hZnRlcihlZGl0b3IsIHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSkucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgbW92ZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc01vdmVCYWNrd2FyZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvc2l0aW9uID0gYmVmb3JlUG9pbnQgJiYgY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IsIGJlZm9yZVBvaW50LnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVQb3NpdGlvbiAmJiBiZWZvcmVQb3NpdGlvbi5jZWxsICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gRWRpdG9yLmVuZChlZGl0b3IsIFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGJlZm9yZVBvc2l0aW9uLmZpbmRQcmV2aW91cygpKSk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTW92ZUZvcndhcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlclBvaW50ID0gRWRpdG9yLmFmdGVyKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJQb3NpdGlvbiA9IGFmdGVyUG9pbnQgJiYgY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IsIGFmdGVyUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyUG9zaXRpb24uY2VsbCAmJiBhZnRlclBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gYWZ0ZXJQb3NpdGlvbi5maW5kTmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYWZ0ZXJQb3NpdGlvbi5maW5kTmV4dCgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLm1vdmVCbG9ja0NhcmQoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMF0sIHsgZGlyZWN0aW9uOiAncmlnaHQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRlbGV0aW5nIGNlbGxzIGluIHRoZSB0YWJsZVxuICAgICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCAmJiAhc3RhcnRQb3NpdGlvbi5pc0luVGFibGUoKSAmJiAhaXNWaXJ0dWFsS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IHRhYmxlT3V0UGF0aDogUG9pbnQ7XG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJhbmdlLmlzRm9yd2FyZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU91dFBhdGggPSBFZGl0b3IuZW5kKGVkaXRvciwgW3NlbGVjdGlvbi5mb2N1cy5wYXRoWzBdIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUYWJsZU5vZGUob3B0cywgZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlT3V0UGF0aCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFtzZWxlY3Rpb24uZm9jdXMucGF0aFswXSArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGFibGVOb2RlKG9wdHMsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVPdXRSYW5nZSA9IEVkaXRvci5yYW5nZShlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIHRhYmxlT3V0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogdGFibGVPdXRSYW5nZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBuZXcgcmFuZ2VcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSBFZGl0b3IucmFuZ2UoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzLnBhdGguc2xpY2UoMCwgMykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzUmFuZ2UgPSBSYW5nZS5pbnRlcnNlY3Rpb24oZWRpdG9yLnNlbGVjdGlvbiwgY2VsbFJhbmdlKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGZvY3VzUmFuZ2UpO1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgfTtcblxuICAgIGVkaXRvci5zZXRGcmFnbWVudERhdGEgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgc2V0RnJhZ21lbnREYXRhKHVuaXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlUG9zaXRpb24udGFibGUpIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBsZXQgdGFibGVGcmFnbWVudCA9IG51bGw7XG4gICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZVBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuLnNsaWNlKFxuICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuc2VsZWN0ZWRSb3dzSW5kZXhbMF0sXG4gICAgICAgICAgICAgICAgdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleFt0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCAtIDFdICsgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgLi4udGFibGVQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm93c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcFJvd3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBzZWxlY3RlZENlbGxQb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJvdywgY29sIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxOb2RlID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoIXRlbXBSb3dzW3Jvd10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFJvd3Nbcm93XSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZW1wUm93c1tyb3ddLnB1c2goY2VsbE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93czogVGFibGVSb3dFbGVtZW50W10gPSBPYmplY3QudmFsdWVzKHRlbXBSb3dzKS5tYXAoKGl0ZW06IFRhYmxlQ2VsbEVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEVsZW1lbnRLaW5kcy50YWJsZVJvdyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm93c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVGcmFnbWVudCkge1xuICAgICAgICAgICAgdGFibGVGcmFnbWVudCA9IG5vcm1hbGl6ZVRhYmxlKGNsb25lRGVlcCh0YWJsZUZyYWdtZW50KSk7XG4gICAgICAgICAgICBjb25zdCBwbGFpblRleHQgPSBOb2RlLnN0cmluZyh0YWJsZUZyYWdtZW50KTtcbiAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSBbdGFibGVGcmFnbWVudF07XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdPYmogPSBKU09OLnN0cmluZ2lmeSh0YWJsZUZyYWdtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSB3aW5kb3cuYnRvYShlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nT2JqKSk7XG4gICAgICAgICAgICB1bml0LnNldERhdGEoYGFwcGxpY2F0aW9uLyR7Q0xJUEJPQVJEX0ZPUk1BVF9LRVl9YCwgZW5jb2RlZCk7XG4gICAgICAgICAgICB1bml0LnNldERhdGEoJ3RleHQvcGxhaW4nLCBwbGFpblRleHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEZyYWdtZW50RGF0YSh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmluc2VydERhdGEgPSBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBleHRyYWN0RnJhZ21lbnQoZGF0YSk7XG4gICAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXNTZWxlY3Rpb25JblRhYmxlKG9wdHMsIGVkaXRvcikgJiZcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICBFbGVtZW50LmlzRWxlbWVudChmcmFnbWVudFswXSkgJiZcbiAgICAgICAgICAgICAgICBmcmFnbWVudFswXS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVGFibGUgPSBmcmFnbWVudFswXS5jaGlsZHJlbiBhcyBOb2RlW107XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkUm93ID0gKGNsaXBib2FyZFRhYmxlWzBdIGFzIEVsZW1lbnQpLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdFJvd0luZGV4ID0gdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdENvbEluZGV4ID0gdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RSb3dJbmRleCA9IHNlbGVjdFJvd0luZGV4ICsgY2xpcGJvYXJkVGFibGUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sSW5kZXggPSBzZWxlY3RDb2xJbmRleCArIGNsaXBib2FyZFJvdy5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdFJvd0luZGV4OyBpIDw9IGxhc3RSb3dJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBzZWxlY3RDb2xJbmRleDsgaiA8PSBsYXN0Q29sSW5kZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGFibGVQb3NpdGlvbi50YWJsZS5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgJiYgcm93LmNoaWxkcmVuW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luQ2VsbCA9IGdldE9yaWdpbkNlbGwodGFibGVQb3NpdGlvbi50YWJsZSwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbkNlbGwgJiYgKG9yaWdpbkNlbGwuY29sc3BhbiB8fCBvcmlnaW5DZWxsLnJvd3NwYW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBvcmlnaW5DZWxsKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0VGFibGVDZWxsKGVkaXRvciwgdGFibGVQb3NpdGlvbi50YWJsZSwgb3JpZ2luQ2VsbCwgcGF0aFswXSwgcGF0aFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDb2xJbmRleCA+IHRhYmxlUG9zaXRpb24uZ2V0V2lkdGgoKSAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZENvbENvdW50ID0gbGFzdENvbEluZGV4IC0gKHRhYmxlUG9zaXRpb24uZ2V0V2lkdGgoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IuaW5zZXJ0Q29sdW1uKGVkaXRvciwgYWRkQ29sQ291bnQsIHRhYmxlUG9zaXRpb24uZ2V0V2lkdGgoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSb3dJbmRleCA+IHRhYmxlUG9zaXRpb24uZ2V0SGVpZ2h0KCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRSb3dDb3VudCA9IGxhc3RSb3dJbmRleCAtICh0YWJsZVBvc2l0aW9uLmdldEhlaWdodCgpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5pbnNlcnRSb3coZWRpdG9yLCBhZGRSb3dDb3VudCwgdGFibGVQb3NpdGlvbi5nZXRIZWlnaHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkVGFibGUuZm9yRWFjaCgocm93OiBUYWJsZUVsZW1lbnQsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmNoaWxkcmVuLmZvckVhY2goKGNvbDogTm9kZSwgajogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCBzZWxlY3RSb3dJbmRleCArIGksIHNlbGVjdENvbEluZGV4ICsgal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlcyhlZGl0b3IsIHsgYXQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIGNvbCwgeyBhdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCBzZWxlY3RSb3dJbmRleCwgc2VsZWN0Q29sSW5kZXhdKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3aGVuIHBhc3RpbmcgZGF0YSwgdGhlIGxhc3Qgb25lIGlzIGEgdGFibGUsIGFuZCB0aGUgZm9jdXMgcG9zaXRpb24gaXMgc3BlY2lhbGx5IGhhbmRsZWRcbiAgICAgICAgICAgIC8vICogdGhpcyBpcyB0byBmb2N1cyBhZnRlciB3aXRoVHJhaWxpbmdOb2RlLm5vcm1hbGl6ZU5vZGUoKSB0byBhdm9pZCBpbmNvcnJlY3QgZm9jdXMgZWxlbWVudC5cbiAgICAgICAgICAgIC8vICogaWYgdGhlcmUgaXMgYSBub2RlIGJlbG93LCB0aGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBub2RlIGJlbG93LlxuICAgICAgICAgICAgLy8gKiBpZiB0aGVyZSBpcyBubyBub2RlIGJlbG93LCB0aGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY3VycmVudCB0YWJsZS5cbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnNlcnROb2RlID0gZnJhZ21lbnRbZnJhZ21lbnQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RhYmxlID0gKGxhc3RJbnNlcnROb2RlIGFzIEVsZW1lbnQpLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZTtcbiAgICAgICAgICAgIGlmIChpc1RhYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCBjdXJyZW50UGF0aF0gPSBUaGVRdWVyaWVzLmZpbmROb2RlKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoID0gUGF0aC5uZXh0KGN1cnJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc05leHROb2RlID0gTm9kZS5oYXMoZWRpdG9yLCBuZXh0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c1BhdGggPSBoYXNOZXh0Tm9kZSA/IG5leHRQYXRoIDogY3VycmVudFBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c05vZGUgPSBOb2RlLmdldChlZGl0b3IsIGZvY3VzUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Jsb2NrQ2FyZCA9IGVkaXRvci5pc0Jsb2NrQ2FyZChmb2N1c05vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUGF0aCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmb2N1c1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBpc0Jsb2NrQ2FyZCA/IChoYXNOZXh0Tm9kZSA/IC0xIDogLTIpIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgY3Vyc29yUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc2VydERhdGEoZGF0YSk7XG4gICAgfTtcblxuICAgIGVkaXRvci5ub3JtYWxpemVOb2RlID0gKFtub2RlLCBwYXRoXTogTm9kZUVudHJ5PE5vZGU+KSA9PiB7XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSBub2RlIGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5tYXgoLi4udGFibGUuY2hpbGRyZW4ubWFwKHJvdyA9PiByb3cuY2hpbGRyZW4ubGVuZ3RoKSk7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkUm93cyA9IHRhYmxlLmNoaWxkcmVuLmZpbHRlcihyb3cgPT4gcm93LmNoaWxkcmVuLmxlbmd0aCA8IG1heFdpZHRoKTtcbiAgICAgICAgICAgIGlmIChpbnZhbGlkUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS5jaGlsZHJlbi5tYXAoKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5tYXAoKGNlbGwsIGNlbGxJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLmhpZGRlbiB8fCBjZWxsLmNvbHNwYW4gfHwgY2VsbC5yb3dzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGhpZGRlbjogbnVsbCwgY29sc3BhbjogbnVsbCwgcm93c3BhbjogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdDogWy4uLnBhdGgsIHJvd0luZGV4LCBjZWxsSW5kZXhdIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gbWF4V2lkdGggLSByb3cuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Q29sdW1uQXRSb3coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGUsIHBhdGhdIGFzIE5vZGVFbnRyeTxUYWJsZUVsZW1lbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmNoaWxkcmVuLmluZGV4T2Yocm93KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuY2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YWJsZS5jb2x1bW5zICYmIHRhYmxlLmNvbHVtbnMubGVuZ3RoICE9PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmxlbmd0aCA+IG1heFdpZHRoID8gcmVtb3ZlQ29sdW1ucyh0YWJsZSwgbWF4V2lkdGgpIDogYWRkQ29sdW1ucyh0YWJsZSwgbWF4V2lkdGgpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IGNvbHVtbnMgfSwgeyBhdDogcGF0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vcmFtbGl6ZSBpbGxlZ2FsIGNlbGwgYW5kIHJvdyB0byBiZSBwYXJhZ3JhcGhcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIFtFbGVtZW50S2luZHMudGFibGVDZWxsLCBFbGVtZW50S2luZHMudGFibGVSb3ddLmluY2x1ZGVzKG5vZGUudHlwZSkpIHtcbiAgICAgICAgICAgIGlmICghaXNMZWdhbFRhYmxlKGVkaXRvciwgbm9kZSBhcyBUYWJsZVJvd0VsZW1lbnQgfCBUYWJsZUNlbGxFbGVtZW50LCBwYXRoKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RQYXRoID0gW3BhdGhbMF1dO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBhbGwgdGFibGVDZWxsIGFuZCB0YWJsZVJvd1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiByb290UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdsb3dlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChub2RlOiBDdXN0b21FbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJzb3JQYXRoID0gcGF0aFswXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9yYW1saXplIHRvIGJlIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0Tm9kZSwgdGFyZ2V0UGF0aF0gb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IGNyZWF0ZUVtcHR5UGFyYWdyYXBoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IE5vZGUuc3RyaW5nKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJhZ3JhcGguY2hpbGRyZW5bMF0gYXMgVGV4dCkudGV4dCA9IHRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0YXJnZXROb2RlIGFzIEN1c3RvbUVsZW1lbnQpLmtleSA9PT0gbm9kZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUGF0aCA9IHJvb3RQYXRoWzBdICsgaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBwYXJhZ3JhcGgsIHsgYXQ6IFtyb290UGF0aFswXSArIGluZGV4XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSB7IHBhdGg6IFtjdXJzb3JQYXRoLCAwXSwgb2Zmc2V0OiBvZmZzZXQgfTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCB7IGFuY2hvcjogY3Vyc29yLCBmb2N1czogY3Vyc29yIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogcm9vdFBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRqdXN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVDZWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIFJhbmdlLmlzQ29sbGFwc2VkKGVkaXRvci5zZWxlY3Rpb24pICYmXG4gICAgICAgICAgICAgICAgUGF0aC5pc0FuY2VzdG9yKHBhdGgsIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpICYmXG4gICAgICAgICAgICAgICAgbm9kZS5oaWRkZW5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBnZXRPcmlnaW5DZWxsKHRhYmxlUG9zaXRpb24udGFibGUsIHRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKSwgdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBvcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBFZGl0b3IuZW5kKGVkaXRvciwgcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9ybWFsaXplTm9kZShbbm9kZSwgcGF0aF0pO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaXNCbG9ja0NhcmQgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQmxvY2tDYXJkKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IucmVuZGVyRWxlbWVudCA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdyAmJiBpc0xlZ2FsVGFibGUoZWRpdG9yLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRhYmxlUm93Q29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgJiYgaXNMZWdhbFRhYmxlKGVkaXRvciwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVUZENvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyRWxlbWVudChlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUN1dERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25JblRhYmxlKG9wdHMsIGVkaXRvcikpIHtcbiAgICAgICAgICAgIGRlbGV0ZUN1dERhdGEoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChlbGVtZW50LnRhYmxlKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVDb21wb25lbnQudGFibGVTdG9yZS5pc0Z1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5yZW1vdmVUYWJsZShlZGl0b3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuY2xlYXJTZWxlY3RlZENlbGxzQ29udGVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2UuY2xvc2VUb29sYmFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVDdXREYXRhKCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5pc0NvbnRhaW5lciA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgPyB0cnVlIDogaXNDb250YWluZXIoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoKTtcbiAgICAgICAgLy8gYWR1anN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICAvLyBqdXN0IGhvb2sgc2V0X3NlbGVjdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBlZGl0b3Iuc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25PcGVyYXRpb24gPSBlZGl0b3Iub3BlcmF0aW9ucy5ldmVyeShvcCA9PiBPcGVyYXRpb24uaXNTZWxlY3Rpb25PcGVyYXRpb24ob3ApKTtcbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCAmJiBpc1NlbGVjdGlvbk9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi5pc0luVGFibGUoKSAmJiB0YWJsZVBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBvc2l0aW9uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhYmxlUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeTxUaGVQbHVnaW5UYWJsZU9wdGlvbj4oe1xuICAgIGtleTogUGx1Z2luS2V5cy50YWJsZSxcbiAgICB3aXRoT3ZlcnJpZGVzOiB3aXRoVGFibGUsXG4gICAgbmVzdGVkU3RydWN0dXJlQnlLZXk6IHtcbiAgICAgICAgW0VsZW1lbnRLaW5kcy50YWJsZV06IEVsZW1lbnRLaW5kcy50YWJsZVJvdyxcbiAgICAgICAgW0VsZW1lbnRLaW5kcy50YWJsZVJvd106IEVsZW1lbnRLaW5kcy50YWJsZUNlbGxcbiAgICB9LFxuICAgIHRvb2xiYXJJdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgIGljb246ICd0YWJsZS1ib3JkZXItYWxsJyxcbiAgICAgICAgICAgIG5hbWU6ICfooajmoLwnLFxuICAgICAgICAgICAgaWNvbkNvbXBvbmVudDogVGhlVGFibGVUb29sYmFySXRlbUNvbXBvbmVudCxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pbnNlcnRUYWJsZShlZGl0b3IpLFxuICAgICAgICAgICAgYWN0aXZlOiBlZGl0b3IgPT4gVGFibGVFZGl0b3IuaXNBY3RpdmUoZWRpdG9yKVxuICAgICAgICB9XG4gICAgXSxcbiAgICBtZW51SXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBFbGVtZW50S2luZHMudGFibGUsXG4gICAgICAgICAgICBrZXl3b3JkczogJ2JpYW9nZSxiZyx0YWJsZSzooajmoLwnLFxuICAgICAgICAgICAgZXhlY3V0ZTogZWRpdG9yID0+IFRhYmxlRWRpdG9yLmluc2VydFRhYmxlKGVkaXRvciksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pc0FjdGl2ZShlZGl0b3IpLFxuICAgICAgICAgICAgbmFtZTogJ+ihqOagvCcsXG4gICAgICAgICAgICB0eXBlOiBUaGVQbHVnaW5NZW51SXRlbVR5cGUuZ3JvdXAsXG4gICAgICAgICAgICBtZW51SWNvbjogUGx1Z2luTWVudUljb25zLnRhYmxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICfmlK/mjIHmj5LlhaXooajmoLwnLFxuICAgICAgICAgICAgZGlzcGxheUtleTogJy9iZydcbiAgICAgICAgfVxuICAgIF0sXG4gICAgb3B0aW9uczoge1xuICAgICAgICBzaG93RnVsbHNjcmVlbjogZmFsc2UsXG4gICAgICAgIGZyZWV6ZUNvbHVtbkhlYWRlcjogZmFsc2UsXG4gICAgICAgIGZyZWV6ZVJvd0hlYWRlcjogZmFsc2UsXG4gICAgICAgIHNldEZ1bGxzY3JlZW46IChlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IE1vdXNlRXZlbnQsIGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiJdfQ==
544
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFhLFNBQVMsRUFBRSxJQUFJLEVBQVMsS0FBSyxFQUFRLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9B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LFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDOUMsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSztZQUNqQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEtBQUs7WUFDL0IsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7U0FDcEI7S0FDSjtJQUNELE9BQU8sRUFBRTtRQUNMLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEtBQWlCLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1lBQ25FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0tBQ0o7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50LCBOb2RlLCBOb2RlRW50cnksIE9wZXJhdGlvbiwgUGF0aCwgUG9pbnQsIFJhbmdlLCBUZXh0LCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRUxFTUVOVF9UT19DT01QT05FTlQsIGhvdGtleXMgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IENMSVBCT0FSRF9GT1JNQVRfS0VZIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtdHlwZXMnO1xuaW1wb3J0IHsgUGx1Z2luTWVudUljb25zLCBUaGVQbHVnaW5NZW51SXRlbVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGx1Z2luLW1lbnUnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCwgVGFibGVFbGVtZW50LCBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cywgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlQYXJhZ3JhcGggfSBmcm9tICcuLi8uLi91dGlscy9jcmVhdGUtZW1wdHktcGFyYWdyYXBoJztcbmltcG9ydCB7IGV4dHJhY3RGcmFnbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZyYWdtZW50JztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZGFzaCc7XG5pbXBvcnQgeyBUaGVUYWJsZVJvd0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yb3cvcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGhlVGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGQvdGQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlRWRpdG9yIH0gZnJvbSAnLi90YWJsZS5lZGl0b3InO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zLCBUaGVQbHVnaW5UYWJsZU9wdGlvbiB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGhlVGFibGVUb29sYmFySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjbGVhclRhYmxlTm9kZSB9IGZyb20gJy4vdHJhbnNmb3Jtcy9jbGVhci10YWJsZS1ub2RlJztcbmltcG9ydCB7IGluc2VydENvbHVtbkF0Um93IH0gZnJvbSAnLi90cmFuc2Zvcm1zL2luc2VydC1jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVQb3NpdGlvbiwgaXNSYW5nZUluVGFibGUsIGlzU2VsZWN0aW9uSW5UYWJsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYWRkQ29sdW1ucyB9IGZyb20gJy4vdXRpbHMvYWRkLWNvbHVtbnMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlQW5jaG9yUG9zaXRpb25JbkNlbGwgfSBmcm9tICcuL3V0aWxzL2NhbGMtYW5jaG9yLXBvc2l0aW9uJztcbmltcG9ydCB7IGdldE9yaWdpbkNlbGwgfSBmcm9tICcuL3V0aWxzL2NhbGMtc3Bhbic7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuaW1wb3J0IHsgaXNMZWdhbFRhYmxlIH0gZnJvbSAnLi91dGlscy9pcy1sZWdhbC10YWJsZSc7XG5pbXBvcnQgeyBpc1ZpcnR1YWxLZXkgfSBmcm9tICcuL3V0aWxzL2lzLXZpcnR1YWwta2V5JztcbmltcG9ydCB7IGlzU2VsZWN0ZWRDZWxsTWVyZ2VkIH0gZnJvbSAnLi91dGlscy9tZXJnZS1jZWxsJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRhYmxlIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUtdGFibGUnO1xuaW1wb3J0IHsgcmVtb3ZlQ29sdW1ucyB9IGZyb20gJy4vdXRpbHMvcmVtb3ZlLWNvbHVtbnMnO1xuaW1wb3J0IHsgcmVzZXRUYWJsZUNlbGwgfSBmcm9tICcuL3V0aWxzL3NwbGl0LWNlbGwnO1xuXG5leHBvcnQgY29uc3Qgd2l0aFRhYmxlID0gPFQgZXh0ZW5kcyBFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGVsZXRlQmFja3dhcmQsXG4gICAgICAgIGRlbGV0ZUZvcndhcmQsXG4gICAgICAgIG9uS2V5ZG93bixcbiAgICAgICAgc2V0RnJhZ21lbnREYXRhLFxuICAgICAgICBpbnNlcnREYXRhLFxuICAgICAgICBub3JtYWxpemVOb2RlLFxuICAgICAgICBpc0Jsb2NrQ2FyZCxcbiAgICAgICAgcmVuZGVyRWxlbWVudCxcbiAgICAgICAgZGVsZXRlQ3V0RGF0YSxcbiAgICAgICAgaXNDb250YWluZXIsXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBvbkNsaWNrXG4gICAgfSA9IGVkaXRvcjtcblxuICAgIGVkaXRvci5kZWxldGVCYWNrd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uSW5UYWJsZShvcHRzLCBlZGl0b3IpKSB7XG4gICAgICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgIGNvbnN0IFssIHN0YXJ0QmxvY2tQYXRoXSA9IEVkaXRvci5hYm92ZTxFbGVtZW50PihlZGl0b3IsIHtcbiAgICAgICAgICAgIG1hdGNoOiBuID0+IEVkaXRvci5pc0Jsb2NrKGVkaXRvciwgbilcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0QmxvY2tQYXRoLmxlbmd0aCA8PSBzdGFydFBvc2l0aW9uLmNlbGxFbnRyeVsxXS5sZW5ndGggKyAxICYmXG4gICAgICAgICAgICBzdGFydEJsb2NrUGF0aC5wb3AoKSA9PT0gMCAmJlxuICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvci5vZmZzZXQgPT09IDAgJiZcbiAgICAgICAgICAgIFRoZVF1ZXJpZXMuaXNTdGFydChlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIHN0YXJ0QmxvY2tQYXRoKSAmJlxuICAgICAgICAgICAgIUVkaXRvci5pc1ZvaWQoZWRpdG9yLCBUaGVRdWVyaWVzLmFuY2hvckJsb2NrKGVkaXRvcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZUJhY2t3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuZGVsZXRlRm9yd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhZnRlclBvaW50ID0gRWRpdG9yLmFmdGVyKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgIGlmIChhZnRlclBvaW50ICYmIGlzUmFuZ2VJblRhYmxlKG9wdHMsIGVkaXRvciwgeyBhbmNob3I6IGFmdGVyUG9pbnQsIGZvY3VzOiBhZnRlclBvaW50IH0pKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgYWZ0ZXJQb2ludC5wYXRoKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVQb3NpdGlvbi5jZWxsICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwgIT09IGFmdGVyUG9zaXRpb24uY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGVGb3J3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25DbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuZGV0YWlsID09PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBpc01lcmdlZENlbGwgPSBpc1NlbGVjdGVkQ2VsbE1lcmdlZChlZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKGRvbVNlbGVjdGlvbiAmJiAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkICYmIGVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGF0ZVNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKGVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIGVkaXRvciwgc2xhdGVTZWxlY3Rpb24uZm9jdXMucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VkQ2VsbCAmJiBzdGFydFBvc2l0aW9uLmNlbGwgIT09IGVuZFBvc2l0aW9uLmNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIoODEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25LZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZVVwID0gaG90a2V5cy5pc01vdmVVcChldmVudCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZURvd24gPSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVCYWNrd2FyZCA9IGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVGb3J3YXJkID0gaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5hbmNob3IgfHwgIXNlbGVjdGlvbi5mb2N1cykge1xuICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCBzZWxlY3Rpb24uZm9jdXMucGF0aCk7XG4gICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gUmFuZ2UuaXNDb2xsYXBzZWQoc2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gJiYgZW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24uaXNJblRhYmxlKCkpIHtcbiAgICAgICAgICAgIC8vIGZvciBrZXlib2FyZCB1cCBhbmQgZG93biBrZXkgaW4gdGhlIHRhYmxlXG4gICAgICAgICAgICBpZiAoaXNNb3ZlVXAgfHwgaXNNb3ZlRG93bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gZW5kUG9zaXRpb24uY2VsbEVudHJ5WzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UGF0aCA9IEVkaXRvci5zdGFydChlZGl0b3IsIGNlbGxQYXRoKS5wYXRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFBhdGggPSBFZGl0b3IuZW5kKGVkaXRvciwgY2VsbFBhdGgpLnBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc0ZpcnN0TGluZSwgaXNMYXN0TGluZSB9ID0gY2FsY3VsYXRlQW5jaG9yUG9zaXRpb25JbkNlbGwoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBzdGFydFBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgZW5kUGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgICAgIGlmICgoVGhlUXVlcmllcy5hbmNob3JCbG9ja0VudHJ5KGVkaXRvcilbMV0udG9TdHJpbmcoKSAhPT0gc3RhcnRQYXRoLnRvU3RyaW5nKCkgfHwgIWlzRmlyc3RMaW5lKSAmJiBpc01vdmVVcCkge1xuICAgICAgICAgICAgICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChUaGVRdWVyaWVzLmFuY2hvckJsb2NrRW50cnkoZWRpdG9yKVsxXS50b1N0cmluZygpICE9PSBlbmRQYXRoLnRvU3RyaW5nKCkgfHwgIWlzTGFzdExpbmUpICYmIGlzTW92ZURvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IGF0OiBQb2ludDtcbiAgICAgICAgICAgICAgICBpZiAoaXNNb3ZlVXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvdmVSb3cgPSBzdGFydFBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuW3N0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm92ZUNlbGwgPSBhYm92ZVJvdyAmJiBhYm92ZVJvdy5jaGlsZHJlbltzdGFydFBvc2l0aW9uLmdldENvbHVtbkluZGV4KCldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWJvdmVDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvdmVDZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBhYm92ZUNlbGwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzTm9kZUVudHJ5ID0gRWRpdG9yLnByZXZpb3VzKGVkaXRvciwgeyBhdDogc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlUG9pbnQgPSBFZGl0b3IuYmVmb3JlKGVkaXRvciwgc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5uZXh0KGVkaXRvciwgeyBhdDogc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBwcmV2aW91c05vZGVFbnRyeVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNOb2RlRW50cnkgJiYgYmVmb3JlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBiZWZvcmVQb2ludC5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c05vZGVFbnRyeSAmJiAhYmVmb3JlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLm1vdmVCbG9ja0NhcmQoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMF0sIHsgZGlyZWN0aW9uOiAnbGVmdCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBiZWxvd1Jvd0luZGV4ID0gc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24uY2VsbC5yb3dzcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3dSb3dJbmRleCA9IHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSArIHN0YXJ0UG9zaXRpb24uY2VsbC5yb3dzcGFuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlbG93Um93ID0gc3RhcnRQb3NpdGlvbi50YWJsZS5jaGlsZHJlbltiZWxvd1Jvd0luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVsb3dDZWxsID0gYmVsb3dSb3cgJiYgYmVsb3dSb3cuY2hpbGRyZW5bc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlbG93Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlbG93Q2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5zZWxlY3RPcmlnaW5DZWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24udGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGJlbG93Q2VsbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGVFbnRyeSA9IEVkaXRvci5uZXh0KGVkaXRvciwgeyBhdDogc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW92ZVBhdGggPSBuZXh0Tm9kZUVudHJ5ID8gbmV4dE5vZGVFbnRyeVsxXSA6IEVkaXRvci5hZnRlcihlZGl0b3IsIHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSkucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgbW92ZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc01vdmVCYWNrd2FyZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvc2l0aW9uID0gYmVmb3JlUG9pbnQgJiYgY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IsIGJlZm9yZVBvaW50LnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVQb3NpdGlvbiAmJiBiZWZvcmVQb3NpdGlvbi5jZWxsICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gRWRpdG9yLmVuZChlZGl0b3IsIFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGJlZm9yZVBvc2l0aW9uLmZpbmRQcmV2aW91cygpKSk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTW92ZUZvcndhcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlclBvaW50ID0gRWRpdG9yLmFmdGVyKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJQb3NpdGlvbiA9IGFmdGVyUG9pbnQgJiYgY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IsIGFmdGVyUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyUG9zaXRpb24uY2VsbCAmJiBhZnRlclBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gYWZ0ZXJQb3NpdGlvbi5maW5kTmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYWZ0ZXJQb3NpdGlvbi5maW5kTmV4dCgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLm1vdmVCbG9ja0NhcmQoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMF0sIHsgZGlyZWN0aW9uOiAncmlnaHQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRlbGV0aW5nIGNlbGxzIGluIHRoZSB0YWJsZVxuICAgICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCAmJiAhc3RhcnRQb3NpdGlvbi5pc0luVGFibGUoKSAmJiAhaXNWaXJ0dWFsS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IHRhYmxlT3V0UGF0aDogUG9pbnQ7XG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJhbmdlLmlzRm9yd2FyZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU91dFBhdGggPSBFZGl0b3IuZW5kKGVkaXRvciwgW3NlbGVjdGlvbi5mb2N1cy5wYXRoWzBdIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUYWJsZU5vZGUob3B0cywgZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlT3V0UGF0aCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFtzZWxlY3Rpb24uZm9jdXMucGF0aFswXSArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGFibGVOb2RlKG9wdHMsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVPdXRSYW5nZSA9IEVkaXRvci5yYW5nZShlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIHRhYmxlT3V0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogdGFibGVPdXRSYW5nZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBuZXcgcmFuZ2VcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSBFZGl0b3IucmFuZ2UoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzLnBhdGguc2xpY2UoMCwgMykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzUmFuZ2UgPSBSYW5nZS5pbnRlcnNlY3Rpb24oZWRpdG9yLnNlbGVjdGlvbiwgY2VsbFJhbmdlKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGZvY3VzUmFuZ2UpO1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgfTtcblxuICAgIGVkaXRvci5zZXRGcmFnbWVudERhdGEgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgc2V0RnJhZ21lbnREYXRhKHVuaXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlUG9zaXRpb24udGFibGUpIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBsZXQgdGFibGVGcmFnbWVudCA9IG51bGw7XG4gICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZVBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuLnNsaWNlKFxuICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuc2VsZWN0ZWRSb3dzSW5kZXhbMF0sXG4gICAgICAgICAgICAgICAgdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleFt0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCAtIDFdICsgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgLi4udGFibGVQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm93c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcFJvd3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBzZWxlY3RlZENlbGxQb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJvdywgY29sIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxOb2RlID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoIXRlbXBSb3dzW3Jvd10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFJvd3Nbcm93XSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZW1wUm93c1tyb3ddLnB1c2goY2VsbE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93czogVGFibGVSb3dFbGVtZW50W10gPSBPYmplY3QudmFsdWVzKHRlbXBSb3dzKS5tYXAoKGl0ZW06IFRhYmxlQ2VsbEVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEVsZW1lbnRLaW5kcy50YWJsZVJvdyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm93c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVGcmFnbWVudCkge1xuICAgICAgICAgICAgdGFibGVGcmFnbWVudCA9IG5vcm1hbGl6ZVRhYmxlKGNsb25lRGVlcCh0YWJsZUZyYWdtZW50KSk7XG4gICAgICAgICAgICBjb25zdCBwbGFpblRleHQgPSBOb2RlLnN0cmluZyh0YWJsZUZyYWdtZW50KTtcbiAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSBbdGFibGVGcmFnbWVudF07XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdPYmogPSBKU09OLnN0cmluZ2lmeSh0YWJsZUZyYWdtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSB3aW5kb3cuYnRvYShlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nT2JqKSk7XG4gICAgICAgICAgICB1bml0LnNldERhdGEoYGFwcGxpY2F0aW9uLyR7Q0xJUEJPQVJEX0ZPUk1BVF9LRVl9YCwgZW5jb2RlZCk7XG4gICAgICAgICAgICB1bml0LnNldERhdGEoJ3RleHQvcGxhaW4nLCBwbGFpblRleHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEZyYWdtZW50RGF0YSh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmluc2VydERhdGEgPSBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBleHRyYWN0RnJhZ21lbnQoZGF0YSk7XG4gICAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXNTZWxlY3Rpb25JblRhYmxlKG9wdHMsIGVkaXRvcikgJiZcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICBFbGVtZW50LmlzRWxlbWVudChmcmFnbWVudFswXSkgJiZcbiAgICAgICAgICAgICAgICBmcmFnbWVudFswXS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVGFibGUgPSBmcmFnbWVudFswXS5jaGlsZHJlbiBhcyBOb2RlW107XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkUm93ID0gKGNsaXBib2FyZFRhYmxlWzBdIGFzIEVsZW1lbnQpLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdFJvd0luZGV4ID0gdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdENvbEluZGV4ID0gdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RSb3dJbmRleCA9IHNlbGVjdFJvd0luZGV4ICsgY2xpcGJvYXJkVGFibGUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sSW5kZXggPSBzZWxlY3RDb2xJbmRleCArIGNsaXBib2FyZFJvdy5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdFJvd0luZGV4OyBpIDw9IGxhc3RSb3dJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBzZWxlY3RDb2xJbmRleDsgaiA8PSBsYXN0Q29sSW5kZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGFibGVQb3NpdGlvbi50YWJsZS5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgJiYgcm93LmNoaWxkcmVuW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luQ2VsbCA9IGdldE9yaWdpbkNlbGwodGFibGVQb3NpdGlvbi50YWJsZSwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbkNlbGwgJiYgKG9yaWdpbkNlbGwuY29sc3BhbiB8fCBvcmlnaW5DZWxsLnJvd3NwYW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBvcmlnaW5DZWxsKS5zbGljZSgtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0VGFibGVDZWxsKGVkaXRvciwgdGFibGVQb3NpdGlvbi50YWJsZSwgb3JpZ2luQ2VsbCwgcGF0aFswXSwgcGF0aFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDb2xJbmRleCA+IHRhYmxlUG9zaXRpb24uZ2V0V2lkdGgoKSAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZENvbENvdW50ID0gbGFzdENvbEluZGV4IC0gKHRhYmxlUG9zaXRpb24uZ2V0V2lkdGgoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IuaW5zZXJ0Q29sdW1uKGVkaXRvciwgYWRkQ29sQ291bnQsIHRhYmxlUG9zaXRpb24uZ2V0V2lkdGgoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSb3dJbmRleCA+IHRhYmxlUG9zaXRpb24uZ2V0SGVpZ2h0KCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRSb3dDb3VudCA9IGxhc3RSb3dJbmRleCAtICh0YWJsZVBvc2l0aW9uLmdldEhlaWdodCgpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5pbnNlcnRSb3coZWRpdG9yLCBhZGRSb3dDb3VudCwgdGFibGVQb3NpdGlvbi5nZXRIZWlnaHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkVGFibGUuZm9yRWFjaCgocm93OiBUYWJsZUVsZW1lbnQsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmNoaWxkcmVuLmZvckVhY2goKGNvbDogTm9kZSwgajogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCBzZWxlY3RSb3dJbmRleCArIGksIHNlbGVjdENvbEluZGV4ICsgal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlcyhlZGl0b3IsIHsgYXQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIGNvbCwgeyBhdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCBzZWxlY3RSb3dJbmRleCwgc2VsZWN0Q29sSW5kZXhdKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3aGVuIHBhc3RpbmcgZGF0YSwgdGhlIGxhc3Qgb25lIGlzIGEgdGFibGUsIGFuZCB0aGUgZm9jdXMgcG9zaXRpb24gaXMgc3BlY2lhbGx5IGhhbmRsZWRcbiAgICAgICAgICAgIC8vICogdGhpcyBpcyB0byBmb2N1cyBhZnRlciB3aXRoVHJhaWxpbmdOb2RlLm5vcm1hbGl6ZU5vZGUoKSB0byBhdm9pZCBpbmNvcnJlY3QgZm9jdXMgZWxlbWVudC5cbiAgICAgICAgICAgIC8vICogaWYgdGhlcmUgaXMgYSBub2RlIGJlbG93LCB0aGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBub2RlIGJlbG93LlxuICAgICAgICAgICAgLy8gKiBpZiB0aGVyZSBpcyBubyBub2RlIGJlbG93LCB0aGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY3VycmVudCB0YWJsZS5cbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnNlcnROb2RlID0gZnJhZ21lbnRbZnJhZ21lbnQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RhYmxlID0gKGxhc3RJbnNlcnROb2RlIGFzIEVsZW1lbnQpLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZTtcbiAgICAgICAgICAgIGlmIChpc1RhYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCBjdXJyZW50UGF0aF0gPSBUaGVRdWVyaWVzLmZpbmROb2RlKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoID0gUGF0aC5uZXh0KGN1cnJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc05leHROb2RlID0gTm9kZS5oYXMoZWRpdG9yLCBuZXh0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c1BhdGggPSBoYXNOZXh0Tm9kZSA/IG5leHRQYXRoIDogY3VycmVudFBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c05vZGUgPSBOb2RlLmdldChlZGl0b3IsIGZvY3VzUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Jsb2NrQ2FyZCA9IGVkaXRvci5pc0Jsb2NrQ2FyZChmb2N1c05vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUGF0aCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmb2N1c1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBpc0Jsb2NrQ2FyZCA/IChoYXNOZXh0Tm9kZSA/IC0xIDogLTIpIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgY3Vyc29yUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc2VydERhdGEoZGF0YSk7XG4gICAgfTtcblxuICAgIGVkaXRvci5ub3JtYWxpemVOb2RlID0gKFtub2RlLCBwYXRoXTogTm9kZUVudHJ5PE5vZGU+KSA9PiB7XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSBub2RlIGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5tYXgoLi4udGFibGUuY2hpbGRyZW4ubWFwKHJvdyA9PiByb3cuY2hpbGRyZW4ubGVuZ3RoKSk7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkUm93cyA9IHRhYmxlLmNoaWxkcmVuLmZpbHRlcihyb3cgPT4gcm93LmNoaWxkcmVuLmxlbmd0aCA8IG1heFdpZHRoKTtcbiAgICAgICAgICAgIGlmIChpbnZhbGlkUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS5jaGlsZHJlbi5tYXAoKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5tYXAoKGNlbGwsIGNlbGxJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLmhpZGRlbiB8fCBjZWxsLmNvbHNwYW4gfHwgY2VsbC5yb3dzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGhpZGRlbjogbnVsbCwgY29sc3BhbjogbnVsbCwgcm93c3BhbjogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdDogWy4uLnBhdGgsIHJvd0luZGV4LCBjZWxsSW5kZXhdIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gbWF4V2lkdGggLSByb3cuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Q29sdW1uQXRSb3coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGUsIHBhdGhdIGFzIE5vZGVFbnRyeTxUYWJsZUVsZW1lbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmNoaWxkcmVuLmluZGV4T2Yocm93KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuY2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YWJsZS5jb2x1bW5zICYmIHRhYmxlLmNvbHVtbnMubGVuZ3RoICE9PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmxlbmd0aCA+IG1heFdpZHRoID8gcmVtb3ZlQ29sdW1ucyh0YWJsZSwgbWF4V2lkdGgpIDogYWRkQ29sdW1ucyh0YWJsZSwgbWF4V2lkdGgpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IGNvbHVtbnMgfSwgeyBhdDogcGF0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vcmFtbGl6ZSBpbGxlZ2FsIGNlbGwgYW5kIHJvdyB0byBiZSBwYXJhZ3JhcGhcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIFtFbGVtZW50S2luZHMudGFibGVDZWxsLCBFbGVtZW50S2luZHMudGFibGVSb3ddLmluY2x1ZGVzKG5vZGUudHlwZSkpIHtcbiAgICAgICAgICAgIGlmICghaXNMZWdhbFRhYmxlKGVkaXRvciwgbm9kZSBhcyBUYWJsZVJvd0VsZW1lbnQgfCBUYWJsZUNlbGxFbGVtZW50LCBwYXRoKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RQYXRoID0gW3BhdGhbMF1dO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBhbGwgdGFibGVDZWxsIGFuZCB0YWJsZVJvd1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiByb290UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdsb3dlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChub2RlOiBDdXN0b21FbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJzb3JQYXRoID0gcGF0aFswXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9yYW1saXplIHRvIGJlIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0Tm9kZSwgdGFyZ2V0UGF0aF0gb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IGNyZWF0ZUVtcHR5UGFyYWdyYXBoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IE5vZGUuc3RyaW5nKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJhZ3JhcGguY2hpbGRyZW5bMF0gYXMgVGV4dCkudGV4dCA9IHRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0YXJnZXROb2RlIGFzIEN1c3RvbUVsZW1lbnQpLmtleSA9PT0gbm9kZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUGF0aCA9IHJvb3RQYXRoWzBdICsgaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBwYXJhZ3JhcGgsIHsgYXQ6IFtyb290UGF0aFswXSArIGluZGV4XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSB7IHBhdGg6IFtjdXJzb3JQYXRoLCAwXSwgb2Zmc2V0OiBvZmZzZXQgfTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCB7IGFuY2hvcjogY3Vyc29yLCBmb2N1czogY3Vyc29yIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogcm9vdFBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRqdXN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVDZWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIFJhbmdlLmlzQ29sbGFwc2VkKGVkaXRvci5zZWxlY3Rpb24pICYmXG4gICAgICAgICAgICAgICAgUGF0aC5pc0FuY2VzdG9yKHBhdGgsIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpICYmXG4gICAgICAgICAgICAgICAgbm9kZS5oaWRkZW5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBnZXRPcmlnaW5DZWxsKHRhYmxlUG9zaXRpb24udGFibGUsIHRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKSwgdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBvcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBFZGl0b3IuZW5kKGVkaXRvciwgcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9ybWFsaXplTm9kZShbbm9kZSwgcGF0aF0pO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaXNCbG9ja0NhcmQgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQmxvY2tDYXJkKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IucmVuZGVyRWxlbWVudCA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdyAmJiBpc0xlZ2FsVGFibGUoZWRpdG9yLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRhYmxlUm93Q29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgJiYgaXNMZWdhbFRhYmxlKGVkaXRvciwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVUZENvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyRWxlbWVudChlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUN1dERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25JblRhYmxlKG9wdHMsIGVkaXRvcikpIHtcbiAgICAgICAgICAgIGRlbGV0ZUN1dERhdGEoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChlbGVtZW50LnRhYmxlKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVDb21wb25lbnQudGFibGVTdG9yZS5pc0Z1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5yZW1vdmVUYWJsZShlZGl0b3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuY2xlYXJTZWxlY3RlZENlbGxzQ29udGVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2UuY2xvc2VUb29sYmFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVDdXREYXRhKCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5pc0NvbnRhaW5lciA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgPyB0cnVlIDogaXNDb250YWluZXIoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoKTtcbiAgICAgICAgLy8gYWR1anN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICAvLyBqdXN0IGhvb2sgc2V0X3NlbGVjdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBlZGl0b3Iuc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25PcGVyYXRpb24gPSBlZGl0b3Iub3BlcmF0aW9ucy5ldmVyeShvcCA9PiBPcGVyYXRpb24uaXNTZWxlY3Rpb25PcGVyYXRpb24ob3ApKTtcbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCAmJiBpc1NlbGVjdGlvbk9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi5pc0luVGFibGUoKSAmJiB0YWJsZVBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBvc2l0aW9uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhYmxlUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeTxUaGVQbHVnaW5UYWJsZU9wdGlvbj4oe1xuICAgIGtleTogUGx1Z2luS2V5cy50YWJsZSxcbiAgICB3aXRoT3ZlcnJpZGVzOiB3aXRoVGFibGUsXG4gICAgbmVzdGVkU3RydWN0dXJlQnlLZXk6IHtcbiAgICAgICAgW0VsZW1lbnRLaW5kcy50YWJsZV06IEVsZW1lbnRLaW5kcy50YWJsZVJvdyxcbiAgICAgICAgW0VsZW1lbnRLaW5kcy50YWJsZVJvd106IEVsZW1lbnRLaW5kcy50YWJsZUNlbGxcbiAgICB9LFxuICAgIHRvb2xiYXJJdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgIGljb246ICd0YWJsZS1ib3JkZXItYWxsJyxcbiAgICAgICAgICAgIG5hbWU6ICfooajmoLwnLFxuICAgICAgICAgICAgaWNvbkNvbXBvbmVudDogVGhlVGFibGVUb29sYmFySXRlbUNvbXBvbmVudCxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pbnNlcnRUYWJsZShlZGl0b3IpLFxuICAgICAgICAgICAgYWN0aXZlOiBlZGl0b3IgPT4gVGFibGVFZGl0b3IuaXNBY3RpdmUoZWRpdG9yKVxuICAgICAgICB9XG4gICAgXSxcbiAgICBtZW51SXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBFbGVtZW50S2luZHMudGFibGUsXG4gICAgICAgICAgICBrZXl3b3JkczogJ2JpYW9nZSxiZyx0YWJsZSzooajmoLwnLFxuICAgICAgICAgICAgZXhlY3V0ZTogZWRpdG9yID0+IFRhYmxlRWRpdG9yLmluc2VydFRhYmxlKGVkaXRvciksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pc0FjdGl2ZShlZGl0b3IpLFxuICAgICAgICAgICAgbmFtZTogJ+ihqOagvCcsXG4gICAgICAgICAgICB0eXBlOiBUaGVQbHVnaW5NZW51SXRlbVR5cGUuZ3JvdXAsXG4gICAgICAgICAgICBtZW51SWNvbjogUGx1Z2luTWVudUljb25zLnRhYmxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICfmlK/mjIHmj5LlhaXooajmoLwnLFxuICAgICAgICAgICAgZGlzcGxheUtleTogJy9iZydcbiAgICAgICAgfVxuICAgIF0sXG4gICAgb3B0aW9uczoge1xuICAgICAgICBzaG93RnVsbHNjcmVlbjogZmFsc2UsXG4gICAgICAgIGZyZWV6ZUNvbHVtbkhlYWRlcjogZmFsc2UsXG4gICAgICAgIGZyZWV6ZVJvd0hlYWRlcjogZmFsc2UsXG4gICAgICAgIHNldEZ1bGxzY3JlZW46IChlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IE1vdXNlRXZlbnQsIGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiJdfQ==