@clr/angular 13.0.3 → 13.2.1

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 (108) hide show
  1. package/button/button-group/button-group.d.ts +5 -3
  2. package/clarity.api.md +145 -48
  3. package/clr-angular.module.d.ts +13 -12
  4. package/data/datagrid/built-in/filters/datagrid-numeric-filter.d.ts +11 -3
  5. package/data/datagrid/built-in/filters/datagrid-string-filter.d.ts +9 -3
  6. package/data/datagrid/datagrid-column.d.ts +10 -1
  7. package/data/datagrid/render/main-renderer.d.ts +3 -2
  8. package/data/stack-view/stack-control.d.ts +7 -2
  9. package/data/tree-view/models/tree-node.model.d.ts +1 -0
  10. package/data/tree-view/tree-focus-manager.service.d.ts +6 -0
  11. package/data/tree-view/tree-node.d.ts +10 -5
  12. package/esm2020/accordion/stepper/models/stepper.model.mjs +1 -1
  13. package/esm2020/accordion/stepper/providers/stepper.service.mjs +1 -1
  14. package/esm2020/accordion/stepper/stepper-panel.mjs +1 -1
  15. package/esm2020/button/button-group/button-group.mjs +17 -11
  16. package/esm2020/clr-angular.module.mjs +5 -1
  17. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +37 -16
  18. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +27 -13
  19. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +7 -3
  20. package/esm2020/data/datagrid/datagrid-column.mjs +28 -3
  21. package/esm2020/data/datagrid/datagrid-filter.mjs +1 -1
  22. package/esm2020/data/datagrid/datagrid-if-expanded.service.mjs +1 -1
  23. package/esm2020/data/datagrid/render/main-renderer.mjs +9 -6
  24. package/esm2020/data/stack-view/stack-control.mjs +13 -3
  25. package/esm2020/data/stack-view/stack-input.mjs +1 -1
  26. package/esm2020/data/stack-view/stack-select.mjs +1 -1
  27. package/esm2020/data/tree-view/models/declarative-tree-node.model.mjs +1 -1
  28. package/esm2020/data/tree-view/models/recursive-tree-node.model.mjs +1 -1
  29. package/esm2020/data/tree-view/models/tree-node.model.mjs +1 -1
  30. package/esm2020/data/tree-view/tree-focus-manager.service.mjs +69 -1
  31. package/esm2020/data/tree-view/tree-node.mjs +55 -22
  32. package/esm2020/forms/checkbox/checkbox-container.mjs +1 -1
  33. package/esm2020/forms/checkbox/checkbox.mjs +1 -1
  34. package/esm2020/forms/combobox/combobox-container.mjs +1 -1
  35. package/esm2020/forms/combobox/combobox.mjs +3 -6
  36. package/esm2020/forms/combobox/model/pseudo-focus.model.mjs +1 -1
  37. package/esm2020/forms/common/control.mjs +1 -1
  38. package/esm2020/forms/common/error.mjs +1 -1
  39. package/esm2020/forms/common/helper.mjs +1 -1
  40. package/esm2020/forms/common/if-control-state/if-error.mjs +1 -1
  41. package/esm2020/forms/common/if-control-state/if-success.mjs +1 -1
  42. package/esm2020/forms/common/success.mjs +1 -1
  43. package/esm2020/forms/datalist/datalist-container.mjs +1 -1
  44. package/esm2020/forms/datalist/datalist-input.mjs +1 -1
  45. package/esm2020/forms/datepicker/calendar.mjs +3 -3
  46. package/esm2020/forms/datepicker/date-container.mjs +1 -1
  47. package/esm2020/forms/datepicker/date-input.mjs +1 -1
  48. package/esm2020/forms/input/input.mjs +1 -1
  49. package/esm2020/forms/password/password-container.mjs +3 -11
  50. package/esm2020/forms/password/password.mjs +1 -1
  51. package/esm2020/forms/radio/radio-container.mjs +1 -1
  52. package/esm2020/forms/range/range-container.mjs +1 -1
  53. package/esm2020/forms/select/select-container.mjs +1 -1
  54. package/esm2020/forms/select/select.mjs +1 -1
  55. package/esm2020/forms/textarea/textarea.mjs +1 -1
  56. package/esm2020/layout/nav/aria-current-link.mjs +28 -0
  57. package/esm2020/layout/nav/header.mjs +25 -8
  58. package/esm2020/layout/nav/index.mjs +2 -1
  59. package/esm2020/layout/nav/nav-level.mjs +110 -8
  60. package/esm2020/layout/nav/navigation.module.mjs +5 -1
  61. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +3 -3
  62. package/esm2020/layout/vertical-nav/vertical-nav-link.mjs +25 -15
  63. package/esm2020/modal/modal-body.mjs +5 -2
  64. package/esm2020/popover/common/abstract-popover.mjs +15 -6
  65. package/esm2020/popover/dropdown/dropdown-menu.mjs +1 -1
  66. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +5 -3
  67. package/esm2020/popover/signpost/signpost-content.mjs +2 -1
  68. package/esm2020/utils/breakpoints/breakpoints.mjs +15 -1
  69. package/esm2020/utils/destroy/destroy.service.mjs +44 -0
  70. package/esm2020/utils/destroy/index.mjs +7 -0
  71. package/esm2020/utils/drag-and-drop/providers/drag-event-listener.service.mjs +7 -7
  72. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +21 -16
  73. package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +1 -1
  74. package/esm2020/utils/focus/key-focus/util.mjs +6 -1
  75. package/esm2020/utils/focus-trap/focus-trap.mjs +141 -0
  76. package/esm2020/utils/for-type-ahead/for-type-ahead.mjs +54 -0
  77. package/esm2020/utils/for-type-ahead/for-type-ahead.module.mjs +23 -0
  78. package/esm2020/utils/for-type-ahead/for-type-ahead.service.mjs +29 -0
  79. package/esm2020/utils/for-type-ahead/index.mjs +8 -0
  80. package/esm2020/utils/index.mjs +3 -1
  81. package/esm2020/utils/popover/popover-content.mjs +14 -8
  82. package/fesm2015/clr-angular.mjs +831 -182
  83. package/fesm2015/clr-angular.mjs.map +1 -1
  84. package/fesm2020/clr-angular.mjs +828 -181
  85. package/fesm2020/clr-angular.mjs.map +1 -1
  86. package/forms/combobox/combobox.d.ts +0 -1
  87. package/layout/nav/aria-current-link.d.ts +13 -0
  88. package/layout/nav/header.d.ts +6 -0
  89. package/layout/nav/index.d.ts +1 -0
  90. package/layout/nav/nav-level.d.ts +16 -4
  91. package/layout/nav/navigation.module.d.ts +7 -6
  92. package/layout/vertical-nav/vertical-nav-link.d.ts +6 -5
  93. package/modal/modal-body.d.ts +1 -0
  94. package/package.json +4 -4
  95. package/popover/common/abstract-popover.d.ts +3 -1
  96. package/popover/dropdown/providers/dropdown-focus-handler.service.d.ts +2 -2
  97. package/utils/breakpoints/breakpoints.d.ts +14 -0
  98. package/utils/destroy/destroy.service.d.ts +32 -0
  99. package/utils/destroy/index.d.ts +1 -0
  100. package/utils/focus/focus-on-view-init/focus-on-view-init.d.ts +5 -4
  101. package/utils/focus/key-focus/util.d.ts +1 -0
  102. package/utils/focus-trap/focus-trap.d.ts +29 -0
  103. package/utils/for-type-ahead/for-type-ahead.d.ts +15 -0
  104. package/utils/for-type-ahead/for-type-ahead.module.d.ts +8 -0
  105. package/utils/for-type-ahead/for-type-ahead.service.d.ts +11 -0
  106. package/utils/for-type-ahead/index.d.ts +2 -0
  107. package/utils/index.d.ts +2 -0
  108. package/utils/popover/popover-content.d.ts +2 -1
@@ -22,6 +22,7 @@ export class ClrPopoverContent {
22
22
  this.smartEventsService = smartEventsService;
23
23
  this.smartOpenService = smartOpenService;
24
24
  this.subscriptions = [];
25
+ this.removeClickListenerFn = null;
25
26
  this.shouldRealign = false;
26
27
  // Check-collector pattern:
27
28
  // In order to get accurate content height/width values, we cannot calculate alignment offsets until
@@ -77,6 +78,10 @@ export class ClrPopoverContent {
77
78
  if (!this.view) {
78
79
  return;
79
80
  }
81
+ if (this.removeClickListenerFn) {
82
+ this.removeClickListenerFn();
83
+ this.removeClickListenerFn = null;
84
+ }
80
85
  this.view.rootNodes.forEach(node => this.renderer.removeChild(this.document.body, node));
81
86
  this.container.clear();
82
87
  delete this.view;
@@ -91,16 +96,17 @@ export class ClrPopoverContent {
91
96
  addContent() {
92
97
  // Create the view container
93
98
  this.view = this.container.createEmbeddedView(this.template);
94
- this.smartEventsService.contentRef = this.view.rootNodes[0]; // So we know where/what to set close focus on
95
- this.renderer.addClass(this.view.rootNodes[0], 'clr-popover-content');
99
+ const [rootNode] = this.view.rootNodes;
100
+ this.smartEventsService.contentRef = rootNode; // So we know where/what to set close focus on
101
+ this.renderer.addClass(rootNode, 'clr-popover-content');
96
102
  // Reset to the begining of the document to be available for sizing/positioning calculations.
97
103
  // If we add new content to the bottom it triggers changes in the layout that may lead to false anchor
98
104
  // coordinates values.
99
- this.renderer.setStyle(this.view.rootNodes[0], 'top', '0px');
100
- this.renderer.setStyle(this.view.rootNodes[0], 'left', '0px');
105
+ this.renderer.setStyle(rootNode, 'top', '0px');
106
+ this.renderer.setStyle(rootNode, 'left', '0px');
101
107
  // We need to hide it during the calculation phase, while it's not yet finally positioned.
102
- this.renderer.setStyle(this.view.rootNodes[0], 'opacity', '0');
103
- this.renderer.listen(this.view.rootNodes[0], 'click', event => {
108
+ this.renderer.setStyle(rootNode, 'opacity', '0');
109
+ this.removeClickListenerFn = this.renderer.listen(rootNode, 'click', event => {
104
110
  this.smartOpenService.openEvent = event;
105
111
  });
106
112
  this.view.rootNodes.forEach(node => {
@@ -130,7 +136,7 @@ ClrPopoverContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", vers
130
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrPopoverContent, decorators: [{
131
137
  type: Directive,
132
138
  args: [{ selector: '[clrPopoverContent]' }]
133
- }], ctorParameters: function () { return [{ type: HTMLDocument, decorators: [{
139
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
134
140
  type: Inject,
135
141
  args: [DOCUMENT]
136
142
  }] }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.Renderer2 }, { type: i1.ClrPopoverPositionService }, { type: i2.ClrPopoverEventsService }, { type: i3.ClrPopoverToggleService }]; }, propDecorators: { open: [{
@@ -146,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
146
152
  type: Input,
147
153
  args: ['clrPopoverContentScrollToClose']
148
154
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvcG9wb3Zlci9wb3BvdmVyLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFNTCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFFOUMseUVBQXlFO0FBQ3pFLGVBQWU7QUFFZixNQUFNLE9BQU8saUJBQWlCO0lBd0I1QixZQUM0QixRQUFzQixFQUN4QyxTQUEyQixFQUMzQixRQUEwQixFQUMxQixRQUFtQixFQUNuQixvQkFBK0MsRUFDL0Msa0JBQTJDLEVBQzNDLGdCQUF5QztRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUEyQjtRQUMvQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXlCO1FBQzNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUE3QjNDLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQXdHbkMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFOUIsMkJBQTJCO1FBQzNCLG9HQUFvRztRQUNwRyw4Q0FBOEM7UUFDOUMsaUdBQWlHO1FBQ2pHLHdHQUF3RztRQUN4RywyRUFBMkU7UUFDbkUsbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQWxGN0QsQ0FBQztJQTVCSixJQUNXLElBQUksQ0FBQyxLQUFjO1FBQzVCLElBQUks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QURwQixLQUFLO3VCQUFDLHNDQUFzQztnQkFNekMsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2xyUG9wb3ZlclRvZ2dsZVNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9wb3BvdmVyLXRvZ2dsZS5zZXJ2aWNlJztcbmltcG9ydCB7IENsclBvcG92ZXJFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvcG9wb3Zlci1ldmVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBDbHJQb3BvdmVyUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvcG9wb3Zlci1wb3NpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENsclBvcG92ZXJQb3NpdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wb3BvdmVyLXBvc2l0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzIwMzUxI2lzc3VlY29tbWVudC0zNDQwMDk4ODdcbi8qKiBAZHluYW1pYyAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NsclBvcG92ZXJDb250ZW50XScgfSlcbmV4cG9ydCBjbGFzcyBDbHJQb3BvdmVyQ29udGVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdmlldzogRW1iZWRkZWRWaWV3UmVmPHZvaWQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgQElucHV0KCdjbHJQb3BvdmVyQ29udGVudCcpXG4gIHB1YmxpYyBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuID0gISF2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyUG9wb3ZlckNvbnRlbnRBdCcpXG4gIHNldCBjb250ZW50QXQocG9zaXRpb246IENsclBvcG92ZXJQb3NpdGlvbikge1xuICAgIHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlJylcbiAgc2V0IG91dHNpZGVDbGlja0Nsb3NlKGNsaWNrVG9DbG9zZTogYm9vbGVhbikge1xuICAgIHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlLm91dHNpZGVDbGlja0Nsb3NlID0gISFjbGlja1RvQ2xvc2U7XG4gIH1cblxuICBASW5wdXQoJ2NsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZScpXG4gIHNldCBzY3JvbGxUb0Nsb3NlKHNjcm9sbFRvQ2xvc2U6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zY3JvbGxUb0Nsb3NlID0gISFzY3JvbGxUb0Nsb3NlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogSFRNTERvY3VtZW50LFxuICAgIHByaXZhdGUgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc21hcnRQb3NpdGlvblNlcnZpY2U6IENsclBvcG92ZXJQb3NpdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbWFydEV2ZW50c1NlcnZpY2U6IENsclBvcG92ZXJFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc21hcnRPcGVuU2VydmljZTogQ2xyUG9wb3ZlclRvZ2dsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5hZGRDb250ZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvdWxkUmVhbGlnbiA9IHRydWU7XG4gICAgICAgIC8vIEF2b2lkIGZsaWNrZXJpbmcgb24gaW5pdGlhbGl6YXRpb24sIGNhdXNlZCBieSB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGVcbiAgICAgICAgLy8gY2hlY2stY29sbGVjdG9yIHBhdHRlcm4uXG4gICAgICAgIGlmICh0aGlzLnZpZXcpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sICdvcGFjaXR5JywgJzAnKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAvLyBIZXJlIHdlIGNvbGxlY3Qgc3Vic2VxdWVudCBzeW5jaHJvbm91c2x5IHJlY2VpdmVkIGNvbnRlbnQtY2hlY2sgZXZlbnRzIGFuZCBvbmx5IHRha2UgYWN0aW9uXG4gICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBjeWNsZS4gU2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIHRoZSBjaGVjay1jb2xsZWN0b3IgcGF0dGVybi5cbiAgICAgIHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShkZWJvdW5jZVRpbWUoMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWxpZ25Db250ZW50KCk7XG4gICAgICAgIHRoaXMuc2hvdWxkUmVhbGlnbiA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy52aWV3KSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCAnb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlQ29udGVudCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNvbnRlbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIG5vZGUpKTtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGVhcigpO1xuICAgIGRlbGV0ZSB0aGlzLnZpZXc7XG4gIH1cblxuICAvKipcbiAgICogVE9ETyhtYXR0KTogaW52ZXN0aWdhdGUgd2h5IERlYnVnRWxlbWVudCByZXRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBub2RlcyBhbmQgY2F1c2VzIGEgbWVtb3J5IGxlYWsuXG4gICAqIEEgbm90ZSBhYm91dCB0aGUgdXNlIG9mIGFwcGVuZENoaWxkL3JlbW92ZUNoaWxkXG4gICAqIFRoZSBEZWJ1Z0VsZW1lbnQgaXMga2VlcGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZGV0YWNoZWQgbm9kZSBhbmQgaXRzIHVuY2xlYXIgd2h5LlxuICAgKiBUaGlzIGRvZXMgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEJ1dCwgc2luY2UgaXQgZG9lc24ndCBoYXBwZW4gaW4gcHJvZHVjdGlvbiBtb2RlXG4gICAqIGl0IGlzIGEgbG93IHByaW9yaXR5IGlzc3VlIGZvciBub3cuXG4gICAqL1xuICBwcml2YXRlIGFkZENvbnRlbnQoKSB7XG4gICAgLy8gQ3JlYXRlIHRoZSB2aWV3IGNvbnRhaW5lclxuICAgIHRoaXMudmlldyA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTtcbiAgICB0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmID0gdGhpcy52aWV3LnJvb3ROb2Rlc1swXTsgLy8gU28gd2Uga25vdyB3aGVyZS93aGF0IHRvIHNldCBjbG9zZSBmb2N1cyBvblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy52aWV3LnJvb3ROb2Rlc1swXSwgJ2Nsci1wb3BvdmVyLWNvbnRlbnQnKTtcbiAgICAvLyBSZXNldCB0byB0aGUgYmVnaW5pbmcgb2YgdGhlIGRvY3VtZW50IHRvIGJlIGF2YWlsYWJsZSBmb3Igc2l6aW5nL3Bvc2l0aW9uaW5nIGNhbGN1bGF0aW9ucy5cbiAgICAvLyBJZiB3ZSBhZGQgbmV3IGNvbnRlbnQgdG8gdGhlIGJvdHRvbSBpdCB0cmlnZ2VycyBjaGFuZ2VzIGluIHRoZSBsYXlvdXQgdGhhdCBtYXkgbGVhZCB0byBmYWxzZSBhbmNob3JcbiAgICAvLyBjb29yZGluYXRlcyB2YWx1ZXMuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCAndG9wJywgJzBweCcpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwgJ2xlZnQnLCAnMHB4Jyk7XG4gICAgLy8gV2UgbmVlZCB0byBoaWRlIGl0IGR1cmluZyB0aGUgY2FsY3VsYXRpb24gcGhhc2UsIHdoaWxlIGl0J3Mgbm90IHlldCBmaW5hbGx5IHBvc2l0aW9uZWQuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCAnb3BhY2l0eScsICcwJyk7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy52aWV3LnJvb3ROb2Rlc1swXSwgJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudCA9IGV2ZW50O1xuICAgIH0pO1xuICAgIHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCBub2RlKTtcbiAgICB9KTtcbiAgICAvLyBNYXJrIGZvciByZWFsaW5nbWVudCBvbiB0aGUgbmV4dCBjb250ZW50LWNoZWNrIGN5Y2xlLlxuICAgIHRoaXMuc2hvdWxkUmVhbGlnbiA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFJlYWxpZ24gPSBmYWxzZTtcblxuICAvLyBDaGVjay1jb2xsZWN0b3IgcGF0dGVybjpcbiAgLy8gSW4gb3JkZXIgdG8gZ2V0IGFjY3VyYXRlIGNvbnRlbnQgaGVpZ2h0L3dpZHRoIHZhbHVlcywgd2UgY2Fubm90IGNhbGN1bGF0ZSBhbGlnbm1lbnQgb2Zmc2V0cyB1bnRpbFxuICAvLyBhZnRlciB0aGUgcHJvamVjdGVkIGNvbnRlbnQgaGFzIHN0YWJpbGl6ZWQuXG4gIC8vIEFzIG11bHRpcGxlIGNoZWNrIGV2ZW50cyBtYXkgaGFwcGVuIGluIHRoZSBzYW1lIHJlbmRlcmluZyBjeWNsZSwgd2UgbmVlZCB0byBjb2xsZWN0IGFsbCBldmVudHNcbiAgLy8gYW5kIG9ubHkgYWN0IGFmdGVyIHRoZSBjb250ZW50IGlzIHJlYWxseSBzdGFibGUuIE9yIHdlIG1heSBnZXQgd3JvbmcgaW50ZXJtZWRpYXRlIHBvc2l0aW9uaW5nIHZhbHVlcy5cbiAgLy8gV2Ugd2lsbCBjaGFubmVsIHN1YnNlcXVlbnQgY29udGVudCBjaGVjayBldmVudHMgdGhyb3VnaCB0aGlzIG9ic2VydmFibGUuXG4gIHByaXZhdGUgY2hlY2tDb2xsZWN0b3I6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuICYmIHRoaXMudmlldyAmJiB0aGlzLnNob3VsZFJlYWxpZ24pIHtcbiAgICAgIC8vIENoYW5uZWwgY29udGVudC1jaGVjayBldmVudCB0aHJvdWdoIHRoZSBjaGVjay1jb2xsZWN0b3JcbiAgICAgIHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWxpZ25Db250ZW50KCkge1xuICAgIGlmICghdGhpcy52aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uQ29vcmRzID0gdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNvbnRlbnQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCAndG9wJywgYCR7cG9zaXRpb25Db29yZHMueU9mZnNldH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwgJ2xlZnQnLCBgJHtwb3NpdGlvbkNvb3Jkcy54T2Zmc2V0fXB4YCk7XG4gICAgdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKTtcbiAgfVxufVxuIl19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvcG9wb3Zlci9wb3BvdmVyLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFNTCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFFOUMseUVBQXlFO0FBQ3pFLGVBQWU7QUFFZixNQUFNLE9BQU8saUJBQWlCO0lBMEI1QixZQUM0QixRQUFrQixFQUNwQyxTQUEyQixFQUMzQixRQUEwQixFQUMxQixRQUFtQixFQUNuQixvQkFBK0MsRUFDL0Msa0JBQTJDLEVBQzNDLGdCQUF5QztRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUEyQjtRQUMvQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXlCO1FBQzNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUEvQjNDLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQXNCbkMsMEJBQXFCLEdBQXdCLElBQUksQ0FBQztRQXlGbEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFOUIsMkJBQTJCO1FBQzNCLG9HQUFvRztRQUNwRyw4Q0FBOEM7UUFDOUMsaUdBQWlHO1FBQ2pHLHdHQUF3RztRQUN4RywyRUFBMkU7UUFDbkUsbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQXZGN0QsQ0FBQztJQTlCSixJ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eEIsaUJBQWlCO3NCQURwQixLQUFLO3VCQUFDLHNDQUFzQztnQkFNekMsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2xyUG9wb3ZlclRvZ2dsZVNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9wb3BvdmVyLXRvZ2dsZS5zZXJ2aWNlJztcbmltcG9ydCB7IENsclBvcG92ZXJFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvcG9wb3Zlci1ldmVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBDbHJQb3BvdmVyUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvcG9wb3Zlci1wb3NpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENsclBvcG92ZXJQb3NpdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wb3BvdmVyLXBvc2l0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzIwMzUxI2lzc3VlY29tbWVudC0zNDQwMDk4ODdcbi8qKiBAZHluYW1pYyAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NsclBvcG92ZXJDb250ZW50XScgfSlcbmV4cG9ydCBjbGFzcyBDbHJQb3BvdmVyQ29udGVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdmlldzogRW1iZWRkZWRWaWV3UmVmPHZvaWQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgQElucHV0KCdjbHJQb3BvdmVyQ29udGVudCcpXG4gIHB1YmxpYyBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuID0gISF2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyUG9wb3ZlckNvbnRlbnRBdCcpXG4gIHNldCBjb250ZW50QXQocG9zaXRpb246IENsclBvcG92ZXJQb3NpdGlvbikge1xuICAgIHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlJylcbiAgc2V0IG91dHNpZGVDbGlja0Nsb3NlKGNsaWNrVG9DbG9zZTogYm9vbGVhbikge1xuICAgIHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlLm91dHNpZGVDbGlja0Nsb3NlID0gISFjbGlja1RvQ2xvc2U7XG4gIH1cblxuICBASW5wdXQoJ2NsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZScpXG4gIHNldCBzY3JvbGxUb0Nsb3NlKHNjcm9sbFRvQ2xvc2U6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zY3JvbGxUb0Nsb3NlID0gISFzY3JvbGxUb0Nsb3NlO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDbGlja0xpc3RlbmVyRm46IFZvaWRGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc21hcnRQb3NpdGlvblNlcnZpY2U6IENsclBvcG92ZXJQb3NpdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbWFydEV2ZW50c1NlcnZpY2U6IENsclBvcG92ZXJFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc21hcnRPcGVuU2VydmljZTogQ2xyUG9wb3ZlclRvZ2dsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5hZGRDb250ZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvdWxkUmVhbGlnbiA9IHRydWU7XG4gICAgICAgIC8vIEF2b2lkIGZsaWNrZXJpbmcgb24gaW5pdGlhbGl6YXRpb24sIGNhdXNlZCBieSB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGVcbiAgICAgICAgLy8gY2hlY2stY29sbGVjdG9yIHBhdHRlcm4uXG4gICAgICAgIGlmICh0aGlzLnZpZXcpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sICdvcGFjaXR5JywgJzAnKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAvLyBIZXJlIHdlIGNvbGxlY3Qgc3Vic2VxdWVudCBzeW5jaHJvbm91c2x5IHJlY2VpdmVkIGNvbnRlbnQtY2hlY2sgZXZlbnRzIGFuZCBvbmx5IHRha2UgYWN0aW9uXG4gICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBjeWNsZS4gU2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIHRoZSBjaGVjay1jb2xsZWN0b3IgcGF0dGVybi5cbiAgICAgIHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShkZWJvdW5jZVRpbWUoMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWxpZ25Db250ZW50KCk7XG4gICAgICAgIHRoaXMuc2hvdWxkUmVhbGlnbiA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy52aWV3KSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCAnb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlQ29udGVudCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNvbnRlbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKSB7XG4gICAgICB0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpO1xuICAgICAgdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgbm9kZSkpO1xuICAgIHRoaXMuY29udGFpbmVyLmNsZWFyKCk7XG4gICAgZGVsZXRlIHRoaXMudmlldztcbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPKG1hdHQpOiBpbnZlc3RpZ2F0ZSB3aHkgRGVidWdFbGVtZW50IHJldGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGVzIGFuZCBjYXVzZXMgYSBtZW1vcnkgbGVhay5cbiAgICogQSBub3RlIGFib3V0IHRoZSB1c2Ugb2YgYXBwZW5kQ2hpbGQvcmVtb3ZlQ2hpbGRcbiAgICogVGhlIERlYnVnRWxlbWVudCBpcyBrZWVwaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXRhY2hlZCBub2RlIGFuZCBpdHMgdW5jbGVhciB3aHkuXG4gICAqIFRoaXMgZG9lcyB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gQnV0LCBzaW5jZSBpdCBkb2Vzbid0IGhhcHBlbiBpbiBwcm9kdWN0aW9uIG1vZGVcbiAgICogaXQgaXMgYSBsb3cgcHJpb3JpdHkgaXNzdWUgZm9yIG5vdy5cbiAgICovXG4gIHByaXZhdGUgYWRkQ29udGVudCgpIHtcbiAgICAvLyBDcmVhdGUgdGhlIHZpZXcgY29udGFpbmVyXG4gICAgdGhpcy52aWV3ID0gdGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO1xuICAgIGNvbnN0IFtyb290Tm9kZV0gPSB0aGlzLnZpZXcucm9vdE5vZGVzO1xuICAgIHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNvbnRlbnRSZWYgPSByb290Tm9kZTsgLy8gU28gd2Uga25vdyB3aGVyZS93aGF0IHRvIHNldCBjbG9zZSBmb2N1cyBvblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mocm9vdE5vZGUsICdjbHItcG9wb3Zlci1jb250ZW50Jyk7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBkb2N1bWVudCB0byBiZSBhdmFpbGFibGUgZm9yIHNpemluZy9wb3NpdGlvbmluZyBjYWxjdWxhdGlvbnMuXG4gICAgLy8gSWYgd2UgYWRkIG5ldyBjb250ZW50IHRvIHRoZSBib3R0b20gaXQgdHJpZ2dlcnMgY2hhbmdlcyBpbiB0aGUgbGF5b3V0IHRoYXQgbWF5IGxlYWQgdG8gZmFsc2UgYW5jaG9yXG4gICAgLy8gY29vcmRpbmF0ZXMgdmFsdWVzLlxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocm9vdE5vZGUsICd0b3AnLCAnMHB4Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyb290Tm9kZSwgJ2xlZnQnLCAnMHB4Jyk7XG4gICAgLy8gV2UgbmVlZCB0byBoaWRlIGl0IGR1cmluZyB0aGUgY2FsY3VsYXRpb24gcGhhc2UsIHdoaWxlIGl0J3Mgbm90IHlldCBmaW5hbGx5IHBvc2l0aW9uZWQuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyb290Tm9kZSwgJ29wYWNpdHknLCAnMCcpO1xuICAgIHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4ocm9vdE5vZGUsICdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgIHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuRXZlbnQgPSBldmVudDtcbiAgICB9KTtcbiAgICB0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgbm9kZSk7XG4gICAgfSk7XG4gICAgLy8gTWFyayBmb3IgcmVhbGluZ21lbnQgb24gdGhlIG5leHQgY29udGVudC1jaGVjayBjeWNsZS5cbiAgICB0aGlzLnNob3VsZFJlYWxpZ24gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRSZWFsaWduID0gZmFsc2U7XG5cbiAgLy8gQ2hlY2stY29sbGVjdG9yIHBhdHRlcm46XG4gIC8vIEluIG9yZGVyIHRvIGdldCBhY2N1cmF0ZSBjb250ZW50IGhlaWdodC93aWR0aCB2YWx1ZXMsIHdlIGNhbm5vdCBjYWxjdWxhdGUgYWxpZ25tZW50IG9mZnNldHMgdW50aWxcbiAgLy8gYWZ0ZXIgdGhlIHByb2plY3RlZCBjb250ZW50IGhhcyBzdGFiaWxpemVkLlxuICAvLyBBcyBtdWx0aXBsZSBjaGVjayBldmVudHMgbWF5IGhhcHBlbiBpbiB0aGUgc2FtZSByZW5kZXJpbmcgY3ljbGUsIHdlIG5lZWQgdG8gY29sbGVjdCBhbGwgZXZlbnRzXG4gIC8vIGFuZCBvbmx5IGFjdCBhZnRlciB0aGUgY29udGVudCBpcyByZWFsbHkgc3RhYmxlLiBPciB3ZSBtYXkgZ2V0IHdyb25nIGludGVybWVkaWF0ZSBwb3NpdGlvbmluZyB2YWx1ZXMuXG4gIC8vIFdlIHdpbGwgY2hhbm5lbCBzdWJzZXF1ZW50IGNvbnRlbnQgY2hlY2sgZXZlbnRzIHRocm91Z2ggdGhpcyBvYnNlcnZhYmxlLlxuICBwcml2YXRlIGNoZWNrQ29sbGVjdG9yOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbiAmJiB0aGlzLnZpZXcgJiYgdGhpcy5zaG91bGRSZWFsaWduKSB7XG4gICAgICAvLyBDaGFubmVsIGNvbnRlbnQtY2hlY2sgZXZlbnQgdGhyb3VnaCB0aGUgY2hlY2stY29sbGVjdG9yXG4gICAgICB0aGlzLmNoZWNrQ29sbGVjdG9yLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFsaWduQ29udGVudCgpIHtcbiAgICBpZiAoIXRoaXMudmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbkNvb3JkcyA9IHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwgJ3RvcCcsIGAke3Bvc2l0aW9uQ29vcmRzLnlPZmZzZXR9cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sICdsZWZ0JywgYCR7cG9zaXRpb25Db29yZHMueE9mZnNldH1weGApO1xuICAgIHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7XG4gIH1cbn1cbiJdfQ==