@koobiq/components 18.18.0 → 18.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/actions-panel/actions-panel-config.d.ts +79 -0
  2. package/actions-panel/actions-panel-container.d.ts +90 -0
  3. package/actions-panel/actions-panel-container.scss +33 -0
  4. package/actions-panel/actions-panel-ref.d.ts +31 -0
  5. package/actions-panel/actions-panel-tokens.scss +13 -0
  6. package/actions-panel/actions-panel.d.ts +144 -0
  7. package/actions-panel/index.d.ts +5 -0
  8. package/actions-panel/module.d.ts +7 -0
  9. package/core/animation/animation.d.ts +26 -0
  10. package/core/form-field/form-field-ref.d.ts +4 -0
  11. package/core/locales/en-US.d.ts +45 -0
  12. package/core/locales/es-LA.d.ts +45 -0
  13. package/core/locales/fa-IR.d.ts +45 -0
  14. package/core/locales/locale-service.d.ts +315 -0
  15. package/core/locales/pt-BR.d.ts +45 -0
  16. package/core/locales/ru-RU.d.ts +45 -0
  17. package/core/locales/tk-TM.d.ts +45 -0
  18. package/core/locales/types.d.ts +6 -0
  19. package/core/locales/zh-CN.d.ts +45 -0
  20. package/core/option/option-tokens.scss +5 -1
  21. package/core/option/option.d.ts +3 -1
  22. package/core/option/option.scss +6 -4
  23. package/core/styles/common/_list.scss +2 -9
  24. package/core/styles/common/_select.scss +6 -0
  25. package/core/styles/common/_tokens.scss +1 -1
  26. package/datepicker/calendar.component.d.ts +9 -0
  27. package/datepicker/datepicker-input.directive.d.ts +5 -1
  28. package/dl/dl.component.d.ts +4 -4
  29. package/dropdown/_dropdown-theme.scss +9 -10
  30. package/dropdown/dropdown-tokens.scss +1 -0
  31. package/dropdown/dropdown.component.d.ts +1 -1
  32. package/dropdown/dropdown.scss +5 -0
  33. package/dropdown/dropdown.types.d.ts +3 -1
  34. package/esm2022/accordion/accordion-trigger.component.mjs +1 -1
  35. package/esm2022/actions-panel/actions-panel-config.mjs +55 -0
  36. package/esm2022/actions-panel/actions-panel-container.mjs +217 -0
  37. package/esm2022/actions-panel/actions-panel-ref.mjs +62 -0
  38. package/esm2022/actions-panel/actions-panel.mjs +220 -0
  39. package/esm2022/actions-panel/index.mjs +6 -0
  40. package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +5 -0
  41. package/esm2022/actions-panel/module.mjs +21 -0
  42. package/esm2022/breadcrumbs/breadcrumbs.mjs +2 -2
  43. package/esm2022/button-toggle/button-toggle.component.mjs +2 -2
  44. package/esm2022/code-block/code-block.mjs +1 -1
  45. package/esm2022/core/animation/animation.mjs +29 -1
  46. package/esm2022/core/common-behaviors/common-module.mjs +2 -2
  47. package/esm2022/core/form-field/form-field-ref.mjs +1 -1
  48. package/esm2022/core/locales/en-US.mjs +46 -1
  49. package/esm2022/core/locales/es-LA.mjs +46 -1
  50. package/esm2022/core/locales/fa-IR.mjs +46 -1
  51. package/esm2022/core/locales/pt-BR.mjs +46 -1
  52. package/esm2022/core/locales/ru-RU.mjs +46 -1
  53. package/esm2022/core/locales/tk-TM.mjs +46 -1
  54. package/esm2022/core/locales/types.mjs +1 -1
  55. package/esm2022/core/locales/zh-CN.mjs +46 -1
  56. package/esm2022/core/option/option.mjs +12 -5
  57. package/esm2022/core/version.mjs +2 -2
  58. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  59. package/esm2022/datepicker/calendar.component.mjs +20 -2
  60. package/esm2022/datepicker/datepicker-input.directive.mjs +22 -11
  61. package/esm2022/datepicker/datepicker-toggle.component.mjs +1 -1
  62. package/esm2022/dl/dl.component.mjs +12 -9
  63. package/esm2022/dropdown/dropdown-item.component.mjs +2 -2
  64. package/esm2022/dropdown/dropdown-trigger.directive.mjs +6 -1
  65. package/esm2022/dropdown/dropdown.component.mjs +4 -4
  66. package/esm2022/dropdown/dropdown.types.mjs +1 -1
  67. package/esm2022/file-upload/multiple-file-upload.component.mjs +1 -1
  68. package/esm2022/file-upload/single-file-upload.component.mjs +1 -1
  69. package/esm2022/filter-bar/filter-bar-button.mjs +30 -0
  70. package/esm2022/filter-bar/filter-bar.mjs +168 -0
  71. package/esm2022/filter-bar/filter-bar.module.mjs +65 -0
  72. package/esm2022/filter-bar/filter-bar.types.mjs +13 -0
  73. package/esm2022/filter-bar/filter-refresher.mjs +34 -0
  74. package/esm2022/filter-bar/filter-reset.mjs +38 -0
  75. package/esm2022/filter-bar/filter-search.mjs +132 -0
  76. package/esm2022/filter-bar/filters.mjs +225 -0
  77. package/esm2022/filter-bar/index.mjs +2 -0
  78. package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +5 -0
  79. package/esm2022/filter-bar/pipe-add.mjs +129 -0
  80. package/esm2022/filter-bar/pipe.directive.mjs +55 -0
  81. package/esm2022/filter-bar/pipes/base-pipe.mjs +106 -0
  82. package/esm2022/filter-bar/pipes/pipe-button.mjs +59 -0
  83. package/esm2022/filter-bar/pipes/pipe-date.mjs +171 -0
  84. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +172 -0
  85. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +96 -0
  86. package/esm2022/filter-bar/pipes/pipe-select.mjs +88 -0
  87. package/esm2022/filter-bar/pipes/pipe-state.mjs +45 -0
  88. package/esm2022/filter-bar/pipes/pipe-text.mjs +89 -0
  89. package/esm2022/filter-bar/pipes/pipe-title.mjs +96 -0
  90. package/esm2022/filter-bar/public-api.mjs +20 -0
  91. package/esm2022/form-field/cleaner.mjs +1 -1
  92. package/esm2022/form-field/form-field.mjs +13 -6
  93. package/esm2022/form-field/password-hint.mjs +1 -1
  94. package/esm2022/form-field/password-toggle.mjs +1 -1
  95. package/esm2022/form-field/stepper.mjs +1 -1
  96. package/esm2022/icon/icon-button.component.mjs +9 -9
  97. package/esm2022/icon/icon-item.component.mjs +10 -10
  98. package/esm2022/icon/icon.component.mjs +9 -12
  99. package/esm2022/list/list-selection.component.mjs +18 -15
  100. package/esm2022/list/list.component.mjs +2 -2
  101. package/esm2022/modal/modal.component.mjs +1 -1
  102. package/esm2022/modal/modal.directive.mjs +1 -1
  103. package/esm2022/navbar/navbar-item.component.mjs +2 -2
  104. package/esm2022/navbar/navbar.component.mjs +2 -2
  105. package/esm2022/navbar/vertical-navbar.component.mjs +18 -16
  106. package/esm2022/overflow-items/overflow-items.mjs +129 -139
  107. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  108. package/esm2022/popover/popover.component.mjs +30 -10
  109. package/esm2022/radio/radio.component.mjs +2 -2
  110. package/esm2022/select/select.component.mjs +3 -3
  111. package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
  112. package/esm2022/sidepanel/sidepanel-directives.mjs +2 -2
  113. package/esm2022/tabs/tab-header.component.mjs +1 -1
  114. package/esm2022/tabs/tab-nav-bar.mjs +2 -2
  115. package/esm2022/tags/tag.component.mjs +2 -2
  116. package/esm2022/textarea/textarea.component.mjs +9 -5
  117. package/esm2022/timezone/timezone-option.component.mjs +2 -2
  118. package/esm2022/timezone/timezone-select.component.mjs +2 -2
  119. package/esm2022/title/title.directive.mjs +12 -5
  120. package/esm2022/toast/toast.component.mjs +2 -2
  121. package/esm2022/tree/toggle.mjs +1 -1
  122. package/esm2022/tree/tree-option.component.mjs +5 -4
  123. package/esm2022/tree/tree-selection.component.mjs +10 -3
  124. package/esm2022/tree-select/tree-select.component.mjs +6 -4
  125. package/fesm2022/koobiq-components-accordion.mjs +1 -1
  126. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  127. package/fesm2022/koobiq-components-actions-panel.mjs +567 -0
  128. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -0
  129. package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
  130. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
  132. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  133. package/fesm2022/koobiq-components-code-block.mjs +1 -1
  134. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-core.mjs +357 -7
  136. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  137. package/fesm2022/koobiq-components-datepicker.mjs +40 -12
  138. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  139. package/fesm2022/koobiq-components-dl.mjs +11 -8
  140. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-dropdown.mjs +10 -5
  142. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-file-upload.mjs +2 -2
  144. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  145. package/fesm2022/koobiq-components-filter-bar.mjs +1596 -0
  146. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -0
  147. package/fesm2022/koobiq-components-form-field.mjs +16 -9
  148. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  149. package/fesm2022/koobiq-components-icon.mjs +23 -26
  150. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  151. package/fesm2022/koobiq-components-list.mjs +19 -16
  152. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  153. package/fesm2022/koobiq-components-modal.mjs +2 -2
  154. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-navbar.mjs +21 -19
  156. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  157. package/fesm2022/koobiq-components-overflow-items.mjs +129 -139
  158. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  159. package/fesm2022/koobiq-components-popover.mjs +31 -11
  160. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  161. package/fesm2022/koobiq-components-radio.mjs +2 -2
  162. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  163. package/fesm2022/koobiq-components-select.mjs +2 -2
  164. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  165. package/fesm2022/koobiq-components-sidepanel.mjs +3 -3
  166. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  167. package/fesm2022/koobiq-components-tabs.mjs +2 -2
  168. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  169. package/fesm2022/koobiq-components-tags.mjs +2 -2
  170. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  171. package/fesm2022/koobiq-components-textarea.mjs +8 -4
  172. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  173. package/fesm2022/koobiq-components-timezone.mjs +4 -4
  174. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  175. package/fesm2022/koobiq-components-title.mjs +11 -4
  176. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  177. package/fesm2022/koobiq-components-toast.mjs +1 -1
  178. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  179. package/fesm2022/koobiq-components-tree-select.mjs +5 -3
  180. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  181. package/fesm2022/koobiq-components-tree.mjs +14 -6
  182. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  183. package/filter-bar/_filter-bar-theme.scss +61 -0
  184. package/filter-bar/filter-bar-button.d.ts +8 -0
  185. package/filter-bar/filter-bar.d.ts +55 -0
  186. package/filter-bar/filter-bar.module.d.ts +17 -0
  187. package/filter-bar/filter-bar.scss +60 -0
  188. package/filter-bar/filter-bar.types.d.ts +97 -0
  189. package/filter-bar/filter-refresher.d.ts +5 -0
  190. package/filter-bar/filter-refresher.scss +6 -0
  191. package/filter-bar/filter-reset.d.ts +11 -0
  192. package/filter-bar/filter-search.d.ts +25 -0
  193. package/filter-bar/filter-search.scss +14 -0
  194. package/filter-bar/filters.d.ts +72 -0
  195. package/filter-bar/filters.scss +92 -0
  196. package/filter-bar/index.d.ts +1 -0
  197. package/filter-bar/pipe-add.d.ts +18 -0
  198. package/filter-bar/pipe-add.scss +5 -0
  199. package/filter-bar/pipe.directive.d.ts +13 -0
  200. package/filter-bar/pipes/base-pipe.d.ts +40 -0
  201. package/filter-bar/pipes/base-pipe.scss +117 -0
  202. package/filter-bar/pipes/pipe-button.d.ts +13 -0
  203. package/filter-bar/pipes/pipe-button.scss +5 -0
  204. package/filter-bar/pipes/pipe-date.d.ts +41 -0
  205. package/filter-bar/pipes/pipe-date.scss +132 -0
  206. package/filter-bar/pipes/pipe-datetime.d.ts +41 -0
  207. package/filter-bar/pipes/pipe-multi-select.d.ts +22 -0
  208. package/filter-bar/pipes/pipe-multiselect.scss +15 -0
  209. package/filter-bar/pipes/pipe-select.d.ts +21 -0
  210. package/filter-bar/pipes/pipe-select.scss +3 -0
  211. package/filter-bar/pipes/pipe-state.d.ts +14 -0
  212. package/filter-bar/pipes/pipe-text.d.ts +19 -0
  213. package/filter-bar/pipes/pipe-title.d.ts +25 -0
  214. package/filter-bar/public-api.d.ts +19 -0
  215. package/form-field/form-field.d.ts +6 -1
  216. package/form-field/form-field.scss +1 -0
  217. package/icon/icon-button.component.d.ts +5 -3
  218. package/icon/icon-item.component.d.ts +5 -3
  219. package/icon/icon.component.d.ts +5 -4
  220. package/list/list.scss +2 -3
  221. package/navbar/vertical-navbar.component.d.ts +4 -1
  222. package/overflow-items/overflow-items.d.ts +59 -71
  223. package/package.json +19 -7
  224. package/popover/popover.component.d.ts +6 -1
  225. package/radio/radio-tokens.scss +7 -3
  226. package/radio/radio.scss +19 -15
  227. package/schematics/ng-add/index.js +6 -6
  228. package/select/_select-theme.scss +9 -1
  229. package/tags/tag.scss +3 -0
  230. package/textarea/textarea.component.d.ts +2 -1
  231. package/timezone/timezone-option-tokens.scss +3 -2
  232. package/title/title.directive.d.ts +2 -0
  233. package/tree/tree-option.scss +2 -1
  234. package/tree-select/_tree-select-theme.scss +9 -1
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
2
  import { DateAdapter } from '@koobiq/components/core';
3
- import { Subject } from 'rxjs';
3
+ import { Subject, Subscription } from 'rxjs';
4
4
  import { createMissingDateImplError } from './datepicker-errors';
5
5
  import { KbqDatepickerIntl } from './datepicker-intl';
6
6
  import { KbqMonthView } from './month-view.component';
@@ -78,6 +78,8 @@ export class KbqCalendar {
78
78
  * Emits whenever there is a state change that the header may need to respond to.
79
79
  */
80
80
  this.stateChanges = new Subject();
81
+ /** Subscription to value changes in the associated input element. */
82
+ this.inputSubscription = Subscription.EMPTY;
81
83
  if (!this.adapter) {
82
84
  throw createMissingDateImplError('DateAdapter');
83
85
  }
@@ -91,6 +93,7 @@ export class KbqCalendar {
91
93
  }
92
94
  ngOnDestroy() {
93
95
  this.intlChanges.unsubscribe();
96
+ this.inputSubscription.unsubscribe();
94
97
  this.stateChanges.complete();
95
98
  }
96
99
  ngOnChanges(changes) {
@@ -105,6 +108,21 @@ export class KbqCalendar {
105
108
  }
106
109
  this.stateChanges.next();
107
110
  }
111
+ /**
112
+ * Register an input with this calendar.
113
+ * @param input The calendar input to register with this calendar.
114
+ */
115
+ registerInput(input) {
116
+ if (this.datepickerInput) {
117
+ throw Error('A KbqDatepicker can only be associated with a single input.');
118
+ }
119
+ this.datepickerInput = input;
120
+ this.inputSubscription = this.datepickerInput.valueChange.subscribe((value) => {
121
+ this.selected = value;
122
+ this.monthView?.init();
123
+ this.activeDate = value;
124
+ });
125
+ }
108
126
  /** Updates today's date after an update of the active date */
109
127
  updateTodaysDate() {
110
128
  this.monthView.ngAfterContentInit();
@@ -163,4 +181,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
163
181
  type: ViewChild,
164
182
  args: [KbqMonthView, { static: false }]
165
183
  }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFdEQ7OztHQUdHO0FBWUgsTUFBTSxPQUFPLFdBQVc7SUFDcEIsK0VBQStFO0lBQy9FLElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBZTtRQUN2QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxRQUFRO1lBQ1QsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJ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LE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7aUlBNUtRLFdBQVc7cUhBQVgsV0FBVyxzYUFpR1QsWUFBWSxnR0N0STNCLCtsQkFvQkE7OzJGRGlCYSxXQUFXO2tCQVh2QixTQUFTOytCQUNJLGNBQWMsWUFDZCxhQUFhLFFBR2pCO3dCQUNGLEtBQUssRUFBRSxjQUFjO3FCQUN4QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzswQkE4RzFDLFFBQVE7eUVBekdULE9BQU87c0JBRFYsS0FBSztnQkFnQkYsUUFBUTtzQkFEWCxLQUFLO2dCQWFGLE9BQU87c0JBRFYsS0FBSztnQkFlRixPQUFPO3NCQURWLEtBQUs7Z0JBOEJHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHYSxjQUFjO3NCQUFoQyxNQUFNO2dCQU1ZLFlBQVk7c0JBQTlCLE1BQU07Z0JBTVksYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxhQUFhO3NCQUEvQixNQUFNO2dCQUdxQyxTQUFTO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFDYWxlbmRhckNlbGxDc3NDbGFzc2VzIH0gZnJvbSAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvciB9IGZyb20gJy4vZGF0ZXBpY2tlci1lcnJvcnMnO1xuaW1wb3J0IHsgS2JxRGF0ZXBpY2tlckludGwgfSBmcm9tICcuL2RhdGVwaWNrZXItaW50bCc7XG5pbXBvcnQgeyBLYnFNb250aFZpZXcgfSBmcm9tICcuL21vbnRoLXZpZXcuY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGNhbGVuZGFyIHRoYXQgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBkYXRlcGlja2VyLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS1jYWxlbmRhcicsXG4gICAgZXhwb3J0QXM6ICdrYnFDYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnY2FsZW5kYXIuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtY2FsZW5kYXInXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEticUNhbGVuZGFyPEQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIC8qKiBBIGRhdGUgcmVwcmVzZW50aW5nIHRoZSBwZXJpb2QgKG1vbnRoIG9yIHllYXIpIHRvIHN0YXJ0IHRoZSBjYWxlbmRhciBpbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBzdGFydEF0KCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXQ7XG4gICAgfVxuXG4gICAgc2V0IHN0YXJ0QXQodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGVPck51bGwodGhpcy5hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG5cbiAgICAgICAgdGhpcy5fc3RhcnRBdCA9XG4gICAgICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSAhPT0gbnVsbCA/IHRoaXMuYWRhcHRlci5jbGFtcERhdGUoZGVzZXJpYWxpemVkVmFsdWUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhcnRBdDogRCB8IG51bGw7XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBEIHwgbnVsbDtcblxuICAgIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgbWluRGF0ZSgpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgIH1cblxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcblxuICAgICAgICB0aGlzLnN0YXJ0QXQgPSB0aGlzLl9zdGFydEF0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21pbkRhdGU6IEQgfCBudWxsO1xuXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX21heERhdGUgPSB0aGlzLmFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRBdCA9IHRoaXMuX3N0YXJ0QXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWF4RGF0ZTogRCB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBhY3RpdmUgZGF0ZS4gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIHRpbWUgcGVyaW9kIGlzIHNob3duIGFuZCB3aGljaCBkYXRlIGlzXG4gICAgICogaGlnaGxpZ2h0ZWQgYW5kIHVzZWQgYXMgdGhlIGFuY2hvciBvbiAgd2hlbiB1c2luZyBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBhY3RpdmVEYXRlKCk6IEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci5jbGFtcERhdGUodmFsdWUgfHwgdGhpcy5nZXRBY3RpdmVEYXRlRGVmYXVsdCgpLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IEQ7XG5cbiAgICAvKiogRnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGUuICovXG4gICAgQElucHV0KCkgZGF0ZUZpbHRlcjogKGRhdGU6IEQpID0+IGJvb2xlYW47XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgY3VzdG9tIENTUyBjbGFzc2VzIHRvIGRhdGVzLiAqL1xuICAgIEBJbnB1dCgpIGRhdGVDbGFzczogKGRhdGU6IEQpID0+IEticUNhbGVuZGFyQ2VsbENzc0NsYXNzZXM7XG5cbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHRoZSB5ZWFyIGNob3NlbiBpbiBtdWx0aXllYXIgdmlldy5cbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHllYXJTZWxlY3RlZDogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhlIG1vbnRoIGNob3NlbiBpbiB5ZWFyIHZpZXcuXG4gICAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBtb250aFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdXNlclNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBtb250aCB2aWV3IGNvbXBvbmVudC4gKi9cbiAgICBAVmlld0NoaWxkKEticU1vbnRoVmlldywgeyBzdGF0aWM6IGZhbHNlIH0pIG1vbnRoVmlldzogS2JxTW9udGhWaWV3PEQ+O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbmV2ZXIgdGhlcmUgaXMgYSBzdGF0ZSBjaGFuZ2UgdGhhdCB0aGUgaGVhZGVyIG1heSBuZWVkIHRvIHJlc3BvbmQgdG8uXG4gICAgICovXG4gICAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50bENoYW5nZXM6IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbnRsOiBLYnFEYXRlcGlja2VySW50bCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBhZGFwdGVyOiBEYXRlQWRhcHRlcjxEPixcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yKCdEYXRlQWRhcHRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRsQ2hhbmdlcyA9IGludGwuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5nZXRBY3RpdmVEYXRlRGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmludGxDaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlIHx8IGNoYW5nZXMuZGF0ZUZpbHRlcjtcblxuICAgICAgICBpZiAoY2hhbmdlICYmICFjaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vbnRoVmlldykge1xuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYGRldGVjdENoYW5nZXNgIG1hbnVhbGx5IGhlcmUsIGJlY2F1c2UgdGhlIGBtaW5EYXRlYCwgYG1heERhdGVgIGV0Yy4gYXJlXG4gICAgICAgICAgICAgICAgLy8gcGFzc2VkIGRvd24gdG8gdGhlIHZpZXcgdmlhIGRhdGEgYmluZGluZ3Mgd2hpY2ggd29uJ3QgYmUgdXAtdG8tZGF0ZSB3aGVuIHdlIGNhbGwgYGluaXRgLlxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9udGhWaWV3LmluaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlcyB0b2RheSdzIGRhdGUgYWZ0ZXIgYW4gdXBkYXRlIG9mIHRoZSBhY3RpdmUgZGF0ZSAqL1xuICAgIHVwZGF0ZVRvZGF5c0RhdGUoKSB7XG4gICAgICAgIHRoaXMubW9udGhWaWV3Lm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIGRhdGUgc2VsZWN0aW9uIGluIHRoZSBtb250aCB2aWV3LiAqL1xuICAgIGRhdGVTZWxlY3RlZChkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hZGFwdGVyLnNhbWVEYXRlKGRhdGUsIHRoaXMuc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VyU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlclNlbGVjdGlvbi5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiBvYmplY3QgaWYgaXQgaXMgYm90aCBhIGRhdGUgaW5zdGFuY2UgYW5kIHZhbGlkLCBvdGhlcndpc2UgbnVsbC5cbiAgICAgKi9cbiAgICAvLyB0b2RvINCy0YvQs9C70Y/QtNC40YIg0LrQsNC6INC60L7RgdGC0YvQu9GMINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQvdGD0LbQvdC+INC40LfQsdCw0LLQuNGC0YzRgdGPXG4gICAgcHJpdmF0ZSBnZXRWYWxpZERhdGVPck51bGwob2JqOiBhbnkpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuaXNEYXRlSW5zdGFuY2Uob2JqKSAmJiB0aGlzLmFkYXB0ZXIuaXNWYWxpZChvYmopID8gb2JqIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZURhdGVEZWZhdWx0KCk6IEQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydEF0IHx8IHRoaXMuYWRhcHRlci50b2RheSgpO1xuICAgIH1cbn1cbiIsIjxrYnEtY2FsZW5kYXItaGVhZGVyXG4gICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkLmVtaXQoYWN0aXZlRGF0ZSlcIlxuICAgICh5ZWFyU2VsZWN0ZWQpPVwieWVhclNlbGVjdGVkLmVtaXQoYWN0aXZlRGF0ZSlcIlxuLz5cblxuPGRpdiBjbGFzcz1cImticS1jYWxlbmRhcl9fY29udGVudFwiPlxuICAgIDxrYnEtbW9udGgtdmlld1xuICAgICAgICBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzc1wiXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJkYXRlU2VsZWN0ZWQoJGV2ZW50ISlcIlxuICAgICAgICAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiXG4gICAgLz5cbjwvZGl2PlxuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFdEQ7OztHQUdHO0FBWUgsTUFBTSxPQUFPLFdBQVc7SUFDcEIsK0VBQStFO0lBQy9FLElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBZTtRQUN2QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxRQUFRO1lBQ1QsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIs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LFlBQVk7c0JBQTlCLE1BQU07Z0JBTVksYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxhQUFhO3NCQUEvQixNQUFNO2dCQUdxQyxTQUFTO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFDYWxlbmRhckNlbGxDc3NDbGFzc2VzIH0gZnJvbSAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvciB9IGZyb20gJy4vZGF0ZXBpY2tlci1lcnJvcnMnO1xuaW1wb3J0IHsgS2JxRGF0ZXBpY2tlckludGwgfSBmcm9tICcuL2RhdGVwaWNrZXItaW50bCc7XG5pbXBvcnQgeyBLYnFNb250aFZpZXcgfSBmcm9tICcuL21vbnRoLXZpZXcuY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGNhbGVuZGFyIHRoYXQgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBkYXRlcGlja2VyLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS1jYWxlbmRhcicsXG4gICAgZXhwb3J0QXM6ICdrYnFDYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnY2FsZW5kYXIuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtY2FsZW5kYXInXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEticUNhbGVuZGFyPEQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIC8qKiBBIGRhdGUgcmVwcmVzZW50aW5nIHRoZSBwZXJpb2QgKG1vbnRoIG9yIHllYXIpIHRvIHN0YXJ0IHRoZSBjYWxlbmRhciBpbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBzdGFydEF0KCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXQ7XG4gICAgfVxuXG4gICAgc2V0IHN0YXJ0QXQodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGVPck51bGwodGhpcy5hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG5cbiAgICAgICAgdGhpcy5fc3RhcnRBdCA9XG4gICAgICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSAhPT0gbnVsbCA/IHRoaXMuYWRhcHRlci5jbGFtcERhdGUoZGVzZXJpYWxpemVkVmFsdWUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhcnRBdDogRCB8IG51bGw7XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBEIHwgbnVsbDtcblxuICAgIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgbWluRGF0ZSgpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgIH1cblxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5hZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcblxuICAgICAgICB0aGlzLnN0YXJ0QXQgPSB0aGlzLl9zdGFydEF0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21pbkRhdGU6IEQgfCBudWxsO1xuXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX21heERhdGUgPSB0aGlzLmFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRBdCA9IHRoaXMuX3N0YXJ0QXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWF4RGF0ZTogRCB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBhY3RpdmUgZGF0ZS4gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIHRpbWUgcGVyaW9kIGlzIHNob3duIGFuZCB3aGljaCBkYXRlIGlzXG4gICAgICogaGlnaGxpZ2h0ZWQgYW5kIHVzZWQgYXMgdGhlIGFuY2hvciBvbiAgd2hlbiB1c2luZyBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBhY3RpdmVEYXRlKCk6IEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci5jbGFtcERhdGUodmFsdWUgfHwgdGhpcy5nZXRBY3RpdmVEYXRlRGVmYXVsdCgpLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IEQ7XG5cbiAgICAvKiogRnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGUuICovXG4gICAgQElucHV0KCkgZGF0ZUZpbHRlcjogKGRhdGU6IEQpID0+IGJvb2xlYW47XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgY3VzdG9tIENTUyBjbGFzc2VzIHRvIGRhdGVzLiAqL1xuICAgIEBJbnB1dCgpIGRhdGVDbGFzczogKGRhdGU6IEQpID0+IEticUNhbGVuZGFyQ2VsbENzc0NsYXNzZXM7XG5cbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHRoZSB5ZWFyIGNob3NlbiBpbiBtdWx0aXllYXIgdmlldy5cbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHllYXJTZWxlY3RlZDogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhlIG1vbnRoIGNob3NlbiBpbiB5ZWFyIHZpZXcuXG4gICAgICogVGhpcyBkb2Vzbid0IGltcGx5IGEgY2hhbmdlIG9uIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBtb250aFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdXNlclNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBtb250aCB2aWV3IGNvbXBvbmVudC4gKi9cbiAgICBAVmlld0NoaWxkKEticU1vbnRoVmlldywgeyBzdGF0aWM6IGZhbHNlIH0pIG1vbnRoVmlldzogS2JxTW9udGhWaWV3PEQ+O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbmV2ZXIgdGhlcmUgaXMgYSBzdGF0ZSBjaGFuZ2UgdGhhdCB0aGUgaGVhZGVyIG1heSBuZWVkIHRvIHJlc3BvbmQgdG8uXG4gICAgICovXG4gICAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBUaGUgaW5wdXQgZWxlbWVudCB0aGlzIGRhdGVwaWNrZXIgaXMgYXNzb2NpYXRlZCB3aXRoLiAqL1xuICAgIGRhdGVwaWNrZXJJbnB1dDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50bENoYW5nZXM6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBTdWJzY3JpcHRpb24gdG8gdmFsdWUgY2hhbmdlcyBpbiB0aGUgYXNzb2NpYXRlZCBpbnB1dCBlbGVtZW50LiAqL1xuICAgIHByaXZhdGUgaW5wdXRTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW50bDogS2JxRGF0ZXBpY2tlckludGwsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlcjogRGF0ZUFkYXB0ZXI8RD4sXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignRGF0ZUFkYXB0ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50bENoYW5nZXMgPSBpbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZ2V0QWN0aXZlRGF0ZURlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5pbnRsQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlucHV0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlIHx8IGNoYW5nZXMuZGF0ZUZpbHRlcjtcblxuICAgICAgICBpZiAoY2hhbmdlICYmICFjaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vbnRoVmlldykge1xuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYGRldGVjdENoYW5nZXNgIG1hbnVhbGx5IGhlcmUsIGJlY2F1c2UgdGhlIGBtaW5EYXRlYCwgYG1heERhdGVgIGV0Yy4gYXJlXG4gICAgICAgICAgICAgICAgLy8gcGFzc2VkIGRvd24gdG8gdGhlIHZpZXcgdmlhIGRhdGEgYmluZGluZ3Mgd2hpY2ggd29uJ3QgYmUgdXAtdG8tZGF0ZSB3aGVuIHdlIGNhbGwgYGluaXRgLlxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9udGhWaWV3LmluaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBpbnB1dCB3aXRoIHRoaXMgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGlucHV0IFRoZSBjYWxlbmRhciBpbnB1dCB0byByZWdpc3RlciB3aXRoIHRoaXMgY2FsZW5kYXIuXG4gICAgICovXG4gICAgcmVnaXN0ZXJJbnB1dChpbnB1dCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VySW5wdXQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdBIEticURhdGVwaWNrZXIgY2FuIG9ubHkgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRlcGlja2VySW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5pbnB1dFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0ZXBpY2tlcklucHV0LnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWU6IEQgfCBudWxsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMubW9udGhWaWV3Py5pbml0KCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB2YWx1ZSBhcyBEO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlcyB0b2RheSdzIGRhdGUgYWZ0ZXIgYW4gdXBkYXRlIG9mIHRoZSBhY3RpdmUgZGF0ZSAqL1xuICAgIHVwZGF0ZVRvZGF5c0RhdGUoKSB7XG4gICAgICAgIHRoaXMubW9udGhWaWV3Lm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIGRhdGUgc2VsZWN0aW9uIGluIHRoZSBtb250aCB2aWV3LiAqL1xuICAgIGRhdGVTZWxlY3RlZChkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hZGFwdGVyLnNhbWVEYXRlKGRhdGUsIHRoaXMuc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VyU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlclNlbGVjdGlvbi5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiBvYmplY3QgaWYgaXQgaXMgYm90aCBhIGRhdGUgaW5zdGFuY2UgYW5kIHZhbGlkLCBvdGhlcndpc2UgbnVsbC5cbiAgICAgKi9cbiAgICAvLyB0b2RvINCy0YvQs9C70Y/QtNC40YIg0LrQsNC6INC60L7RgdGC0YvQu9GMINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQvdGD0LbQvdC+INC40LfQsdCw0LLQuNGC0YzRgdGPXG4gICAgcHJpdmF0ZSBnZXRWYWxpZERhdGVPck51bGwob2JqOiBhbnkpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuaXNEYXRlSW5zdGFuY2Uob2JqKSAmJiB0aGlzLmFkYXB0ZXIuaXNWYWxpZChvYmopID8gb2JqIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZURhdGVEZWZhdWx0KCk6IEQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydEF0IHx8IHRoaXMuYWRhcHRlci50b2RheSgpO1xuICAgIH1cbn1cbiIsIjxrYnEtY2FsZW5kYXItaGVhZGVyXG4gICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkLmVtaXQoYWN0aXZlRGF0ZSlcIlxuICAgICh5ZWFyU2VsZWN0ZWQpPVwieWVhclNlbGVjdGVkLmVtaXQoYWN0aXZlRGF0ZSlcIlxuLz5cblxuPGRpdiBjbGFzcz1cImticS1jYWxlbmRhcl9fY29udGVudFwiPlxuICAgIDxrYnEtbW9udGgtdmlld1xuICAgICAgICBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzc1wiXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJkYXRlU2VsZWN0ZWQoJGV2ZW50ISlcIlxuICAgICAgICAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiXG4gICAgLz5cbjwvZGl2PlxuIl19