primeng 16.0.1 → 16.1.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 (233) hide show
  1. package/accordion/accordion.d.ts +35 -11
  2. package/api/tooltipoptions.d.ts +1 -0
  3. package/api/translation.d.ts +23 -0
  4. package/api/treenode.d.ts +1 -1
  5. package/autocomplete/autocomplete.d.ts +1 -1
  6. package/avatar/avatar.d.ts +11 -1
  7. package/breadcrumb/breadcrumb.d.ts +5 -1
  8. package/button/button.d.ts +3 -0
  9. package/chip/chip.d.ts +1 -0
  10. package/contextmenu/contextmenu.d.ts +157 -67
  11. package/dock/dock.d.ts +47 -2
  12. package/dom/domhandler.d.ts +1 -0
  13. package/esm2022/accordion/accordion.mjs +177 -43
  14. package/esm2022/api/primengconfig.mjs +75 -2
  15. package/esm2022/api/tooltipoptions.mjs +1 -1
  16. package/esm2022/api/translation.mjs +1 -1
  17. package/esm2022/api/treenode.mjs +1 -1
  18. package/esm2022/autocomplete/autocomplete.mjs +3 -3
  19. package/esm2022/avatar/avatar.mjs +18 -4
  20. package/esm2022/blockui/blockui.mjs +19 -3
  21. package/esm2022/breadcrumb/breadcrumb.mjs +50 -33
  22. package/esm2022/button/button.mjs +4 -1
  23. package/esm2022/card/card.mjs +3 -3
  24. package/esm2022/chip/chip.mjs +18 -13
  25. package/esm2022/contextmenu/contextmenu.mjs +993 -547
  26. package/esm2022/divider/divider.mjs +3 -3
  27. package/esm2022/dock/dock.mjs +284 -86
  28. package/esm2022/dom/domhandler.mjs +19 -7
  29. package/esm2022/dropdown/dropdown.mjs +2 -2
  30. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +4 -1
  31. package/esm2022/fieldset/fieldset.mjs +59 -32
  32. package/esm2022/fileupload/fileupload.mjs +4 -4
  33. package/esm2022/image/image.mjs +11 -3
  34. package/esm2022/inplace/inplace.mjs +18 -11
  35. package/esm2022/megamenu/megamenu.mjs +997 -348
  36. package/esm2022/menu/menu.mjs +398 -166
  37. package/esm2022/menubar/menubar.mjs +895 -282
  38. package/esm2022/orderlist/orderlist.mjs +9 -15
  39. package/esm2022/panel/panel.mjs +44 -33
  40. package/esm2022/panelmenu/panelmenu.mjs +982 -344
  41. package/esm2022/progressbar/progressbar.mjs +19 -15
  42. package/esm2022/progressspinner/progressspinner.mjs +5 -5
  43. package/esm2022/ripple/ripple.mjs +3 -1
  44. package/esm2022/scrollpanel/scrollpanel.mjs +195 -23
  45. package/esm2022/scrolltop/scrolltop.mjs +11 -2
  46. package/esm2022/skeleton/skeleton.mjs +3 -3
  47. package/esm2022/slidemenu/slidemenu.mjs +1059 -372
  48. package/esm2022/splitbutton/splitbutton.mjs +2 -2
  49. package/esm2022/splitter/splitter.mjs +160 -29
  50. package/esm2022/steps/steps.mjs +112 -22
  51. package/esm2022/table/table.mjs +21 -11
  52. package/esm2022/tabmenu/tabmenu.mjs +191 -63
  53. package/esm2022/tabview/tabview.mjs +173 -39
  54. package/esm2022/terminal/terminal.mjs +3 -3
  55. package/esm2022/tieredmenu/tieredmenu.mjs +868 -392
  56. package/esm2022/toolbar/toolbar.mjs +17 -10
  57. package/esm2022/tooltip/tooltip.mjs +2 -2
  58. package/esm2022/tree/tree.mjs +3 -3
  59. package/esm2022/treetable/treetable.mjs +17 -17
  60. package/esm2022/utils/objectutils.mjs +31 -1
  61. package/esm2022/utils/uniquecomponentid.mjs +2 -3
  62. package/fesm2022/primeng-accordion.mjs +176 -42
  63. package/fesm2022/primeng-accordion.mjs.map +1 -1
  64. package/fesm2022/primeng-api.mjs +74 -1
  65. package/fesm2022/primeng-api.mjs.map +1 -1
  66. package/fesm2022/primeng-autocomplete.mjs +2 -2
  67. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  68. package/fesm2022/primeng-avatar.mjs +17 -3
  69. package/fesm2022/primeng-avatar.mjs.map +1 -1
  70. package/fesm2022/primeng-blockui.mjs +18 -2
  71. package/fesm2022/primeng-blockui.mjs.map +1 -1
  72. package/fesm2022/primeng-breadcrumb.mjs +49 -32
  73. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  74. package/fesm2022/primeng-button.mjs +3 -0
  75. package/fesm2022/primeng-button.mjs.map +1 -1
  76. package/fesm2022/primeng-card.mjs +2 -2
  77. package/fesm2022/primeng-card.mjs.map +1 -1
  78. package/fesm2022/primeng-chip.mjs +17 -12
  79. package/fesm2022/primeng-chip.mjs.map +1 -1
  80. package/fesm2022/primeng-contextmenu.mjs +992 -546
  81. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  82. package/fesm2022/primeng-divider.mjs +2 -2
  83. package/fesm2022/primeng-divider.mjs.map +1 -1
  84. package/fesm2022/primeng-dock.mjs +283 -85
  85. package/fesm2022/primeng-dock.mjs.map +1 -1
  86. package/fesm2022/primeng-dom.mjs +18 -6
  87. package/fesm2022/primeng-dom.mjs.map +1 -1
  88. package/fesm2022/primeng-dropdown.mjs +1 -1
  89. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  90. package/fesm2022/primeng-dynamicdialog.mjs +3 -0
  91. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  92. package/fesm2022/primeng-fieldset.mjs +57 -30
  93. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  94. package/fesm2022/primeng-fileupload.mjs +3 -3
  95. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  96. package/fesm2022/primeng-image.mjs +10 -2
  97. package/fesm2022/primeng-image.mjs.map +1 -1
  98. package/fesm2022/primeng-inplace.mjs +17 -10
  99. package/fesm2022/primeng-inplace.mjs.map +1 -1
  100. package/fesm2022/primeng-megamenu.mjs +996 -348
  101. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  102. package/fesm2022/primeng-menu.mjs +397 -166
  103. package/fesm2022/primeng-menu.mjs.map +1 -1
  104. package/fesm2022/primeng-menubar.mjs +894 -281
  105. package/fesm2022/primeng-menubar.mjs.map +1 -1
  106. package/fesm2022/primeng-orderlist.mjs +8 -14
  107. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  108. package/fesm2022/primeng-panel.mjs +44 -33
  109. package/fesm2022/primeng-panel.mjs.map +1 -1
  110. package/fesm2022/primeng-panelmenu.mjs +981 -344
  111. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  112. package/fesm2022/primeng-progressbar.mjs +18 -14
  113. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  114. package/fesm2022/primeng-progressspinner.mjs +4 -4
  115. package/fesm2022/primeng-progressspinner.mjs.map +1 -1
  116. package/fesm2022/primeng-ripple.mjs +2 -0
  117. package/fesm2022/primeng-ripple.mjs.map +1 -1
  118. package/fesm2022/primeng-scrollpanel.mjs +194 -22
  119. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  120. package/fesm2022/primeng-scrolltop.mjs +10 -1
  121. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  122. package/fesm2022/primeng-skeleton.mjs +2 -2
  123. package/fesm2022/primeng-skeleton.mjs.map +1 -1
  124. package/fesm2022/primeng-slidemenu.mjs +1058 -371
  125. package/fesm2022/primeng-slidemenu.mjs.map +1 -1
  126. package/fesm2022/primeng-splitbutton.mjs +1 -1
  127. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  128. package/fesm2022/primeng-splitter.mjs +160 -29
  129. package/fesm2022/primeng-splitter.mjs.map +1 -1
  130. package/fesm2022/primeng-steps.mjs +111 -21
  131. package/fesm2022/primeng-steps.mjs.map +1 -1
  132. package/fesm2022/primeng-table.mjs +20 -10
  133. package/fesm2022/primeng-table.mjs.map +1 -1
  134. package/fesm2022/primeng-tabmenu.mjs +190 -62
  135. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  136. package/fesm2022/primeng-tabview.mjs +172 -38
  137. package/fesm2022/primeng-tabview.mjs.map +1 -1
  138. package/fesm2022/primeng-terminal.mjs +2 -2
  139. package/fesm2022/primeng-terminal.mjs.map +1 -1
  140. package/fesm2022/primeng-tieredmenu.mjs +867 -391
  141. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  142. package/fesm2022/primeng-toolbar.mjs +16 -9
  143. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  144. package/fesm2022/primeng-tooltip.mjs +1 -1
  145. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  146. package/fesm2022/primeng-tree.mjs +2 -2
  147. package/fesm2022/primeng-tree.mjs.map +1 -1
  148. package/fesm2022/primeng-treetable.mjs +16 -16
  149. package/fesm2022/primeng-treetable.mjs.map +1 -1
  150. package/fesm2022/primeng-utils.mjs +31 -2
  151. package/fesm2022/primeng-utils.mjs.map +1 -1
  152. package/fieldset/fieldset.d.ts +6 -5
  153. package/fileupload/fileupload.d.ts +1 -1
  154. package/image/image.d.ts +1 -0
  155. package/inplace/inplace.d.ts +6 -1
  156. package/megamenu/megamenu.d.ts +137 -15
  157. package/menu/menu.d.ts +74 -8
  158. package/menubar/menubar.d.ts +116 -22
  159. package/orderlist/orderlist.d.ts +2 -1
  160. package/package.json +131 -131
  161. package/panel/panel.d.ts +6 -5
  162. package/panelmenu/panelmenu.d.ts +134 -22
  163. package/resources/components/autocomplete/autocomplete.css +9 -8
  164. package/resources/components/breadcrumb/breadcrumb.css +9 -3
  165. package/resources/components/common/common.css +1 -1
  166. package/resources/components/contextmenu/contextmenu.css +1 -7
  167. package/resources/components/dock/dock.css +1 -1
  168. package/resources/components/megamenu/megamenu.css +9 -10
  169. package/resources/components/panelmenu/panelmenu.css +4 -2
  170. package/resources/components/slidemenu/slidemenu.css +40 -41
  171. package/resources/primeng.css +1 -1
  172. package/resources/primeng.min.css +1 -1
  173. package/resources/themes/arya-blue/theme.css +342 -390
  174. package/resources/themes/arya-green/theme.css +342 -390
  175. package/resources/themes/arya-orange/theme.css +342 -390
  176. package/resources/themes/arya-purple/theme.css +342 -390
  177. package/resources/themes/bootstrap4-dark-blue/theme.css +357 -416
  178. package/resources/themes/bootstrap4-dark-purple/theme.css +357 -416
  179. package/resources/themes/bootstrap4-light-blue/theme.css +369 -428
  180. package/resources/themes/bootstrap4-light-purple/theme.css +369 -428
  181. package/resources/themes/fluent-light/theme.css +352 -400
  182. package/resources/themes/lara-dark-blue/theme.css +344 -392
  183. package/resources/themes/lara-dark-indigo/theme.css +344 -392
  184. package/resources/themes/lara-dark-purple/theme.css +344 -392
  185. package/resources/themes/lara-dark-teal/theme.css +344 -392
  186. package/resources/themes/lara-light-blue/theme.css +370 -418
  187. package/resources/themes/lara-light-indigo/theme.css +370 -418
  188. package/resources/themes/lara-light-purple/theme.css +370 -418
  189. package/resources/themes/lara-light-teal/theme.css +370 -418
  190. package/resources/themes/luna-amber/theme.css +360 -408
  191. package/resources/themes/luna-blue/theme.css +360 -408
  192. package/resources/themes/luna-green/theme.css +360 -408
  193. package/resources/themes/luna-pink/theme.css +360 -408
  194. package/resources/themes/md-dark-deeppurple/theme.css +373 -403
  195. package/resources/themes/md-dark-indigo/theme.css +373 -403
  196. package/resources/themes/md-light-deeppurple/theme.css +373 -403
  197. package/resources/themes/md-light-indigo/theme.css +373 -403
  198. package/resources/themes/mdc-dark-deeppurple/theme.css +373 -403
  199. package/resources/themes/mdc-dark-indigo/theme.css +373 -403
  200. package/resources/themes/mdc-light-deeppurple/theme.css +373 -403
  201. package/resources/themes/mdc-light-indigo/theme.css +373 -403
  202. package/resources/themes/mira/theme.css +347 -395
  203. package/resources/themes/nano/theme.css +348 -396
  204. package/resources/themes/nova/theme.css +336 -384
  205. package/resources/themes/nova-accent/theme.css +336 -384
  206. package/resources/themes/nova-alt/theme.css +336 -384
  207. package/resources/themes/rhea/theme.css +336 -384
  208. package/resources/themes/saga-blue/theme.css +348 -396
  209. package/resources/themes/saga-green/theme.css +348 -396
  210. package/resources/themes/saga-orange/theme.css +348 -396
  211. package/resources/themes/saga-purple/theme.css +348 -396
  212. package/resources/themes/soho-dark/theme.css +362 -410
  213. package/resources/themes/soho-light/theme.css +370 -418
  214. package/resources/themes/tailwind-light/theme.css +361 -409
  215. package/resources/themes/vela-blue/theme.css +348 -396
  216. package/resources/themes/vela-green/theme.css +348 -396
  217. package/resources/themes/vela-orange/theme.css +348 -396
  218. package/resources/themes/vela-purple/theme.css +348 -396
  219. package/resources/themes/viva-dark/theme.css +342 -390
  220. package/resources/themes/viva-light/theme.css +348 -396
  221. package/scrollpanel/scrollpanel.d.ts +22 -4
  222. package/scrolltop/scrolltop.d.ts +6 -1
  223. package/slidemenu/slidemenu.d.ts +192 -88
  224. package/splitter/splitter.d.ts +18 -5
  225. package/steps/steps.d.ts +20 -3
  226. package/table/table.d.ts +6 -3
  227. package/tabmenu/tabmenu.d.ts +24 -1
  228. package/tabview/tabview.d.ts +26 -3
  229. package/tieredmenu/tieredmenu.d.ts +134 -50
  230. package/toolbar/toolbar.d.ts +6 -1
  231. package/tooltip/tooltip.d.ts +2 -2
  232. package/utils/objectutils.d.ts +4 -0
  233. package/utils/uniquecomponentid.d.ts +1 -1
@@ -77,6 +77,11 @@ class Inplace {
77
77
  * @group Props
78
78
  */
79
79
  closeIcon;
80
+ /**
81
+ * Establishes a string value that labels the close button.
82
+ * @group Props
83
+ */
84
+ closeAriaLabel;
80
85
  /**
81
86
  * Callback to invoke when inplace is opened.
82
87
  * @param {Event} event - Browser event.
@@ -146,15 +151,15 @@ class Inplace {
146
151
  }
147
152
  }
148
153
  onKeydown(event) {
149
- if (event.which === 13) {
154
+ if (event.code === 'Enter') {
150
155
  this.activate(event);
151
156
  event.preventDefault();
152
157
  }
153
158
  }
154
159
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Inplace, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
155
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Inplace, selector: "p-inplace", inputs: { active: "active", closable: "closable", disabled: "disabled", preventClick: "preventClick", style: "style", styleClass: "styleClass", closeIcon: "closeIcon" }, outputs: { onActivate: "onActivate", onDeactivate: "onDeactivate" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
156
- <div [ngClass]="{ 'p-inplace p-component': true, 'p-inplace-closable': closable }" [ngStyle]="style" [class]="styleClass">
157
- <div class="p-inplace-display" (click)="onActivateClick($event)" tabindex="0" (keydown)="onKeydown($event)" [ngClass]="{ 'p-disabled': disabled }" *ngIf="!active">
160
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Inplace, selector: "p-inplace", inputs: { active: "active", closable: "closable", disabled: "disabled", preventClick: "preventClick", style: "style", styleClass: "styleClass", closeIcon: "closeIcon", closeAriaLabel: "closeAriaLabel" }, outputs: { onActivate: "onActivate", onDeactivate: "onDeactivate" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
161
+ <div [ngClass]="{ 'p-inplace p-component': true, 'p-inplace-closable': closable }" [ngStyle]="style" [class]="styleClass" [attr.aria-live]="'polite'">
162
+ <div class="p-inplace-display" (click)="onActivateClick($event)" tabindex="0" role="button" (keydown)="onKeydown($event)" [ngClass]="{ 'p-disabled': disabled }" *ngIf="!active">
158
163
  <ng-content select="[pInplaceDisplay]"></ng-content>
159
164
  <ng-container *ngTemplateOutlet="displayTemplate"></ng-container>
160
165
  </div>
@@ -163,8 +168,8 @@ class Inplace {
163
168
  <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
164
169
 
165
170
  <ng-container *ngIf="closable">
166
- <button *ngIf="icon" type="button" [icon]="icon" pButton (click)="onDeactivateClick($event)"></button>
167
- <button *ngIf="!icon" type="button" pButton [ngClass]="'p-button-icon-only'" (click)="onDeactivateClick($event)">
171
+ <button *ngIf="closeIcon" type="button" [icon]="closeIcon" pButton (click)="onDeactivateClick($event)" [attr.aria-label]="closeAriaLabel"></button>
172
+ <button *ngIf="!closeIcon" type="button" pButton [ngClass]="'p-button-icon-only'" (click)="onDeactivateClick($event)" [attr.aria-label]="closeAriaLabel">
168
173
  <TimesIcon *ngIf="!closeIconTemplate" />
169
174
  <ng-template *ngTemplateOutlet="closeIconTemplate"></ng-template>
170
175
  </button>
@@ -177,8 +182,8 @@ export { Inplace };
177
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Inplace, decorators: [{
178
183
  type: Component,
179
184
  args: [{ selector: 'p-inplace', template: `
180
- <div [ngClass]="{ 'p-inplace p-component': true, 'p-inplace-closable': closable }" [ngStyle]="style" [class]="styleClass">
181
- <div class="p-inplace-display" (click)="onActivateClick($event)" tabindex="0" (keydown)="onKeydown($event)" [ngClass]="{ 'p-disabled': disabled }" *ngIf="!active">
185
+ <div [ngClass]="{ 'p-inplace p-component': true, 'p-inplace-closable': closable }" [ngStyle]="style" [class]="styleClass" [attr.aria-live]="'polite'">
186
+ <div class="p-inplace-display" (click)="onActivateClick($event)" tabindex="0" role="button" (keydown)="onKeydown($event)" [ngClass]="{ 'p-disabled': disabled }" *ngIf="!active">
182
187
  <ng-content select="[pInplaceDisplay]"></ng-content>
183
188
  <ng-container *ngTemplateOutlet="displayTemplate"></ng-container>
184
189
  </div>
@@ -187,8 +192,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
187
192
  <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
188
193
 
189
194
  <ng-container *ngIf="closable">
190
- <button *ngIf="icon" type="button" [icon]="icon" pButton (click)="onDeactivateClick($event)"></button>
191
- <button *ngIf="!icon" type="button" pButton [ngClass]="'p-button-icon-only'" (click)="onDeactivateClick($event)">
195
+ <button *ngIf="closeIcon" type="button" [icon]="closeIcon" pButton (click)="onDeactivateClick($event)" [attr.aria-label]="closeAriaLabel"></button>
196
+ <button *ngIf="!closeIcon" type="button" pButton [ngClass]="'p-button-icon-only'" (click)="onDeactivateClick($event)" [attr.aria-label]="closeAriaLabel">
192
197
  <TimesIcon *ngIf="!closeIconTemplate" />
193
198
  <ng-template *ngTemplateOutlet="closeIconTemplate"></ng-template>
194
199
  </button>
@@ -212,6 +217,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
212
217
  type: Input
213
218
  }], closeIcon: [{
214
219
  type: Input
220
+ }], closeAriaLabel: [{
221
+ type: Input
215
222
  }], onActivate: [{
216
223
  type: Output
217
224
  }], onDeactivate: [{
@@ -234,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
234
241
  declarations: [Inplace, InplaceDisplay, InplaceContent]
235
242
  }]
236
243
  }] });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wbGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9pbnBsYWNlL2lucGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUEwQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzTSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRWhELE1BT2EsY0FBYzt1R0FBZCxjQUFjOzJGQUFkLGNBQWMsK0ZBTGIsMkJBQTJCOztTQUs1QixjQUFjOzJGQUFkLGNBQWM7a0JBUDFCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSxXQUFXO3FCQUNyQjtpQkFDSjs7QUFHRCxNQU9hLGNBQWM7dUdBQWQsY0FBYzsyRkFBZCxjQUFjLCtGQUxiLDJCQUEyQjs7U0FLNUIsY0FBYzsyRkFBZCxjQUFjO2tCQVAxQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsV0FBVztxQkFDckI7aUJBQ0o7O0FBRUQ7OztHQUdHO0FBQ0gsTUE2QmEsT0FBTztJQTJERztJQTFEbkI7OztPQUdHO0lBQ00sTUFBTSxHQUF3QixLQUFLLENBQUM7SUFDN0M7OztPQUdH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aUIsQ0FBQyxJQUFJLFFBRS9CO3dCQUNGLEtBQUssRUFBRSxXQUFXO3FCQUNyQjt3R0FPUSxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFNSSxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBRXlCLFNBQVM7c0JBQXhDLGVBQWU7dUJBQUMsYUFBYTs7QUF1RWxDLE1BS2EsYUFBYTt1R0FBYixhQUFhO3dHQUFiLGFBQWEsaUJBN0hiLE9BQU8sRUEzQ1AsY0FBYyxFQVNkLGNBQWMsYUEySmIsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxhQXpIcEQsT0FBTyxFQTNDUCxjQUFjLEVBU2QsY0FBYyxFQTRKNEIsWUFBWSxFQUFFLFlBQVk7d0dBR3BFLGFBQWEsWUFKWixZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQ1YsWUFBWSxFQUFFLFlBQVk7O1NBR3BFLGFBQWE7MkZBQWIsYUFBYTtrQkFMekIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUM7b0JBQzlELE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUM7b0JBQzlFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDO2lCQUMxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ01vZHVsZSwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSwgU2hhcmVkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVGltZXNJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy90aW1lcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1pbnBsYWNlRGlzcGxheScsXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAncC1lbGVtZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgSW5wbGFjZURpc3BsYXkge31cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWlucGxhY2VDb250ZW50JyxcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdwLWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBJbnBsYWNlQ29udGVudCB7fVxuLyoqXG4gKiBJbnBsYWNlIHByb3ZpZGVzIGFuIGVhc3kgdG8gZG8gZWRpdGluZyBhbmQgZGlzcGxheSBhdCB0aGUgc2FtZSB0aW1lIHdoZXJlIGNsaWNraW5nIHRoZSBvdXRwdXQgZGlzcGxheXMgdGhlIGFjdHVhbCBjb250ZW50LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWlucGxhY2UnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncC1pbnBsYWNlIHAtY29tcG9uZW50JzogdHJ1ZSwgJ3AtaW5wbGFjZS1jbG9zYWJsZSc6IGNsb3NhYmxlIH1cIiBbbmdTdHlsZV09XCJzdHlsZVwiIFtjbGFzc109XCJzdHlsZUNsYXNzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnBsYWNlLWRpc3BsYXlcIiAoY2xpY2spPVwib25BY3RpdmF0ZUNsaWNrKCRldmVudClcIiB0YWJpbmRleD1cIjBcIiAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiIFtuZ0NsYXNzXT1cInsgJ3AtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCIgKm5nSWY9XCIhYWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BJbnBsYWNlRGlzcGxheV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRpc3BsYXlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnBsYWNlLWNvbnRlbnRcIiAqbmdJZj1cImFjdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwSW5wbGFjZUNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjbG9zYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaWNvblwiIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJpY29uXCIgcEJ1dHRvbiAoY2xpY2spPVwib25EZWFjdGl2YXRlQ2xpY2soJGV2ZW50KVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWljb25cIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBbbmdDbGFzc109XCIncC1idXR0b24taWNvbi1vbmx5J1wiIChjbGljayk9XCJvbkRlYWN0aXZhdGVDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGltZXNJY29uICpuZ0lmPVwiIWNsb3NlSWNvblRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3NlSWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL2lucGxhY2UuY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3AtZWxlbWVudCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIElucGxhY2UgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb250ZW50IGlzIGRpc3BsYXllZCBvciBub3QuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gZGlzcGxheSBtb2RlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGNsb3NhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdG8gcHJldmVudCBjbGlja2luZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIENsYXNzIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJY29uIHRvIGRpc3BsYXkgaW4gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjbG9zZUljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBpbnBsYWNlIGlzIG9wZW5lZC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIEJyb3dzZXIgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWN0aXZhdGU6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGlucGxhY2UgaXMgY2xvc2VkLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZWFjdGl2YXRlOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ7XG5cbiAgICBob3ZlciE6IGJvb2xlYW47XG5cbiAgICBkaXNwbGF5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBjbG9zZUljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzcGxheSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25BY3RpdmF0ZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5wcmV2ZW50Q2xpY2spIHRoaXMuYWN0aXZhdGUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRGVhY3RpdmF0ZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5wcmV2ZW50Q2xpY2spIHRoaXMuZGVhY3RpdmF0ZShldmVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlcyB0aGUgY29udGVudC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIEJyb3dzZXIgZXZlbnQuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIGFjdGl2YXRlKGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uQWN0aXZhdGUuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIHRoZSBjb250ZW50LlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgZGVhY3RpdmF0ZShldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMub25EZWFjdGl2YXRlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBTaGFyZWRNb2R1bGUsIFRpbWVzSWNvbl0sXG4gICAgZXhwb3J0czogW0lucGxhY2UsIElucGxhY2VEaXNwbGF5LCBJbnBsYWNlQ29udGVudCwgQnV0dG9uTW9kdWxlLCBTaGFyZWRNb2R1bGVdLFxuICAgIGRlY2xhcmF0aW9uczogW0lucGxhY2UsIElucGxhY2VEaXNwbGF5LCBJbnBsYWNlQ29udGVudF1cbn0pXG5leHBvcnQgY2xhc3MgSW5wbGFjZU1vZHVsZSB7fVxuIl19
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wbGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9pbnBsYWNlL2lucGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUEwQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzTSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRWhELE1BT2EsY0FBYzt1R0FBZCxjQUFjOzJGQUFkLGNBQWMsK0ZBTGIsMkJBQTJCOztTQUs1QixjQUFjOzJGQUFkLGNBQWM7a0JBUDFCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSxXQUFXO3FCQUNyQjtpQkFDSjs7QUFHRCxNQU9hLGNBQWM7dUdBQWQsY0FBYzsyRkFBZCxjQUFjLCtGQUxiLDJCQUEyQjs7U0FLNUIsY0FBYzsyRkFBZCxjQUFjO2tCQVAxQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsV0FBVztxQkFDckI7aUJBQ0o7O0FBRUQ7OztHQUdHO0FBQ0gsTUE2QmEsT0FBTztJQWdFRztJQS9EbkI7OztPQUdHO0lBQ00sTUFBTSxHQUF3QixLQUFLLENBQUM7SUFDN0M7OztPQUdH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LHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFFL0I7d0JBQ0YsS0FBSyxFQUFFLFdBQVc7cUJBQ3JCO3dHQU9RLE1BQU07c0JBQWQsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUksVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQUV5QixTQUFTO3NCQUF4QyxlQUFlO3VCQUFDLGFBQWE7O0FBdUVsQyxNQUthLGFBQWE7dUdBQWIsYUFBYTt3R0FBYixhQUFhLGlCQWxJYixPQUFPLEVBM0NQLGNBQWMsRUFTZCxjQUFjLGFBZ0tiLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsYUE5SHBELE9BQU8sRUEzQ1AsY0FBYyxFQVNkLGNBQWMsRUFpSzRCLFlBQVksRUFBRSxZQUFZO3dHQUdwRSxhQUFhLFlBSlosWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUNWLFlBQVksRUFBRSxZQUFZOztTQUdwRSxhQUFhOzJGQUFiLGFBQWE7a0JBTHpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO29CQUM5RCxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO29CQUM5RSxZQUFZLEVBQUUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQztpQkFDMUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdNb2R1bGUsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByaW1lVGVtcGxhdGUsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IFRpbWVzSWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvdGltZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtaW5wbGFjZURpc3BsYXknLFxuICAgIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3AtZWxlbWVudCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIElucGxhY2VEaXNwbGF5IHt9XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1pbnBsYWNlQ29udGVudCcsXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAncC1lbGVtZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgSW5wbGFjZUNvbnRlbnQge31cbi8qKlxuICogSW5wbGFjZSBwcm92aWRlcyBhbiBlYXN5IHRvIGRvIGVkaXRpbmcgYW5kIGRpc3BsYXkgYXQgdGhlIHNhbWUgdGltZSB3aGVyZSBjbGlja2luZyB0aGUgb3V0cHV0IGRpc3BsYXlzIHRoZSBhY3R1YWwgY29udGVudC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1pbnBsYWNlJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3AtaW5wbGFjZSBwLWNvbXBvbmVudCc6IHRydWUsICdwLWlucGxhY2UtY2xvc2FibGUnOiBjbG9zYWJsZSB9XCIgW25nU3R5bGVdPVwic3R5bGVcIiBbY2xhc3NdPVwic3R5bGVDbGFzc1wiIFthdHRyLmFyaWEtbGl2ZV09XCIncG9saXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wbGFjZS1kaXNwbGF5XCIgKGNsaWNrKT1cIm9uQWN0aXZhdGVDbGljaygkZXZlbnQpXCIgdGFiaW5kZXg9XCIwXCIgcm9sZT1cImJ1dHRvblwiIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCIgW25nQ2xhc3NdPVwieyAncC1kaXNhYmxlZCc6IGRpc2FibGVkIH1cIiAqbmdJZj1cIiFhY3RpdmVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcElucGxhY2VEaXNwbGF5XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGlzcGxheVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucGxhY2UtY29udGVudFwiICpuZ0lmPVwiYWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BJbnBsYWNlQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsb3NhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjbG9zZUljb25cIiB0eXBlPVwiYnV0dG9uXCIgW2ljb25dPVwiY2xvc2VJY29uXCIgcEJ1dHRvbiAoY2xpY2spPVwib25EZWFjdGl2YXRlQ2xpY2soJGV2ZW50KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xvc2VBcmlhTGFiZWxcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFjbG9zZUljb25cIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBbbmdDbGFzc109XCIncC1idXR0b24taWNvbi1vbmx5J1wiIChjbGljayk9XCJvbkRlYWN0aXZhdGVDbGljaygkZXZlbnQpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJjbG9zZUFyaWFMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpbWVzSWNvbiAqbmdJZj1cIiFjbG9zZUljb25UZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbG9zZUljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnBsYWNlLmNzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdwLWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBJbnBsYWNlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY29udGVudCBpcyBkaXNwbGF5ZWQgb3Igbm90LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIGRpc3BsYXkgbW9kZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjbG9zYWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZW4gcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHRvIHByZXZlbnQgY2xpY2tpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcHJldmVudENsaWNrOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWNvbiB0byBkaXNwbGF5IGluIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgY2xvc2VJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRXN0YWJsaXNoZXMgYSBzdHJpbmcgdmFsdWUgdGhhdCBsYWJlbHMgdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjbG9zZUFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGlucGxhY2UgaXMgb3BlbmVkLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BY3RpdmF0ZTogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gaW5wbGFjZSBpcyBjbG9zZWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlYWN0aXZhdGU6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQcmltZVRlbXBsYXRlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZDtcblxuICAgIGhvdmVyITogYm9vbGVhbjtcblxuICAgIGRpc3BsYXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIGNsb3NlSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXM/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkaXNwbGF5JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFjdGl2YXRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXZlbnRDbGljaykgdGhpcy5hY3RpdmF0ZShldmVudCk7XG4gICAgfVxuXG4gICAgb25EZWFjdGl2YXRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXZlbnRDbGljaykgdGhpcy5kZWFjdGl2YXRlKGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIHRoZSBjb250ZW50LlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgYWN0aXZhdGUoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub25BY3RpdmF0ZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgdGhlIGNvbnRlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBkZWFjdGl2YXRlKGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ob3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbkRlYWN0aXZhdGUuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBTaGFyZWRNb2R1bGUsIFRpbWVzSWNvbl0sXG4gICAgZXhwb3J0czogW0lucGxhY2UsIElucGxhY2VEaXNwbGF5LCBJbnBsYWNlQ29udGVudCwgQnV0dG9uTW9kdWxlLCBTaGFyZWRNb2R1bGVdLFxuICAgIGRlY2xhcmF0aW9uczogW0lucGxhY2UsIElucGxhY2VEaXNwbGF5LCBJbnBsYWNlQ29udGVudF1cbn0pXG5leHBvcnQgY2xhc3MgSW5wbGFjZU1vZHVsZSB7fVxuIl19