@mediusinc/mng-commons 3.7.0-rc.0 → 4.0.0-rc.2

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.
Files changed (55) hide show
  1. package/esm2022/index.mjs +8 -2
  2. package/esm2022/lib/components/action/index.mjs +2 -1
  3. package/esm2022/lib/components/action/table/action-table.component.mjs +164 -0
  4. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +4 -4
  5. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +4 -5
  6. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
  7. package/esm2022/lib/components/layoutV2/topbar.component.mjs +2 -7
  8. package/esm2022/lib/components/table/column-filter-full/column-filter-full.component.mjs +466 -0
  9. package/esm2022/lib/components/table/column-value/column-value.component.mjs +87 -0
  10. package/esm2022/lib/components/table/models/table.event.mjs +16 -0
  11. package/esm2022/lib/components/table/models/table.interface.mjs +2 -0
  12. package/esm2022/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.mjs +25 -0
  13. package/esm2022/lib/components/table/table.component.mjs +723 -0
  14. package/esm2022/lib/components/tableview/index.mjs +1 -4
  15. package/esm2022/lib/components/tableview/tableview.component.mjs +6 -7
  16. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +1 -1
  17. package/esm2022/lib/descriptors/table/table.descriptor.mjs +16 -17
  18. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +1 -1
  19. package/esm2022/lib/utils/tableview.util.mjs +2 -2
  20. package/fesm2022/mediusinc-mng-commons.mjs +2221 -2080
  21. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  22. package/index.d.ts +6 -1
  23. package/lib/components/action/index.d.ts +1 -0
  24. package/lib/components/action/table/action-table.component.d.ts +55 -0
  25. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -1
  26. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +1 -1
  27. package/lib/components/layoutV2/topbar.component.d.ts +0 -1
  28. package/lib/components/{tableview/table → table}/column-filter-full/column-filter-full.component.d.ts +2 -2
  29. package/lib/components/{tableview/table → table}/column-value/column-value.component.d.ts +3 -3
  30. package/lib/components/{tableview/table → table}/models/table.interface.d.ts +3 -1
  31. package/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.d.ts +8 -0
  32. package/lib/components/table/table.component.d.ts +125 -0
  33. package/lib/components/tableview/index.d.ts +0 -3
  34. package/lib/components/tableview/tableview.component.d.ts +3 -3
  35. package/lib/descriptors/editor/editor.descriptor.d.ts +1 -1
  36. package/lib/descriptors/table/table.descriptor.d.ts +15 -12
  37. package/lib/descriptors/tableview/tableview.descriptor.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/scss/mng-overrides/_theme_datatable.scss +24 -10
  40. package/scss/v2/theme/theme-base/mng/_mng_theme_datatable.scss +24 -9
  41. package/scss/v2/theme/theme-dark/_variables.scss +24 -12
  42. package/scss/v2/theme/theme-dark/blue/theme.scss +4 -4
  43. package/scss/v2/theme/theme-light/_variables.scss +23 -11
  44. package/scss/v2/theme/theme-light/blue/theme.scss +2 -2
  45. package/esm2022/lib/components/tableview/models/index.mjs +0 -2
  46. package/esm2022/lib/components/tableview/models/table.event.mjs +0 -16
  47. package/esm2022/lib/components/tableview/table/column-filter-full/column-filter-full.component.mjs +0 -467
  48. package/esm2022/lib/components/tableview/table/column-value/column-value.component.mjs +0 -87
  49. package/esm2022/lib/components/tableview/table/models/index.mjs +0 -2
  50. package/esm2022/lib/components/tableview/table/models/table.interface.mjs +0 -2
  51. package/esm2022/lib/components/tableview/table/table.component.mjs +0 -752
  52. package/lib/components/tableview/models/index.d.ts +0 -1
  53. package/lib/components/tableview/table/models/index.d.ts +0 -1
  54. package/lib/components/tableview/table/table.component.d.ts +0 -147
  55. /package/lib/components/{tableview → table}/models/table.event.d.ts +0 -0
@@ -458,4 +458,4 @@ export class TableviewDynamicDescriptor extends TableviewDynamicDescriptorInt {
458
458
  return new TableviewDynamicDescriptorInt(model);
459
459
  }
460
460
  }
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL3RhYmxldmlldy90YWJsZXZpZXcuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLGdCQUFnQixFQUEwRSxNQUFNLFdBQVcsQ0FBQztBQUV0SSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBbUIsZUFBZSxFQUF1QixzQkFBc0IsRUFBNkIsTUFBTSxVQUFVLENBQUM7QUFFcEksT0FBTyxFQUF3QixjQUFjLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHNUcsTUFBTSxPQUFPLHVCQUF1QjtJQWNoQyxZQUFzQixLQUFzQztRQUZsRCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUczQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxPQUFPLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENB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WUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxJQUFJO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDZCQUE2QjtJQUN6RTtRQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFtQixFQUFFLGFBQXNCLEVBQUUsV0FBcUM7UUFDbkcsT0FBTyxJQUFJLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQU0sVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQTJCO1FBQy9DLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZpZWxkVmFsaWRhdG9yRm59IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUvbGliL21vZGVscy9jb25maWcnO1xuXG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXIsIElUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtNbmdJbnRlcm5hbEVycm9yLCBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0FycmF5SXRlbVR5cGUsIENsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGUsIElkVHlwZSwgTnVsbGFibGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7TW9kZWxVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7QUZpZWxkRGVzY3JpcHRvciwgRWRpdG9yRGVzY3JpcHRvciwgRWRpdG9yRGVzY3JpcHRvckluc3QsIEZpZWxkSW5wdXREZXNjcmlwdG9yVHlwZSwgRmllbGRMb29rdXBQcm92aWRlclR5cGV9IGZyb20gJy4uL2VkaXRvcic7XG5pbXBvcnQge0lGaWVsZHNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL2VkaXRvci9pbnRlcm5hbC9lZGl0b3ItZmllbGRzLm1vZGVsJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3IsIFRhYmxlRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9ySW5zdCwgVGFibGVEeW5hbWljRGVzY3JpcHRvciwgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3R9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7SUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL3RhYmxlL2ludGVybmFsL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtLCBGaWVsZElucHV0VHlwZUVudW0sIFRhYmxldmlld0VkaXRvclR5cGVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0lUYWJsZXZpZXdEZXNjcmlwdG9ySW50ZXJuYWx9IGZyb20gJy4vaW50ZXJuYWwvdGFibGV2aWV3Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPlxuICAgIGltcGxlbWVudHMgSVRhYmxldmlld0Rlc2NyaXB0b3JJbnRlcm5hbDxUYWJsZXZpZXdNb2RlbD4sIElDb2x1bW5zTWFuYWdlSW50ZXJmYWNlPFRhYmxldmlld01vZGVsPiwgSUZpZWxkc01hbmFnZUludGVyZmFjZTxUYWJsZXZpZXdNb2RlbD5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxldmlld01vZGVsPjtcblxuICAgIHByb3RlY3RlZCBfdGFibGU6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+O1xuICAgIHByb3RlY3RlZCBfZGV0YWlsc0VkaXRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+O1xuICAgIHByb3RlY3RlZCBfYWRkRWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD47XG4gICAgcHJvdGVjdGVkIF9lZGl0RWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD47XG5cbiAgICBwcm90ZWN0ZWQgX3RhYmxlVGl0bGU/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2lzTG9jYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZXZpZXdNb2RlbD4pIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fdGFibGUgPSBUYWJsZURlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsKTtcbiAgICAgICAgdGhpcy5fdGFibGVUaXRsZSA9IGAke3RoaXMuX21vZGVsLmkxOG5CYXNlS2V5fS5uYW1lYDtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IEVkaXRvckRlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKTtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gRWRpdG9yRGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwsIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IgPSBFZGl0b3JEZXNjcmlwdG9yLmZyb21Nb2RlbChtb2RlbCwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGV0YWlsc0VkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbHNFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZGRFZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0RWRpdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVRpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZSA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yRGVzY3JpcHRvcnMoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZXRhaWxzRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWRkRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0RGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgbmV3IGNvcHkgb2YgZWRpdG9yIGRlc2NyaXB0b3IgYW5kIG1ha2VzIGl0IGRpc2FibGVkXG4gICAgICogdXNhYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggdGhpczo6d2l0aEVkaXRvckRlc2NyaXB0b3JzLCB3aGVyZSBkZXRhaWxzRGVzY3JpcHRvciBpcyBtYWRlIG5vbi1kaXNhYmxlZFxuICAgICAqIEBwYXJhbSB0eXBlIHdoaWNoIGVkaXRvciB0eXBlIHRvIHNldCB0byBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWRFZGl0b3JEZXNjcmlwdG9yKHR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKTogdGhpcyB7XG4gICAgICAgIGlmICh0eXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gdGhpcy5fZWRpdEVkaXRvci5jb3B5KCkud2l0aERpc2FibGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IHRoaXMuX2RldGFpbHNFZGl0b3IuY29weSgpLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gdGhpcy5fYWRkRWRpdG9yLmNvcHkoKS53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZVRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgZXhwcmVzc2lvbjogRmllbGRWYWxpZGF0b3JGbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZFZhbGlkYXRpb24obmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5hZGRWYWxpZGF0aW9uKG5hbWUsIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLmFkZFZhbGlkYXRpb24obmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5nZXRDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EZXNjcmlwdG9yPENUPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS5hZGRDb2x1bW5EZXNjcmlwdG9yPENUPihjb2x1bW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWw+KHByb3BlcnR5OiBQcm9wZXJ0eSk6IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgVGFibGV2aWV3TW9kZWwsIFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uVW5zYWZlPENvbHVtbk1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxldmlld01vZGVsKVtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLmFkZENvbHVtbnMoLi4ucHJvcGVydGllcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwsIGVkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFRhYmxldmlld01vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGVkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bSk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUYWJsZXZpZXdNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgc3dpdGNoIChlZGl0b3JUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRFZGl0b3IuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FzZSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEVkaXRvci5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbHNFZGl0b3IuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FzZSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IucmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgVGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpZWxkTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihwcm9wZXJ0eTogUHJvcGVydHkpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkVW5zYWZlPEZpZWxkTW9kZWwgPSBGaWVsZElucHV0RGVzY3JpcHRvclR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZFVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkcyguLi5wcm9wZXJ0aWVzOiAoa2V5b2YgVGFibGV2aWV3TW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRGaWVsZChwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmllbGRUb0VkaXRBbmRBZGQ8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIFRhYmxldmlld01vZGVsLCBGaWVsZFZhbHVlPikge1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbG9va3VwIGZpZWxkLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB0eXBlIE1vZGVsJ3MgY2xhc3MgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmllbGRNb2RlbCA9IE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHR5cGU/OiBDbGFzc1R5cGU8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlPzogQ2xhc3NUeXBlPEZpZWxkTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3BlcnR5QXNWYWx1ZVVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gTnVsbGFibGU8SWRUeXBlPj4ocHJvcGVydHk6IHN0cmluZywgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvcGVydHlBc1ZhbHVlVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBvcHRpb25zVmFsdWVQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyPFxuICAgICAgICBTZXJ2aWNlVHlwZSxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgRmllbGRNb2RlbCA9IE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPiwgdHlwZT86IENsYXNzVHlwZTxGaWVsZE1vZGVsPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXI8U2VydmljZVR5cGUsIFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgcHJvdmlkZXIsIHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+LFxuICAgICAgICB0eXBlPzogQ2xhc3NUeXBlPEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHByb3ZpZGVyLCB0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cEVudW0ocHJvcGVydHksIGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZTogRW51bVR5cGUsIG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwRW51bVVuc2FmZShwcm9wZXJ0eSwgZW51bVR5cGUsIG9wdGlvbnMsIG5hbWVBc1ZhbHVlLCBvcHRpb25zVGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlFZGl0b3I8UHJvcGVydHksIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmllbGRNb2RlbCA9IEFycmF5SXRlbVR5cGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8UHJvcGVydHksIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JXaXRoUHJvdmlkZXI8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIFNlcnZpY2VUeXBlLFxuICAgICAgICBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yV2l0aFByb3ZpZGVyPFByb3BlcnR5LCBTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yV2l0aFByb3ZpZGVyVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZT5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTWFueVRvTWFueUVkaXRvcldpdGhQcm92aWRlclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLmNyZWF0ZVRhYkdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmNyZWF0ZVRhYkdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5jcmVhdGVUYWJHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5jcmVhdGVGaWVsZEdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmNyZWF0ZUZpZWxkR3JvdXAobmFtZSwgdGl0bGUpO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLmNyZWF0ZUZpZWxkR3JvdXAobmFtZSwgdGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICBjb25zdCB0YWJsZXZpZXcgPSBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3QodGhpcy5fbW9kZWwuY29weSgpKTtcbiAgICAgICAgdGFibGV2aWV3Ll90YWJsZSA9IHRoaXMuX3RhYmxlLmNvcHkoKTtcbiAgICAgICAgdGFibGV2aWV3Ll9kZXRhaWxzRWRpdG9yID0gdGhpcy5fZGV0YWlsc0VkaXRvci5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fYWRkRWRpdG9yID0gdGhpcy5fYWRkRWRpdG9yLmNvcHkoKTtcbiAgICAgICAgdGFibGV2aWV3Ll9lZGl0RWRpdG9yID0gdGhpcy5fZWRpdEVkaXRvci5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fdGFibGVUaXRsZSA9IHRoaXMuX3RhYmxlVGl0bGU7XG4gICAgICAgIHRhYmxldmlldy5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgcmV0dXJuIHRhYmxldmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGNvbHVtbiBhbmQgZmllbGQgd2l0aCBjdXN0b20gdHlwZSwgZm9yIGV4YW1wbGUgY3VycmVuY3lcbiAgICAgKiBpZiBmaWVsZCBleGlzdHMsIGl0IGlzIHJlcGxhY2VkXG4gICAgICogRE8gTk9UIFVTRSBXSVRIIFRZUEVTIFdIRVJFIEFSR1MgQVJFIFJFUVVJUkVEIC0gRVJST1IgV0lMTCBCRSBUSFJPV05cbiAgICAgKiBmb3IgZW51bSB1c2Ugd2l0aEVudW1UeXBlXG4gICAgICogZm9yIGN1c3RvbSBjbGFzcyB1c2Ugd2l0aENsYXNzVHlwZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBuYW1lIG9mIGZpZWxkXG4gICAgICogQHBhcmFtIGNvbHVtblR5cGUgcmVxdWlyZWQgY29sdW1uIHR5cGVcbiAgICAgKiBAcGFyYW0gZmllbGRUeXBlIG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQgaXQgaXMgY29udmVydGVkIGZyb20gY29sdW1uIHR5cGVcbiAgICAgKiBAcGFyYW0gY29sdW1uRGlzcGxheVR5cGUgb3B0aW9uYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkVHlwZShwcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwsIGNvbHVtblR5cGU6IENvbHVtblR5cGVFbnVtLCBmaWVsZFR5cGU/OiBGaWVsZElucHV0VHlwZUVudW0sIGNvbHVtbkRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBjb2x1bW5UeXBlLCBmaWVsZFR5cGUsIGNvbHVtbkRpc3BsYXlUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBjb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtLCBjb2x1bW5EaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZFR5cGUgY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fTogTW9kZWwgdHlwZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZUVudW0uRW51bSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoJ0RvIG5vdCB1c2Ugd2l0aCB0eXBlcyB3aGVyZSBhcmdzIGFyZSByZXF1aXJlZCcsIHtuYW1lOiAnVGFibGV2aWV3RGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZFR5cGUgPz89IFRhYmxldmlld1V0aWwudG9GaWVsZElucHV0VHlwZUZyb21Db2x1bW5UeXBlKGNvbHVtblR5cGUsIGNvbHVtbkRpc3BsYXlUeXBlKTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG5cbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHksIGNvbHVtblR5cGUsIGNvbHVtbkRpc3BsYXlUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5LCBmaWVsZFR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eSwgZmllbGRUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5LCBmaWVsZFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBjb2x1bW4gd2l0aCBlbnVtIHR5cGVcbiAgICAgKiBpZiBmaWVsZHMgZXhpc3RzLCBpdCBpcyByZXBsYWNlZFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIGVudW1UeXBlIHR5cGUgb2YgZW51bVxuICAgICAqIEBwYXJhbSBmaWVsZFR5cGUgdHlwZSBvZiBmaWVsZCwgb3B0aW9uYWwsIGRlZmF1bHQgaXMgVGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTW9kaWZpZWRFbnVtKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgZW51bVR5cGU/OiBFbnVtVHlwZSwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtVHlwZSwgZmllbGRUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkRW51bVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZT86IEVudW1UeXBlLCBmaWVsZFR5cGU/OiBGaWVsZElucHV0VHlwZUVudW0pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGB3aXRoTW9kaWZpZWRFbnVtIGNhbm5vdCBiZSBleGVjdXRlZCBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eX06IE1vZGVsIHR5cGUgaXMgbm90IGRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVEZWYuZmllbGRUeXBlID0gZmllbGRUeXBlID8/IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuXG4gICAgICAgICAgICB0aGlzLl90YWJsZS53aXRoQ29sdW1uTW9kaWZpZWRFbnVtVW5zYWZlKHByb3BlcnR5LCBlbnVtVHlwZSk7XG4gICAgICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZShwcm9wZXJ0eSwgZW51bVR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoRmllbGRNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHksIGVudW1UeXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2FkZEVkaXRvci53aXRoRmllbGRNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHksIGVudW1UeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBjb2x1bW4gd2l0aCBjdXN0b20gY2xhc3MgdHlwZVxuICAgICAqIGZpZWxkIGlzIGdlbmVyYXRlZCBvbmx5IGlmIGxvb2t1cFByb3ZpZGVyIGlzIHByb3ZpZGVkXG4gICAgICogQHBhcmFtIHByb3BlcnR5IHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlIG9mIG9iamVjdFxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICogQHBhcmFtIGxvb2t1cFByb3ZpZGVyXG4gICAgICogQHBhcmFtIG9wdGlvbnNMYWJlbFByb3BlcnR5XG4gICAgICogQHBhcmFtIGZpbHRlclByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RpZmllZExvb2t1cDxMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgdHlwZT86IENsYXNzVHlwZTxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cFByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnNMYWJlbFByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICBmaWx0ZXJQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTW9kaWZpZWRMb29rdXBVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCB0eXBlLCBsb29rdXBQcm92aWRlciwgdGl0bGVQcm9wZXJ0eSwgb3B0aW9uc0xhYmVsUHJvcGVydHksIGZpbHRlclByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgdHlwZT86IENsYXNzVHlwZTxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cFByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnNMYWJlbFByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICBmaWx0ZXJQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZExvb2t1cCBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0eXBlID8/PSBhdHRyaWJ1dGVEZWYuY2xhc3NUeXBlID8/IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShhdHRyaWJ1dGVEZWYudHlwZSk7XG4gICAgICAgICAgICB0aXRsZVByb3BlcnR5ID8/PSB0eXBlID8gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZSh0eXBlKSA/PyB1bmRlZmluZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBvcHRpb25zTGFiZWxQcm9wZXJ0eSA/Pz0gdGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuXG4gICAgICAgICAgICBpZiAobG9va3VwUHJvdmlkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZExvb2t1cFVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5LCBmaWx0ZXJQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlKHByb3BlcnR5LCBsb29rdXBQcm92aWRlciwgb3B0aW9uc0xhYmVsUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmUocHJvcGVydHksIGxvb2t1cFByb3ZpZGVyLCBvcHRpb25zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdEVkaXRvci53aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fdGFibGUuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpdGhHZXR0ZXIodmFsdWUgPT4gdmFsdWU/Llt0aXRsZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgTG9jYWxpemF0aW9uTW9kZWwgPSBBcnJheUl0ZW1UeXBlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uTW9kZWw+LFxuICAgICAgICBsb2NhbGVQcm9wZXJ0eToga2V5b2YgTG9jYWxpemF0aW9uTW9kZWxcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgbW9kZWwsIGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvY2FsaXplZFVuc2FmZTxMb2NhbGl6YXRpb25Nb2RlbD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxMb2NhbGl6YXRpb25Nb2RlbD4sIGxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoTG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkobG9jYWxlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5kZXRhaWxzRWRpdG9yLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSwgbW9kZWwsIGxvY2FsZVByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRFZGl0b3IubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5LCBtb2RlbCwgbG9jYWxlUHJvcGVydHkpO1xuICAgICAgICB0aGlzLmVkaXRFZGl0b3IubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5LCBtb2RlbCwgbG9jYWxlUHJvcGVydHkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0Rlc2NyaXB0b3IgZXh0ZW5kcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE1vZGVsRGVzY3JpcHRvci5jcmVhdGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8VGFibGV2aWV3TW9kZWw+KFxuICAgICAgICBpZFByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5OiBzdHJpbmcgfCBDbGFzc1R5cGU8dW5rbm93bj5cbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPihNb2RlbERlc2NyaXB0b3IuY3JlYXRlPFRhYmxldmlld01vZGVsPihpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzPFRhYmxldmlld01vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFRhYmxldmlld01vZGVsPixcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5PzogQ2xhc3NUeXBlPHVua25vd24+IHwgc3RyaW5nXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4oTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsPFRhYmxldmlld01vZGVsPihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxldmlld01vZGVsPik6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+KG1vZGVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZGVzY3JpcHRvciBmcm9tIGF0dHJpYnV0ZSBkZWZpbml0aW9uIG9mIG9wZW5hcGkgbW9kZWxcbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZjxUYWJsZXZpZXdNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxUYWJsZXZpZXdNb2RlbD4sXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBNb2RlbERlc2NyaXB0b3IuZnJvbUNsYXNzKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gVGFibGV2aWV3RGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhUYWJsZURlc2NyaXB0b3IoVGFibGVEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSkpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhFZGl0RGVzY3JpcHRvcihFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdCkpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhEZXRhaWxzRGVzY3JpcHRvcihFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscykud2l0aERpc2FibGVkKCkpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhBZGREZXNjcmlwdG9yKEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZih0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpKTtcblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZGVzY3JpcHRvciBmcm9tIGdpdmVuIGF0dHJpYnV0ZSBkZWZpbml0aW9uXG4gICAgICogQHBhcmFtIHR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBjb2x1bW5BdHRyaWJ1dGVzIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHRvIGdlbmVyYXRlIGNvbHVtbnNcbiAgICAgKiBAcGFyYW0gZmllbGRBdHRyaWJ1dGVzIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHRvIGdlbmVyYXRlIGZpZWxkcywgaWYgdW5kZWZpbmVkIGNvbHVtbkRlZmluaXRpb24gaXMgdXNlZCwgaWYgbnVsbCBlZGl0b3JzIGFyZSBub3QgZ2VuZXJhdGVkXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmPFRhYmxldmlld01vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFRhYmxldmlld01vZGVsPixcbiAgICAgICAgY29sdW1uQXR0cmlidXRlczogVGFibGV2aWV3QXR0cmlidXRlRGVmW10sXG4gICAgICAgIGZpZWxkQXR0cmlidXRlcz86IFRhYmxldmlld0F0dHJpYnV0ZURlZltdIHwgbnVsbCxcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWxcbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gVGFibGV2aWV3RGVzY3JpcHRvci5mcm9tTW9kZWwoTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5KSk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aFRhYmxlRGVzY3JpcHRvcihUYWJsZURlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGNvbHVtbkF0dHJpYnV0ZXMsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpKTtcblxuICAgICAgICBpZiAoZmllbGRBdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhFZGl0RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBmaWVsZEF0dHJpYnV0ZXMgPz8gY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhEZXRhaWxzRGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBmaWVsZEF0dHJpYnV0ZXMgPz8gY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhBZGREZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGZpZWxkQXR0cmlidXRlcyA/PyBjb2x1bW5BdHRyaWJ1dGVzLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQgZXh0ZW5kcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuICAgICAgICB0aGlzLl90YWJsZSA9IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IuZnJvbU1vZGVsKHRoaXMubW9kZWwpO1xuICAgICAgICBzdXBlci5fdGFibGVUaXRsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBjdXN0b20gdGFibGUgZGVzY3JpcHRvclxuICAgICAqIEBwYXJhbSBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUYWJsZURlc2NyaXB0b3IoZGVzY3JpcHRvcjogVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSBkZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHZpc2liaWxpdHkgaGlkZGVuIHN0YXRlIHRvIGNvbHVtbiB3aXRoIGdpdmVuIHByb3BlcnR5XG4gICAgICogZXF1YWxzIHRvIGJlIHJlbW92aW5nIGluIGF1dG8gYW5kIGJhc2UgdGFibGV2aWV3IGRlc2NyaXB0b3JcbiAgICAgKiAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVudGl0eUZvclRyYW5zbGF0aW9ucyhpMThuQmFzZUtleTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLm1vZGVsLndpdGhJMThuQmFzZShpMThuQmFzZUtleSk7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IubW9kZWwud2l0aEkxOG5CYXNlKGkxOG5CYXNlS2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgdGFibGV2aWV3IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGFibGUgPSB0aGlzLl90YWJsZS5jb3B5KCk7XG4gICAgICAgIGRlc2NyaXB0b3IuX3RhYmxlVGl0bGUgPSB0aGlzLl90YWJsZVRpdGxlO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE1vZGVsRGVzY3JpcHRvci5jcmVhdGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8YW55Pik6IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludChNb2RlbERlc2NyaXB0b3IuY3JlYXRlPGFueT4oaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgaTE4bkJhc2VLZXkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbChtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pOiBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludCB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQobW9kZWwpO1xuICAgIH1cbn1cbiJdfQ==
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL3RhYmxldmlldy90YWJsZXZpZXcuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLGdCQUFnQixFQUEwRSxNQUFNLFdBQVcsQ0FBQztBQUV0SSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBbUIsZUFBZSxFQUF1QixzQkFBc0IsRUFBNkIsTUFBTSxVQUFVLENBQUM7QUFFcEksT0FBTyxFQUF3QixjQUFjLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHNUcsTUFBTSxPQUFPLHVCQUF1QjtJQWNoQyxZQUFzQixLQUFzQztRQUZsRCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUczQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxPQUFPLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENB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WUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxJQUFJO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDZCQUE2QjtJQUN6RTtRQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFtQixFQUFFLGFBQXNCLEVBQUUsV0FBcUM7UUFDbkcsT0FBTyxJQUFJLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQU0sVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQTJCO1FBQy9DLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZpZWxkVmFsaWRhdG9yRm59IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUvbGliL21vZGVscy9jb25maWcnO1xuXG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXIsIElUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtNbmdJbnRlcm5hbEVycm9yLCBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0FycmF5SXRlbVR5cGUsIENsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGUsIElkVHlwZSwgTnVsbGFibGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7TW9kZWxVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7QUZpZWxkRGVzY3JpcHRvciwgRWRpdG9yRGVzY3JpcHRvciwgRWRpdG9yRGVzY3JpcHRvckluc3QsIEZpZWxkSW5wdXREZXNjcmlwdG9yVHlwZSwgRmllbGRMb29rdXBQcm92aWRlclR5cGV9IGZyb20gJy4uL2VkaXRvcic7XG5pbXBvcnQge0lGaWVsZHNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL2VkaXRvci9pbnRlcm5hbC9lZGl0b3ItZmllbGRzLm1vZGVsJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3IsIFRhYmxlRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9ySW5zdCwgVGFibGVEeW5hbWljRGVzY3JpcHRvciwgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3R9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7SUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL3RhYmxlL2ludGVybmFsL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtLCBGaWVsZElucHV0VHlwZUVudW0sIFRhYmxldmlld0VkaXRvclR5cGVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0lUYWJsZXZpZXdEZXNjcmlwdG9ySW50ZXJuYWx9IGZyb20gJy4vaW50ZXJuYWwvdGFibGV2aWV3Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPlxuICAgIGltcGxlbWVudHMgSVRhYmxldmlld0Rlc2NyaXB0b3JJbnRlcm5hbDxUYWJsZXZpZXdNb2RlbD4sIElDb2x1bW5zTWFuYWdlSW50ZXJmYWNlPFRhYmxldmlld01vZGVsPiwgSUZpZWxkc01hbmFnZUludGVyZmFjZTxUYWJsZXZpZXdNb2RlbD5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxldmlld01vZGVsPjtcblxuICAgIHByb3RlY3RlZCBfdGFibGU6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+O1xuICAgIHByb3RlY3RlZCBfZGV0YWlsc0VkaXRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+O1xuICAgIHByb3RlY3RlZCBfYWRkRWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD47XG4gICAgcHJvdGVjdGVkIF9lZGl0RWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD47XG5cbiAgICBwcm90ZWN0ZWQgX3RhYmxlVGl0bGU/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2lzTG9jYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZXZpZXdNb2RlbD4pIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fdGFibGUgPSBUYWJsZURlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsKTtcbiAgICAgICAgdGhpcy5fdGFibGVUaXRsZSA9IGAke3RoaXMuX21vZGVsLmkxOG5CYXNlS2V5fS5uYW1lYDtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IEVkaXRvckRlc2NyaXB0b3IuZnJvbU1vZGVsKG1vZGVsLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKTtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gRWRpdG9yRGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwsIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IgPSBFZGl0b3JEZXNjcmlwdG9yLmZyb21Nb2RlbChtb2RlbCwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGV0YWlsc0VkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbHNFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZGRFZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0RWRpdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVRpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZSA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yRGVzY3JpcHRvcnMoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZXRhaWxzRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWRkRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0RGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgbmV3IGNvcHkgb2YgZWRpdG9yIGRlc2NyaXB0b3IgYW5kIG1ha2VzIGl0IGRpc2FibGVkXG4gICAgICogdXNhYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggdGhpczo6d2l0aEVkaXRvckRlc2NyaXB0b3JzLCB3aGVyZSBkZXRhaWxzRGVzY3JpcHRvciBpcyBtYWRlIG5vbi1kaXNhYmxlZFxuICAgICAqIEBwYXJhbSB0eXBlIHdoaWNoIGVkaXRvciB0eXBlIHRvIHNldCB0byBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWRFZGl0b3JEZXNjcmlwdG9yKHR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKTogdGhpcyB7XG4gICAgICAgIGlmICh0eXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0RWRpdG9yID0gdGhpcy5fZWRpdEVkaXRvci5jb3B5KCkud2l0aERpc2FibGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvciA9IHRoaXMuX2RldGFpbHNFZGl0b3IuY29weSgpLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yID0gdGhpcy5fYWRkRWRpdG9yLmNvcHkoKS53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxlVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZVRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgZXhwcmVzc2lvbjogRmllbGRWYWxpZGF0b3JGbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZFZhbGlkYXRpb24obmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5hZGRWYWxpZGF0aW9uKG5hbWUsIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLmFkZFZhbGlkYXRpb24obmFtZSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxldmlld01vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZS5nZXRDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW4ocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EZXNjcmlwdG9yPENUPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFRhYmxldmlld01vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS5hZGRDb2x1bW5EZXNjcmlwdG9yPENUPihjb2x1bW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWw+KHByb3BlcnR5OiBQcm9wZXJ0eSk6IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgVGFibGV2aWV3TW9kZWwsIFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGUuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uVW5zYWZlPENvbHVtbk1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxldmlld01vZGVsKVtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLmFkZENvbHVtbnMoLi4ucHJvcGVydGllcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwsIGVkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFRhYmxldmlld01vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGVkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bSk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUYWJsZXZpZXdNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgc3dpdGNoIChlZGl0b3JUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRFZGl0b3IuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FzZSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEVkaXRvci5nZXRGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBjYXNlIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbHNFZGl0b3IuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICAgICAgY2FzZSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2FkZEVkaXRvci5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IucmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgVGFibGV2aWV3TW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHRoaXMuX2VkaXRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpZWxkTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldPihwcm9wZXJ0eTogUHJvcGVydHkpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkVW5zYWZlPEZpZWxkTW9kZWwgPSBGaWVsZElucHV0RGVzY3JpcHRvclR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZFVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkcyguLi5wcm9wZXJ0aWVzOiAoa2V5b2YgVGFibGV2aWV3TW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRGaWVsZChwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmllbGRUb0VkaXRBbmRBZGQ8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIFRhYmxldmlld01vZGVsLCBGaWVsZFZhbHVlPikge1xuICAgICAgICB0aGlzLl9hZGRFZGl0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbG9va3VwIGZpZWxkLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB0eXBlIE1vZGVsJ3MgY2xhc3MgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmllbGRNb2RlbCA9IE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHR5cGU/OiBDbGFzc1R5cGU8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlPzogQ2xhc3NUeXBlPEZpZWxkTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3BlcnR5QXNWYWx1ZVVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gTnVsbGFibGU8SWRUeXBlPj4ocHJvcGVydHk6IHN0cmluZywgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvcGVydHlBc1ZhbHVlVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBvcHRpb25zVmFsdWVQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyPFxuICAgICAgICBTZXJ2aWNlVHlwZSxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgRmllbGRNb2RlbCA9IE5vbk51bGxhYmxlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPiwgdHlwZT86IENsYXNzVHlwZTxGaWVsZE1vZGVsPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXI8U2VydmljZVR5cGUsIFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgcHJvdmlkZXIsIHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+LFxuICAgICAgICB0eXBlPzogQ2xhc3NUeXBlPEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHByb3ZpZGVyLCB0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZExvb2t1cEVudW0ocHJvcGVydHksIGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCk7XG4gICAgICAgIHRoaXMuYWRkRmllbGRUb0VkaXRBbmRBZGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZTogRW51bVR5cGUsIG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTG9va3VwRW51bVVuc2FmZShwcm9wZXJ0eSwgZW51bVR5cGUsIG9wdGlvbnMsIG5hbWVBc1ZhbHVlLCBvcHRpb25zVGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlFZGl0b3I8UHJvcGVydHksIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgRmllbGRNb2RlbCA9IEFycmF5SXRlbVR5cGU8VGFibGV2aWV3TW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZGV0YWlsc0VkaXRvci5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8UHJvcGVydHksIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkVG9FZGl0QW5kQWRkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JXaXRoUHJvdmlkZXI8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIFNlcnZpY2VUeXBlLFxuICAgICAgICBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxUYWJsZXZpZXdNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gVGFibGV2aWV3TW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2RldGFpbHNFZGl0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yV2l0aFByb3ZpZGVyPFByb3BlcnR5LCBTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yV2l0aFByb3ZpZGVyVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZT5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9kZXRhaWxzRWRpdG9yLmFkZEZpZWxkTWFueVRvTWFueUVkaXRvcldpdGhQcm92aWRlclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZFRvRWRpdEFuZEFkZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXRhaWxzRWRpdG9yLmNyZWF0ZVRhYkdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmNyZWF0ZVRhYkdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fZWRpdEVkaXRvci5jcmVhdGVUYWJHcm91cChuYW1lLCB0aXRsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci5jcmVhdGVGaWVsZEdyb3VwKG5hbWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fYWRkRWRpdG9yLmNyZWF0ZUZpZWxkR3JvdXAobmFtZSwgdGl0bGUpO1xuICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLmNyZWF0ZUZpZWxkR3JvdXAobmFtZSwgdGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICBjb25zdCB0YWJsZXZpZXcgPSBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3QodGhpcy5fbW9kZWwuY29weSgpKTtcbiAgICAgICAgdGFibGV2aWV3Ll90YWJsZSA9IHRoaXMuX3RhYmxlLmNvcHkoKTtcbiAgICAgICAgdGFibGV2aWV3Ll9kZXRhaWxzRWRpdG9yID0gdGhpcy5fZGV0YWlsc0VkaXRvci5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fYWRkRWRpdG9yID0gdGhpcy5fYWRkRWRpdG9yLmNvcHkoKTtcbiAgICAgICAgdGFibGV2aWV3Ll9lZGl0RWRpdG9yID0gdGhpcy5fZWRpdEVkaXRvci5jb3B5KCk7XG4gICAgICAgIHRhYmxldmlldy5fdGFibGVUaXRsZSA9IHRoaXMuX3RhYmxlVGl0bGU7XG4gICAgICAgIHRhYmxldmlldy5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgcmV0dXJuIHRhYmxldmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGNvbHVtbiBhbmQgZmllbGQgd2l0aCBjdXN0b20gdHlwZSwgZm9yIGV4YW1wbGUgY3VycmVuY3lcbiAgICAgKiBpZiBmaWVsZCBleGlzdHMsIGl0IGlzIHJlcGxhY2VkXG4gICAgICogRE8gTk9UIFVTRSBXSVRIIFRZUEVTIFdIRVJFIEFSR1MgQVJFIFJFUVVJUkVEIC0gRVJST1IgV0lMTCBCRSBUSFJPV05cbiAgICAgKiBmb3IgZW51bSB1c2Ugd2l0aEVudW1UeXBlXG4gICAgICogZm9yIGN1c3RvbSBjbGFzcyB1c2Ugd2l0aENsYXNzVHlwZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBuYW1lIG9mIGZpZWxkXG4gICAgICogQHBhcmFtIGNvbHVtblR5cGUgcmVxdWlyZWQgY29sdW1uIHR5cGVcbiAgICAgKiBAcGFyYW0gZmllbGRUeXBlIG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQgaXQgaXMgY29udmVydGVkIGZyb20gY29sdW1uIHR5cGVcbiAgICAgKiBAcGFyYW0gY29sdW1uRGlzcGxheVR5cGUgb3B0aW9uYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkVHlwZShwcm9wZXJ0eToga2V5b2YgVGFibGV2aWV3TW9kZWwsIGNvbHVtblR5cGU6IENvbHVtblR5cGVFbnVtLCBmaWVsZFR5cGU/OiBGaWVsZElucHV0VHlwZUVudW0sIGNvbHVtbkRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBjb2x1bW5UeXBlLCBmaWVsZFR5cGUsIGNvbHVtbkRpc3BsYXlUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBjb2x1bW5UeXBlOiBDb2x1bW5UeXBlRW51bSwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtLCBjb2x1bW5EaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZFR5cGUgY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fTogTW9kZWwgdHlwZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZUVudW0uRW51bSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoJ0RvIG5vdCB1c2Ugd2l0aCB0eXBlcyB3aGVyZSBhcmdzIGFyZSByZXF1aXJlZCcsIHtuYW1lOiAnVGFibGV2aWV3RGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZFR5cGUgPz89IFRhYmxldmlld1V0aWwudG9GaWVsZElucHV0VHlwZUZyb21Db2x1bW5UeXBlKGNvbHVtblR5cGUsIGNvbHVtbkRpc3BsYXlUeXBlKTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG5cbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHksIGNvbHVtblR5cGUsIGNvbHVtbkRpc3BsYXlUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5LCBmaWVsZFR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkVHlwZVVuc2FmZShwcm9wZXJ0eSwgZmllbGRUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5LCBmaWVsZFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBjb2x1bW4gd2l0aCBlbnVtIHR5cGVcbiAgICAgKiBpZiBmaWVsZHMgZXhpc3RzLCBpdCBpcyByZXBsYWNlZFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIGVudW1UeXBlIHR5cGUgb2YgZW51bVxuICAgICAqIEBwYXJhbSBmaWVsZFR5cGUgdHlwZSBvZiBmaWVsZCwgb3B0aW9uYWwsIGRlZmF1bHQgaXMgVGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTW9kaWZpZWRFbnVtKHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgZW51bVR5cGU/OiBFbnVtVHlwZSwgZmllbGRUeXBlPzogRmllbGRJbnB1dFR5cGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtVHlwZSwgZmllbGRUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkRW51bVVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZT86IEVudW1UeXBlLCBmaWVsZFR5cGU/OiBGaWVsZElucHV0VHlwZUVudW0pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGB3aXRoTW9kaWZpZWRFbnVtIGNhbm5vdCBiZSBleGVjdXRlZCBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eX06IE1vZGVsIHR5cGUgaXMgbm90IGRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVEZWYuZmllbGRUeXBlID0gZmllbGRUeXBlID8/IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuXG4gICAgICAgICAgICB0aGlzLl90YWJsZS53aXRoQ29sdW1uTW9kaWZpZWRFbnVtVW5zYWZlKHByb3BlcnR5LCBlbnVtVHlwZSk7XG4gICAgICAgICAgICB0aGlzLl9lZGl0RWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZShwcm9wZXJ0eSwgZW51bVR5cGUpO1xuICAgICAgICAgICAgdGhpcy5fZGV0YWlsc0VkaXRvci53aXRoRmllbGRNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHksIGVudW1UeXBlKTtcbiAgICAgICAgICAgIHRoaXMuX2FkZEVkaXRvci53aXRoRmllbGRNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHksIGVudW1UeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBjb2x1bW4gd2l0aCBjdXN0b20gY2xhc3MgdHlwZVxuICAgICAqIGZpZWxkIGlzIGdlbmVyYXRlZCBvbmx5IGlmIGxvb2t1cFByb3ZpZGVyIGlzIHByb3ZpZGVkXG4gICAgICogQHBhcmFtIHByb3BlcnR5IHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlIG9mIG9iamVjdFxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICogQHBhcmFtIGxvb2t1cFByb3ZpZGVyXG4gICAgICogQHBhcmFtIG9wdGlvbnNMYWJlbFByb3BlcnR5XG4gICAgICogQHBhcmFtIGZpbHRlclByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RpZmllZExvb2t1cDxMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgdHlwZT86IENsYXNzVHlwZTxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cFByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnNMYWJlbFByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICBmaWx0ZXJQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTW9kaWZpZWRMb29rdXBVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCB0eXBlLCBsb29rdXBQcm92aWRlciwgdGl0bGVQcm9wZXJ0eSwgb3B0aW9uc0xhYmVsUHJvcGVydHksIGZpbHRlclByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1vZGlmaWVkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgdHlwZT86IENsYXNzVHlwZTxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cFByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnNMYWJlbFByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICBmaWx0ZXJQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYHdpdGhNb2RpZmllZExvb2t1cCBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlRGVmID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHIgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0eXBlID8/PSBhdHRyaWJ1dGVEZWYuY2xhc3NUeXBlID8/IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShhdHRyaWJ1dGVEZWYudHlwZSk7XG4gICAgICAgICAgICB0aXRsZVByb3BlcnR5ID8/PSB0eXBlID8gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZSh0eXBlKSA/PyB1bmRlZmluZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBvcHRpb25zTGFiZWxQcm9wZXJ0eSA/Pz0gdGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZURlZi5jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuXG4gICAgICAgICAgICBpZiAobG9va3VwUHJvdmlkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLndpdGhDb2x1bW5Nb2RpZmllZExvb2t1cFVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5LCBmaWx0ZXJQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkRWRpdG9yLndpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlKHByb3BlcnR5LCBsb29rdXBQcm92aWRlciwgb3B0aW9uc0xhYmVsUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3Iud2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmUocHJvcGVydHksIGxvb2t1cFByb3ZpZGVyLCBvcHRpb25zTGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdEVkaXRvci53aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZShwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIsIG9wdGlvbnNMYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fdGFibGUuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpdGhHZXR0ZXIodmFsdWUgPT4gdmFsdWU/Llt0aXRsZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZXZpZXdNb2RlbCwgTG9jYWxpemF0aW9uTW9kZWwgPSBBcnJheUl0ZW1UeXBlPFRhYmxldmlld01vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uTW9kZWw+LFxuICAgICAgICBsb2NhbGVQcm9wZXJ0eToga2V5b2YgTG9jYWxpemF0aW9uTW9kZWxcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgbW9kZWwsIGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvY2FsaXplZFVuc2FmZTxMb2NhbGl6YXRpb25Nb2RlbD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxMb2NhbGl6YXRpb25Nb2RlbD4sIGxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl90YWJsZS53aXRoTG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkobG9jYWxlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5kZXRhaWxzRWRpdG9yLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSwgbW9kZWwsIGxvY2FsZVByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRFZGl0b3IubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5LCBtb2RlbCwgbG9jYWxlUHJvcGVydHkpO1xuICAgICAgICB0aGlzLmVkaXRFZGl0b3IubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5LCBtb2RlbCwgbG9jYWxlUHJvcGVydHkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld0Rlc2NyaXB0b3IgZXh0ZW5kcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE1vZGVsRGVzY3JpcHRvci5jcmVhdGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8VGFibGV2aWV3TW9kZWw+KFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8dW5rbm93bj5cbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPihNb2RlbERlc2NyaXB0b3IuY3JlYXRlPFRhYmxldmlld01vZGVsPihpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzPFRhYmxldmlld01vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFRhYmxldmlld01vZGVsPixcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5PzogQ2xhc3NUeXBlPHVua25vd24+IHwgc3RyaW5nXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4oTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsPFRhYmxldmlld01vZGVsPihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxldmlld01vZGVsPik6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFRhYmxldmlld01vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+KG1vZGVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZGVzY3JpcHRvciBmcm9tIGF0dHJpYnV0ZSBkZWZpbml0aW9uIG9mIG9wZW5hcGkgbW9kZWxcbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZjxUYWJsZXZpZXdNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxUYWJsZXZpZXdNb2RlbD4sXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBUYWJsZXZpZXdNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsXG4gICAgKTogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8VGFibGV2aWV3TW9kZWw+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBNb2RlbERlc2NyaXB0b3IuZnJvbUNsYXNzKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gVGFibGV2aWV3RGVzY3JpcHRvci5mcm9tTW9kZWwobW9kZWwpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhUYWJsZURlc2NyaXB0b3IoVGFibGVEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSkpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhFZGl0RGVzY3JpcHRvcihFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdCkpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhEZXRhaWxzRGVzY3JpcHRvcihFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhBdXRvQXR0cnNEZWYodHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscykud2l0aERpc2FibGVkKCkpO1xuICAgICAgICBkZXNjcmlwdG9yLndpdGhBZGREZXNjcmlwdG9yKEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZih0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpKTtcblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZGVzY3JpcHRvciBmcm9tIGdpdmVuIGF0dHJpYnV0ZSBkZWZpbml0aW9uXG4gICAgICogQHBhcmFtIHR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBjb2x1bW5BdHRyaWJ1dGVzIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHRvIGdlbmVyYXRlIGNvbHVtbnNcbiAgICAgKiBAcGFyYW0gZmllbGRBdHRyaWJ1dGVzIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHRvIGdlbmVyYXRlIGZpZWxkcywgaWYgdW5kZWZpbmVkIGNvbHVtbkRlZmluaXRpb24gaXMgdXNlZCwgaWYgbnVsbCBlZGl0b3JzIGFyZSBub3QgZ2VuZXJhdGVkXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmPFRhYmxldmlld01vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFRhYmxldmlld01vZGVsPixcbiAgICAgICAgY29sdW1uQXR0cmlidXRlczogVGFibGV2aWV3QXR0cmlidXRlRGVmW10sXG4gICAgICAgIGZpZWxkQXR0cmlidXRlcz86IFRhYmxldmlld0F0dHJpYnV0ZURlZltdIHwgbnVsbCxcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIFRhYmxldmlld01vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgVGFibGV2aWV3TW9kZWxcbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxUYWJsZXZpZXdNb2RlbD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gVGFibGV2aWV3RGVzY3JpcHRvci5mcm9tTW9kZWwoTW9kZWxEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5KSk7XG4gICAgICAgIGRlc2NyaXB0b3Iud2l0aFRhYmxlRGVzY3JpcHRvcihUYWJsZURlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGNvbHVtbkF0dHJpYnV0ZXMsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpKTtcblxuICAgICAgICBpZiAoZmllbGRBdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhFZGl0RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBmaWVsZEF0dHJpYnV0ZXMgPz8gY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhEZXRhaWxzRGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZih0eXBlLCBmaWVsZEF0dHJpYnV0ZXMgPz8gY29sdW1uQXR0cmlidXRlcywgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLndpdGhBZGREZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGZpZWxkQXR0cmlidXRlcyA/PyBjb2x1bW5BdHRyaWJ1dGVzLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQgZXh0ZW5kcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RhYmxlOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuICAgICAgICB0aGlzLl90YWJsZSA9IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IuZnJvbU1vZGVsKHRoaXMubW9kZWwpO1xuICAgICAgICBzdXBlci5fdGFibGVUaXRsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBjdXN0b20gdGFibGUgZGVzY3JpcHRvclxuICAgICAqIEBwYXJhbSBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhUYWJsZURlc2NyaXB0b3IoZGVzY3JpcHRvcjogVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSBkZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHZpc2liaWxpdHkgaGlkZGVuIHN0YXRlIHRvIGNvbHVtbiB3aXRoIGdpdmVuIHByb3BlcnR5XG4gICAgICogZXF1YWxzIHRvIGJlIHJlbW92aW5nIGluIGF1dG8gYW5kIGJhc2UgdGFibGV2aWV3IGRlc2NyaXB0b3JcbiAgICAgKiAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YWJsZS5yZW1vdmVDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVudGl0eUZvclRyYW5zbGF0aW9ucyhpMThuQmFzZUtleTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlLm1vZGVsLndpdGhJMThuQmFzZShpMThuQmFzZUtleSk7XG4gICAgICAgIHRoaXMuX2RldGFpbHNFZGl0b3IubW9kZWwud2l0aEkxOG5CYXNlKGkxOG5CYXNlS2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgdGFibGV2aWV3IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fdGFibGUgPSB0aGlzLl90YWJsZS5jb3B5KCk7XG4gICAgICAgIGRlc2NyaXB0b3IuX3RhYmxlVGl0bGUgPSB0aGlzLl90YWJsZVRpdGxlO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE1vZGVsRGVzY3JpcHRvci5jcmVhdGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8YW55Pik6IFRhYmxldmlld0R5bmFtaWNEZXNjcmlwdG9ySW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludChNb2RlbERlc2NyaXB0b3IuY3JlYXRlPGFueT4oaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgaTE4bkJhc2VLZXkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbChtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pOiBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvckludCB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGV2aWV3RHluYW1pY0Rlc2NyaXB0b3JJbnQobW9kZWwpO1xuICAgIH1cbn1cbiJdfQ==
@@ -169,7 +169,7 @@ export class TableviewUtil {
169
169
  * @param trackProperty string, not required
170
170
  */
171
171
  static generateTableLayoutPrefsKey(typeName, url, trackProperty) {
172
- return `layoutPrefs~~${typeName}~~${trackProperty ?? url.split('?')[0].split('#')[0]}`;
172
+ return `mngTableLayoutPrefs~~${typeName}~~${trackProperty ?? url.split('?')[0].split('#')[0]}`;
173
173
  }
174
174
  /**
175
175
  * Flatten an object of unknown type, used for generating fields and columns in dynamic tableviews
@@ -190,4 +190,4 @@ export class TableviewUtil {
190
190
  return flatten(objectModel);
191
191
  }
192
192
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3RhYmxldmlldy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQW9CLGdCQUFnQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxNQUFNLE9BQU8sYUFBYTthQUNQLGVBQVUsR0FBRyxzQkFBc0IsQ0FBQzthQUNwQyxtQkFBYyxHQUFHLHdIQUF3SCxDQUFDO0lBRXpKOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBSSxJQUFrQjtRQUNsRCxPQUFPLGFBQWEsQ0FBQyxvQ0FBb0MsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1SCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLG9DQUFvQyxDQUFDLFVBQTRDO1FBQzNGLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixNQUFNLElBQUksZ0JBQWdCLENBQUMsdUZBQXVGLEVBQUUsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO1NBQ3RKO1FBQ0QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXhDLE1BQU0scUJBQXFCLEdBQTRCLEVBQUUsQ0FBQztRQUUxRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNoQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJ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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFnQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBVyxFQUFFLE1BQVksRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtnQkFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUV2RCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbHVtbkRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxlJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bSwgRmllbGRJbnB1dFR5cGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge0NsYXNzQXR0cmlidXRlRGVmLCBNbmdJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtUYWJsZXZpZXdBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uL21vZGVscy90YWJsZXZpZXctYXR0ci5tb2RlbCc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld1V0aWwge1xuICAgIHByaXZhdGUgc3RhdGljIF9kYXRlUmVnZXggPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGQvO1xuICAgIHByaXZhdGUgc3RhdGljIF9kYXRlVGltZVJlZ2V4ID0gL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkVChbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZFxcLlxcZCsoWystXVswLTJdXFxkOlswLTVdXFxkfFo/KXwoWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXCtbMC0yXVxcZDpbMC01XVxcZCkpLztcblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYXR0cmlidXRlcyBmcm9tIGNsYXNzIHR5cGUgYW5kIGV4dGVuZHMgdG8gdHlwZWQgZGVmIHdpdGggY29sdW1uIGFuZCBmaWVsZCBlbnVtIHR5cGVcbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRBdHRyaWJ1dGVEZWZNYXA8VD4odHlwZTogQ2xhc3NUeXBlPFQ+KTogVGFibGV2aWV3QXR0cmlidXRlRGVmW10ge1xuICAgICAgICByZXR1cm4gVGFibGV2aWV3VXRpbC5leHBhbmRBdHRyaWJ1dGVEZWZXaXRoVGFibGV2aWV3VHlwZXMoVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBhbmRzIEF0dHJpYnV0ZURlZiB0byBUYWJsZXZpZXdBdHRyaWJ1dGVEZWYgd2l0aCBkZWZpbmVkIGlucHV0IGFuZCBjb2x1bW4gZW51bSB0eXBlXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZXMgb3BlbiBhcGkgc3BlY2lmaWNhdGlvbiBtb2RlbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZXhwYW5kQXR0cmlidXRlRGVmV2l0aFRhYmxldmlld1R5cGVzKGF0dHJpYnV0ZXM/OiBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj4gfCBudWxsKTogVGFibGV2aWV3QXR0cmlidXRlRGVmW10ge1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKCdBdHRyaWJ1dGVEZWYgaXMgbnVsbCwgcHJvYmxlbSB3aXRoIFR5cGVSZWdpc3RyeTo6ZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGU/Jywge25hbWU6ICdUYWJsZXZpZXdVdGlsc0Vycm9yJ30pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVSZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5nZXQoKTtcblxuICAgICAgICBjb25zdCB0YWJsZXZpZXdBdHRyaWJ1dGVEZWY6IFRhYmxldmlld0F0dHJpYnV0ZURlZltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3QgZW51bVR5cGUgPSB0eXBlUmVnaXN0cnkuZmluZEVudW0oYXR0cmlidXRlLnR5cGUpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IGVudW1UeXBlID8gQ29sdW1uVHlwZUVudW0uRW51bSA6IFRhYmxldmlld1V0aWwudG9Db2x1bW5UeXBlKGF0dHJpYnV0ZS50eXBlKTtcbiAgICAgICAgICAgIHRhYmxldmlld0F0dHJpYnV0ZURlZi5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhdHRyaWJ1dGUubmFtZSxcbiAgICAgICAgICAgICAgICBiYXNlTmFtZTogYXR0cmlidXRlLmJhc2VOYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGF0dHJpYnV0ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNvbHVtblR5cGU6IGVudW1UeXBlID8gQ29sdW1uVHlwZUVudW0uRW51bSA6IFRhYmxldmlld1V0aWwudG9Db2x1bW5UeXBlKGF0dHJpYnV0ZS50eXBlKSxcbiAgICAgICAgICAgICAgICBjb2x1bW5EaXNwbGF5VHlwZTogVGFibGV2aWV3VXRpbC50b0NvbHVtbkRpc3BsYXlUeXBlKGNvbHVtblR5cGUsIGF0dHJpYnV0ZS50eXBlKSxcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGU6IFRhYmxldmlld1V0aWwudG9GaWVsZElucHV0VHlwZShhdHRyaWJ1dGUudHlwZSksXG4gICAgICAgICAgICAgICAgZW51bVR5cGU6IHR5cGVSZWdpc3RyeS5maW5kRW51bShhdHRyaWJ1dGUudHlwZSkgYXMgRW51bVR5cGUsXG4gICAgICAgICAgICAgICAgY2xhc3NUeXBlOiB0eXBlUmVnaXN0cnkuZmluZFR5cGUoYXR0cmlidXRlLnR5cGUpIGFzIENsYXNzVHlwZTxhbnk+XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZXZpZXdBdHRyaWJ1dGVEZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydHMgY29sdW1uIHRvIG51bWJlciBvciBkYXRlIG9uIHZhbHVlIGJhc2VkXG4gICAgICogQHBhcmFtIGNvbHVtbiBjb2x1bW4gdG8gYmUgdHJhbnNmb3JtZWRcbiAgICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gY2hlY2sgaWYgYXBwbGljYWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nQ29sdW1uQ29udmVydGVyKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4sIHZhbHVlOiBhbnkpOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0Jvb2xlYW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4uYXNOdW1iZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kYXRlUmVnZXgudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlVGltZVJlZ2V4LnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0RhdGUoJ2RkLiBNTU0geXl5eSBISDptbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0RhdGUoJ2RkLiBNTU0geXl5eScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIHN0cmluZyB0eXBlIHRvIGNvbHVtbiB0eXBlIGVudW0sIGRlZmF1bHQgaXMgc3RyaW5nXG4gICAgICogQHBhcmFtIHByb3BlcnR5VHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgdG9Db2x1bW5UeXBlKHByb3BlcnR5VHlwZTogc3RyaW5nKTogQ29sdW1uVHlwZUVudW0ge1xuICAgICAgICBjb25zdCB0eXBlUmVnaXN0cnkgPSBUeXBlUmVnaXN0cnkuZ2V0KCk7XG4gICAgICAgIGlmICh0eXBlUmVnaXN0cnkuZmluZEVudW0ocHJvcGVydHlUeXBlKSBhcyBFbnVtVHlwZSkge1xuICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gJ2VudW0nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVSZWdpc3RyeS5maW5kVHlwZShwcm9wZXJ0eVR5cGUpIGFzIENsYXNzVHlwZTxhbnk+KSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSAnY2xhc3MnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbHVtblR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW5UeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0b0NvbHVtbkRpc3BsYXlUeXBlKGNvbHVtblR5cGU6IENvbHVtblR5cGVFbnVtLCBwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IENvbHVtbkRpc3BsYXlUeXBlRW51bSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VHlwZSA9PT0gJ2N1cnJlbmN5JyA/IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeSA6IENvbHVtbkRpc3BsYXlUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbHVtbkRpc3BsYXlUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkVudW07XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkNvbXBvbmVudDtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uRGlzcGxheVR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIHN0cmluZyB0eXBlIHRvIHR5cGUgZW51bSwgZGVmYXVsdCBpcyB0ZXh0XG4gICAgICogQHBhcmFtIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0b0ZpZWxkSW5wdXRUeXBlKHByb3BlcnR5OiBzdHJpbmcpOiBGaWVsZElucHV0VHlwZUVudW0ge1xuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuO1xuICAgICAgICAgICAgY2FzZSAnbGFiZWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0YXJlYTtcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDtcbiAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZXBpY2tlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5EYXRlcGlja2VyO1xuICAgICAgICAgICAgY2FzZSAnbWFzayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5NYXNrO1xuICAgICAgICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5GaWxlO1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IGNvbHVtbiB0eXBlIHRvIGVxdWl2YWxlbnQgZmllbGQgaW5wdXQgdHlwZVxuICAgICAqIEBwYXJhbSB0eXBlIGNvbHVtbiB0eXBlXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIGNvbHVtbiBkaXNwbGF5IHR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHRvRmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZSh0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0pOiBGaWVsZElucHV0VHlwZUVudW0ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBkaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5ID8gRmllbGRJbnB1dFR5cGVFbnVtLkN1cnJlbmN5IDogRmllbGRJbnB1dFR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgdGFibGUgbGF5b3V0IHByZWZlcmVuY2VzIGtleSB1c2VkIHdoZW4gc2F2aW5nIHByZWZlcmVuY2VzIHRvIGxvY2Fsc3RvcmFnZVxuICAgICAqIEBwYXJhbSB0eXBlTmFtZSBzdHJpbmcsIHJlcXVpcmVkXG4gICAgICogQHBhcmFtIHVybCBzdHJpbmcsIHJlcXVpcmVkXG4gICAgICogQHBhcmFtIHRyYWNrUHJvcGVydHkgc3RyaW5nLCBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleSh0eXBlTmFtZTogc3RyaW5nLCB1cmw6IHN0cmluZywgdHJhY2tQcm9wZXJ0eT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgbGF5b3V0UHJlZnN+fiR7dHlwZU5hbWV9fn4ke3RyYWNrUHJvcGVydHkgPz8gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsYXR0ZW4gYW4gb2JqZWN0IG9mIHVua25vd24gdHlwZSwgdXNlZCBmb3IgZ2VuZXJhdGluZyBmaWVsZHMgYW5kIGNvbHVtbnMgaW4gZHluYW1pYyB0YWJsZXZpZXdzXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmbGF0dGVuT2JqZWN0KG9iamVjdE1vZGVsOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGlzT2JqZWN0ID0gKGVudHJ5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIWVudHJ5ICYmIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZW50cnkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZsYXR0ZW4gPSAob2JqZWN0OiBhbnksIHBhcmVudD86IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNLZXkgPSBwYXJlbnQgPyBgJHtwYXJlbnR9LiR7a2V5fWAgOiBgJHtrZXl9YDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChpc09iamVjdCh2YWx1ZSkgPyBmbGF0dGVuKHZhbHVlLCB0aGlzS2V5KSA6IFtbYCR7dGhpc0tleX1gLCB2YWx1ZV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmbGF0dGVuKG9iamVjdE1vZGVsKTtcbiAgICB9XG59XG4iXX0=
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3RhYmxldmlldy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQW9CLGdCQUFnQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxNQUFNLE9BQU8sYUFBYTthQUNQLGVBQVUsR0FBRyxzQkFBc0IsQ0FBQzthQUNwQyxtQkFBYyxHQUFHLHdIQUF3SCxDQUFDO0lBRXpKOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBSSxJQUFrQjtRQUNsRCxPQUFPLGFBQWEsQ0FBQyxvQ0FBb0MsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1SCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLG9DQUFvQyxDQUFDLFVBQTRDO1FBQzNGLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixNQUFNLElBQUksZ0JBQWdCLENBQUMsdUZBQXVGLEVBQUUsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO1NBQ3RKO1FBQ0QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXhDLE1BQU0scUJBQXFCLEdBQTRCLEVBQUUsQ0FBQztRQUUxRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNoQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9GLHFCQUFxQixDQUFDLElBQUksQ0FBQztnQkFDdkIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7Z0JBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUN2RixpQkFBaUIsRUFBRSxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hGLFNBQVMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDekQsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBYTtnQkFDM0QsU0FBUyxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBbUI7YUFDckUsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLHFCQUFxQixDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQWtDLEVBQUUsS0FBVTtRQUM5RSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM1QixPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUM3QjthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ25ELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUM5QztZQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ0gsT0FBTyxNQUFNLENBQUM7U0FDakI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFvQjtRQUMzQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBYSxFQUFFO1lBQ2pELFlBQVksR0FBRyxNQUFNLENBQUM7U0FDekI7YUFBTSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFtQixFQUFFO1lBQzlELFlBQVksR0FBRyxPQUFPLENBQUM7U0FDMUI7UUFFRCxRQUFRLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNoQyxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssVUFBVTtnQkFDWCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDakMsS0FBSyxTQUFTO2dCQUNWLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQztZQUNsQyxLQUFLLE1BQU07Z0JBQ1AsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQy9CLEtBQUssTUFBTTtnQkFDUCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDL0IsS0FBSyxRQUFRO2dCQUNULE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUNqQyxLQUFLLE9BQU87Z0JBQ1IsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ2pDLEtBQUssUUFBUSxDQUFDO1lBQ2Q7Z0JBQ0ksT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUEwQixFQUFFLFlBQW9CO1FBQzlFLFFBQVEsVUFBVSxFQUFFO1lBQ2hCLEtBQUssY0FBYyxDQUFDLE1BQU07Z0JBQ3RCLE9BQU8sWUFBWSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7WUFDdkcsS0FBSyxjQUFjLENBQUMsT0FBTztnQkFDdkIsT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7WUFDekMsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDdEMsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDdEMsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDdEIsT0FBTyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7WUFDM0MsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNCO2dCQUNJLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDO1NBQzNDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUMzQyxRQUFRLFFBQVEsRUFBRTtZQUNkLEtBQUssUUFBUTtnQkFDVCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxLQUFLLE9BQU87Z0JBQ1IsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDcEMsS0FBSyxVQUFVO2dCQUNYLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLEtBQUssUUFBUTtnQkFDVCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxLQUFLLFVBQVU7Z0JBQ1gsT0FBTyxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7WUFDdkMsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsS0FBSyxPQUFPO2dCQUNSLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQ3BDLEtBQUssWUFBWTtnQkFDYixPQUFPLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztZQUN6QyxLQUFLLE1BQU07Z0JBQ1AsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDbkMsS0FBSyxNQUFNO2dCQUNQLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQ25DLEtBQUssUUFBUTtnQkFDVCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxLQUFLLE1BQU0sQ0FBQztZQUNaO2dCQUNJLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsOEJBQThCLENBQUMsSUFBb0IsRUFBRSxXQUFtQztRQUNsRyxRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssY0FBYyxDQUFDLE1BQU07Z0JBQ3RCLE9BQU8sV0FBVyxLQUFLLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDcEgsS0FBSyxjQUFjLENBQUMsT0FBTztnQkFDdkIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDekMsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDdEIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNCLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQztZQUN6QjtnQkFDSSxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxRQUFnQixFQUFFLEdBQVcsRUFBRSxhQUFzQjtRQUMzRixPQUFPLHdCQUF3QixRQUFRLEtBQUssYUFBYSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkcsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFnQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBVyxFQUFFLE1BQVksRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtnQkFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUV2RCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbHVtbkRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxlJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bSwgRmllbGRJbnB1dFR5cGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge0NsYXNzQXR0cmlidXRlRGVmLCBNbmdJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtUYWJsZXZpZXdBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uL21vZGVscy90YWJsZXZpZXctYXR0ci5tb2RlbCc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRhYmxldmlld1V0aWwge1xuICAgIHByaXZhdGUgc3RhdGljIF9kYXRlUmVnZXggPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGQvO1xuICAgIHByaXZhdGUgc3RhdGljIF9kYXRlVGltZVJlZ2V4ID0gL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkVChbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZFxcLlxcZCsoWystXVswLTJdXFxkOlswLTVdXFxkfFo/KXwoWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXCtbMC0yXVxcZDpbMC01XVxcZCkpLztcblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYXR0cmlidXRlcyBmcm9tIGNsYXNzIHR5cGUgYW5kIGV4dGVuZHMgdG8gdHlwZWQgZGVmIHdpdGggY29sdW1uIGFuZCBmaWVsZCBlbnVtIHR5cGVcbiAgICAgKiBAcGFyYW0gdHlwZSBjbGFzcyB0eXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRBdHRyaWJ1dGVEZWZNYXA8VD4odHlwZTogQ2xhc3NUeXBlPFQ+KTogVGFibGV2aWV3QXR0cmlidXRlRGVmW10ge1xuICAgICAgICByZXR1cm4gVGFibGV2aWV3VXRpbC5leHBhbmRBdHRyaWJ1dGVEZWZXaXRoVGFibGV2aWV3VHlwZXMoVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBhbmRzIEF0dHJpYnV0ZURlZiB0byBUYWJsZXZpZXdBdHRyaWJ1dGVEZWYgd2l0aCBkZWZpbmVkIGlucHV0IGFuZCBjb2x1bW4gZW51bSB0eXBlXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZXMgb3BlbiBhcGkgc3BlY2lmaWNhdGlvbiBtb2RlbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZXhwYW5kQXR0cmlidXRlRGVmV2l0aFRhYmxldmlld1R5cGVzKGF0dHJpYnV0ZXM/OiBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj4gfCBudWxsKTogVGFibGV2aWV3QXR0cmlidXRlRGVmW10ge1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKCdBdHRyaWJ1dGVEZWYgaXMgbnVsbCwgcHJvYmxlbSB3aXRoIFR5cGVSZWdpc3RyeTo6ZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGU/Jywge25hbWU6ICdUYWJsZXZpZXdVdGlsc0Vycm9yJ30pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVSZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5nZXQoKTtcblxuICAgICAgICBjb25zdCB0YWJsZXZpZXdBdHRyaWJ1dGVEZWY6IFRhYmxldmlld0F0dHJpYnV0ZURlZltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3QgZW51bVR5cGUgPSB0eXBlUmVnaXN0cnkuZmluZEVudW0oYXR0cmlidXRlLnR5cGUpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IGVudW1UeXBlID8gQ29sdW1uVHlwZUVudW0uRW51bSA6IFRhYmxldmlld1V0aWwudG9Db2x1bW5UeXBlKGF0dHJpYnV0ZS50eXBlKTtcbiAgICAgICAgICAgIHRhYmxldmlld0F0dHJpYnV0ZURlZi5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhdHRyaWJ1dGUubmFtZSxcbiAgICAgICAgICAgICAgICBiYXNlTmFtZTogYXR0cmlidXRlLmJhc2VOYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGF0dHJpYnV0ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNvbHVtblR5cGU6IGVudW1UeXBlID8gQ29sdW1uVHlwZUVudW0uRW51bSA6IFRhYmxldmlld1V0aWwudG9Db2x1bW5UeXBlKGF0dHJpYnV0ZS50eXBlKSxcbiAgICAgICAgICAgICAgICBjb2x1bW5EaXNwbGF5VHlwZTogVGFibGV2aWV3VXRpbC50b0NvbHVtbkRpc3BsYXlUeXBlKGNvbHVtblR5cGUsIGF0dHJpYnV0ZS50eXBlKSxcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGU6IFRhYmxldmlld1V0aWwudG9GaWVsZElucHV0VHlwZShhdHRyaWJ1dGUudHlwZSksXG4gICAgICAgICAgICAgICAgZW51bVR5cGU6IHR5cGVSZWdpc3RyeS5maW5kRW51bShhdHRyaWJ1dGUudHlwZSkgYXMgRW51bVR5cGUsXG4gICAgICAgICAgICAgICAgY2xhc3NUeXBlOiB0eXBlUmVnaXN0cnkuZmluZFR5cGUoYXR0cmlidXRlLnR5cGUpIGFzIENsYXNzVHlwZTxhbnk+XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZXZpZXdBdHRyaWJ1dGVEZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydHMgY29sdW1uIHRvIG51bWJlciBvciBkYXRlIG9uIHZhbHVlIGJhc2VkXG4gICAgICogQHBhcmFtIGNvbHVtbiBjb2x1bW4gdG8gYmUgdHJhbnNmb3JtZWRcbiAgICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gY2hlY2sgaWYgYXBwbGljYWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nQ29sdW1uQ29udmVydGVyKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4sIHZhbHVlOiBhbnkpOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0Jvb2xlYW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4uYXNOdW1iZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kYXRlUmVnZXgudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlVGltZVJlZ2V4LnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0RhdGUoJ2RkLiBNTU0geXl5eSBISDptbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0RhdGUoJ2RkLiBNTU0geXl5eScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIHN0cmluZyB0eXBlIHRvIGNvbHVtbiB0eXBlIGVudW0sIGRlZmF1bHQgaXMgc3RyaW5nXG4gICAgICogQHBhcmFtIHByb3BlcnR5VHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgdG9Db2x1bW5UeXBlKHByb3BlcnR5VHlwZTogc3RyaW5nKTogQ29sdW1uVHlwZUVudW0ge1xuICAgICAgICBjb25zdCB0eXBlUmVnaXN0cnkgPSBUeXBlUmVnaXN0cnkuZ2V0KCk7XG4gICAgICAgIGlmICh0eXBlUmVnaXN0cnkuZmluZEVudW0ocHJvcGVydHlUeXBlKSBhcyBFbnVtVHlwZSkge1xuICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gJ2VudW0nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVSZWdpc3RyeS5maW5kVHlwZShwcm9wZXJ0eVR5cGUpIGFzIENsYXNzVHlwZTxhbnk+KSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSAnY2xhc3MnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbHVtblR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW5UeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0b0NvbHVtbkRpc3BsYXlUeXBlKGNvbHVtblR5cGU6IENvbHVtblR5cGVFbnVtLCBwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IENvbHVtbkRpc3BsYXlUeXBlRW51bSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VHlwZSA9PT0gJ2N1cnJlbmN5JyA/IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeSA6IENvbHVtbkRpc3BsYXlUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbHVtbkRpc3BsYXlUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkVudW07XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkNvbXBvbmVudDtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sdW1uRGlzcGxheVR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIHN0cmluZyB0eXBlIHRvIHR5cGUgZW51bSwgZGVmYXVsdCBpcyB0ZXh0XG4gICAgICogQHBhcmFtIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0b0ZpZWxkSW5wdXRUeXBlKHByb3BlcnR5OiBzdHJpbmcpOiBGaWVsZElucHV0VHlwZUVudW0ge1xuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuO1xuICAgICAgICAgICAgY2FzZSAnbGFiZWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0YXJlYTtcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDtcbiAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZXBpY2tlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5EYXRlcGlja2VyO1xuICAgICAgICAgICAgY2FzZSAnbWFzayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5NYXNrO1xuICAgICAgICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkSW5wdXRUeXBlRW51bS5GaWxlO1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IGNvbHVtbiB0eXBlIHRvIGVxdWl2YWxlbnQgZmllbGQgaW5wdXQgdHlwZVxuICAgICAqIEBwYXJhbSB0eXBlIGNvbHVtbiB0eXBlXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIGNvbHVtbiBkaXNwbGF5IHR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHRvRmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZSh0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0pOiBGaWVsZElucHV0VHlwZUVudW0ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBkaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5ID8gRmllbGRJbnB1dFR5cGVFbnVtLkN1cnJlbmN5IDogRmllbGRJbnB1dFR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRJbnB1dFR5cGVFbnVtLlRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgdGFibGUgbGF5b3V0IHByZWZlcmVuY2VzIGtleSB1c2VkIHdoZW4gc2F2aW5nIHByZWZlcmVuY2VzIHRvIGxvY2Fsc3RvcmFnZVxuICAgICAqIEBwYXJhbSB0eXBlTmFtZSBzdHJpbmcsIHJlcXVpcmVkXG4gICAgICogQHBhcmFtIHVybCBzdHJpbmcsIHJlcXVpcmVkXG4gICAgICogQHBhcmFtIHRyYWNrUHJvcGVydHkgc3RyaW5nLCBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleSh0eXBlTmFtZTogc3RyaW5nLCB1cmw6IHN0cmluZywgdHJhY2tQcm9wZXJ0eT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgbW5nVGFibGVMYXlvdXRQcmVmc35+JHt0eXBlTmFtZX1+fiR7dHJhY2tQcm9wZXJ0eSA/PyB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmxhdHRlbiBhbiBvYmplY3Qgb2YgdW5rbm93biB0eXBlLCB1c2VkIGZvciBnZW5lcmF0aW5nIGZpZWxkcyBhbmQgY29sdW1ucyBpbiBkeW5hbWljIHRhYmxldmlld3NcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZsYXR0ZW5PYmplY3Qob2JqZWN0TW9kZWw6IGFueSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgaXNPYmplY3QgPSAoZW50cnk6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICEhZW50cnkgJiYgdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlbnRyeSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZmxhdHRlbiA9IChvYmplY3Q6IGFueSwgcGFyZW50PzogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0tleSA9IHBhcmVudCA/IGAke3BhcmVudH0uJHtrZXl9YCA6IGAke2tleX1gO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KGlzT2JqZWN0KHZhbHVlKSA/IGZsYXR0ZW4odmFsdWUsIHRoaXNLZXkpIDogW1tgJHt0aGlzS2V5fWAsIHZhbHVlXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4ob2JqZWN0TW9kZWwpO1xuICAgIH1cbn1cbiJdfQ==