design-angular-kit 0.12.0 → 1.0.0-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 (201) hide show
  1. package/README.md +61 -31
  2. package/esm2020/design-angular-kit.mjs +5 -0
  3. package/esm2020/lib/badge/badge.directive.mjs +83 -0
  4. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +66 -0
  5. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +89 -0
  6. package/esm2020/lib/button/button.directive.mjs +185 -0
  7. package/esm2020/lib/button/button.module.mjs +18 -0
  8. package/esm2020/lib/checkbox/checkbox.component.mjs +138 -0
  9. package/esm2020/lib/collapse/collapse-group.component.mjs +57 -0
  10. package/esm2020/lib/collapse/collapse-item.component.mjs +79 -0
  11. package/esm2020/lib/collapse/collapse.config.mjs +12 -0
  12. package/esm2020/lib/collapse/collapse.directive.mjs +55 -0
  13. package/esm2020/lib/collapse/collapse.module.mjs +22 -0
  14. package/esm2020/lib/design-angular-kit.module.mjs +142 -0
  15. package/esm2020/lib/dropdown/dropdown-divider.component.mjs +11 -0
  16. package/esm2020/lib/dropdown/dropdown-item.component.mjs +97 -0
  17. package/esm2020/lib/dropdown/dropdown.component.mjs +143 -0
  18. package/esm2020/lib/dropdown/dropdown.config.mjs +12 -0
  19. package/esm2020/lib/dropdown/dropdown.directive.mjs +156 -0
  20. package/esm2020/lib/dropdown/dropdown.module.mjs +25 -0
  21. package/esm2020/lib/enums/icons.enum.mjs +27 -0
  22. package/esm2020/lib/form-input/form-input-password.utils.mjs +154 -0
  23. package/esm2020/lib/form-input/form-input.component.mjs +495 -0
  24. package/esm2020/lib/form-input/it-prefix.directive.mjs +13 -0
  25. package/esm2020/lib/form-input/it-suffix.directive.mjs +13 -0
  26. package/esm2020/lib/form-input/it-text-prefix.directive.mjs +13 -0
  27. package/esm2020/lib/form-input/it-text-suffix.directive.mjs +13 -0
  28. package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +36 -0
  29. package/esm2020/lib/icon/icon.component.mjs +87 -0
  30. package/esm2020/lib/icon/icon.module.mjs +18 -0
  31. package/esm2020/lib/models/Alignment.mjs +15 -0
  32. package/esm2020/lib/models/ButtonSize.mjs +15 -0
  33. package/esm2020/lib/models/InputType.mjs +44 -0
  34. package/esm2020/lib/models/ThemeColor.mjs +30 -0
  35. package/esm2020/lib/popover/popover.config.mjs +17 -0
  36. package/esm2020/lib/popover/popover.directive.mjs +33 -0
  37. package/esm2020/lib/popover/popover.module.mjs +19 -0
  38. package/esm2020/lib/progress-bar/progress-bar.component.mjs +98 -0
  39. package/esm2020/lib/radio/radio.component.mjs +287 -0
  40. package/esm2020/lib/radio/unique-selection-dispatcher.mjs +55 -0
  41. package/esm2020/lib/tabs/tab-group.component.mjs +177 -0
  42. package/esm2020/lib/tabs/tab.component.mjs +73 -0
  43. package/esm2020/lib/tabs/tabs.module.mjs +20 -0
  44. package/esm2020/lib/toggle/toggle.component.mjs +86 -0
  45. package/esm2020/lib/tooltip/tooltip.config.mjs +17 -0
  46. package/esm2020/lib/tooltip/tooltip.directive.mjs +43 -0
  47. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
  48. package/esm2020/lib/util/focus-mouse.directive.mjs +32 -0
  49. package/esm2020/lib/util/util.mjs +12 -0
  50. package/esm2020/lib/util/utils.module.mjs +16 -0
  51. package/esm2020/public_api.mjs +40 -0
  52. package/fesm2015/design-angular-kit.mjs +3181 -0
  53. package/fesm2015/design-angular-kit.mjs.map +1 -0
  54. package/fesm2020/design-angular-kit.mjs +3160 -0
  55. package/fesm2020/design-angular-kit.mjs.map +1 -0
  56. package/index.d.ts +5 -0
  57. package/lib/badge/badge.directive.d.ts +11 -5
  58. package/lib/breadcrumb/breadcrumb-item.component.d.ts +16 -5
  59. package/lib/breadcrumb/breadcrumb.component.d.ts +12 -5
  60. package/lib/button/button.directive.d.ts +72 -0
  61. package/lib/button/button.module.d.ts +8 -0
  62. package/lib/checkbox/checkbox.component.d.ts +25 -5
  63. package/lib/collapse/collapse-group.component.d.ts +16 -0
  64. package/lib/collapse/collapse-item.component.d.ts +46 -0
  65. package/lib/collapse/collapse.config.d.ts +6 -0
  66. package/lib/collapse/collapse.directive.d.ts +25 -0
  67. package/lib/collapse/collapse.module.d.ts +12 -0
  68. package/lib/design-angular-kit.module.d.ts +27 -0
  69. package/lib/dropdown/dropdown-divider.component.d.ts +3 -0
  70. package/lib/dropdown/dropdown-item.component.d.ts +22 -8
  71. package/lib/dropdown/dropdown.component.d.ts +34 -26
  72. package/lib/dropdown/dropdown.config.d.ts +6 -0
  73. package/lib/dropdown/dropdown.directive.d.ts +77 -0
  74. package/lib/dropdown/dropdown.module.d.ts +15 -0
  75. package/lib/enums/icons.enum.d.ts +23 -0
  76. package/lib/form-input/form-input-password.utils.d.ts +45 -0
  77. package/lib/form-input/form-input.component.d.ts +202 -20
  78. package/lib/form-input/it-prefix.directive.d.ts +5 -0
  79. package/lib/form-input/it-suffix.directive.d.ts +5 -0
  80. package/lib/form-input/it-text-prefix.directive.d.ts +5 -0
  81. package/lib/form-input/it-text-suffix.directive.d.ts +5 -0
  82. package/lib/form-input/mark-matching-text.pipe.d.ts +10 -0
  83. package/lib/icon/icon.component.d.ts +34 -0
  84. package/lib/icon/icon.module.d.ts +8 -0
  85. package/lib/models/Alignment.d.ts +12 -0
  86. package/lib/models/ButtonSize.d.ts +1 -1
  87. package/lib/models/InputType.d.ts +22 -1
  88. package/lib/models/ThemeColor.d.ts +1 -1
  89. package/lib/popover/popover.config.d.ts +5 -6
  90. package/lib/popover/popover.directive.d.ts +13 -108
  91. package/lib/popover/popover.module.d.ts +9 -0
  92. package/lib/progress-bar/progress-bar.component.d.ts +25 -19
  93. package/lib/radio/radio.component.d.ts +22 -10
  94. package/lib/radio/unique-selection-dispatcher.d.ts +3 -0
  95. package/lib/tabs/tab-group.component.d.ts +17 -11
  96. package/lib/tabs/tab.component.d.ts +6 -2
  97. package/lib/tabs/tabs.module.d.ts +10 -0
  98. package/lib/toggle/toggle.component.d.ts +9 -4
  99. package/lib/tooltip/tooltip.config.d.ts +7 -7
  100. package/lib/tooltip/tooltip.directive.d.ts +12 -92
  101. package/lib/tooltip/tooltip.module.d.ts +9 -0
  102. package/lib/util/focus-mouse.directive.d.ts +13 -0
  103. package/lib/util/utils.module.d.ts +7 -0
  104. package/package.json +34 -20
  105. package/public_api.d.ts +19 -2
  106. package/bundles/design-angular-kit.umd.js +0 -5829
  107. package/bundles/design-angular-kit.umd.js.map +0 -1
  108. package/bundles/design-angular-kit.umd.min.js +0 -31
  109. package/bundles/design-angular-kit.umd.min.js.map +0 -1
  110. package/design-angular-kit.d.ts +0 -8
  111. package/design-angular-kit.metadata.json +0 -1
  112. package/esm2015/design-angular-kit.js +0 -14
  113. package/esm2015/lib/badge/badge.directive.js +0 -116
  114. package/esm2015/lib/breadcrumb/breadcrumb-item.component.js +0 -117
  115. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -128
  116. package/esm2015/lib/button/button.component.js +0 -165
  117. package/esm2015/lib/checkbox/checkbox.component.js +0 -170
  118. package/esm2015/lib/design-angular-kit.module.js +0 -81
  119. package/esm2015/lib/dropdown/dropdown-divider.component.js +0 -18
  120. package/esm2015/lib/dropdown/dropdown-header.component.js +0 -29
  121. package/esm2015/lib/dropdown/dropdown-item.component.js +0 -157
  122. package/esm2015/lib/dropdown/dropdown.component.js +0 -248
  123. package/esm2015/lib/form-input/form-input.component.js +0 -489
  124. package/esm2015/lib/models/ButtonSize.js +0 -25
  125. package/esm2015/lib/models/IconPosition.js +0 -21
  126. package/esm2015/lib/models/InputType.js +0 -33
  127. package/esm2015/lib/models/InteractionTrigger.js +0 -35
  128. package/esm2015/lib/models/ThemeColor.js +0 -45
  129. package/esm2015/lib/popover/popover.component.js +0 -134
  130. package/esm2015/lib/popover/popover.config.js +0 -35
  131. package/esm2015/lib/popover/popover.directive.js +0 -433
  132. package/esm2015/lib/popover/popup.js +0 -105
  133. package/esm2015/lib/popover/positioning.js +0 -349
  134. package/esm2015/lib/popover/triggers.js +0 -99
  135. package/esm2015/lib/progress-bar/progress-bar.component.js +0 -170
  136. package/esm2015/lib/radio/radio.component.js +0 -526
  137. package/esm2015/lib/radio/unique-selection-dispatcher.js +0 -70
  138. package/esm2015/lib/tabs/tab-group.component.js +0 -339
  139. package/esm2015/lib/tabs/tab.component.js +0 -143
  140. package/esm2015/lib/toggle/toggle.component.js +0 -173
  141. package/esm2015/lib/tooltip/popup.js +0 -105
  142. package/esm2015/lib/tooltip/positioning.js +0 -349
  143. package/esm2015/lib/tooltip/tooltip.component.js +0 -77
  144. package/esm2015/lib/tooltip/tooltip.config.js +0 -31
  145. package/esm2015/lib/tooltip/tooltip.directive.js +0 -384
  146. package/esm2015/lib/tooltip/triggers.js +0 -99
  147. package/esm2015/lib/util/util.js +0 -30
  148. package/esm2015/public_api.js +0 -28
  149. package/esm5/design-angular-kit.js +0 -14
  150. package/esm5/lib/badge/badge.directive.js +0 -145
  151. package/esm5/lib/breadcrumb/breadcrumb-item.component.js +0 -135
  152. package/esm5/lib/breadcrumb/breadcrumb.component.js +0 -164
  153. package/esm5/lib/button/button.component.js +0 -221
  154. package/esm5/lib/checkbox/checkbox.component.js +0 -200
  155. package/esm5/lib/design-angular-kit.module.js +0 -85
  156. package/esm5/lib/dropdown/dropdown-divider.component.js +0 -20
  157. package/esm5/lib/dropdown/dropdown-header.component.js +0 -27
  158. package/esm5/lib/dropdown/dropdown-item.component.js +0 -197
  159. package/esm5/lib/dropdown/dropdown.component.js +0 -309
  160. package/esm5/lib/form-input/form-input.component.js +0 -582
  161. package/esm5/lib/models/ButtonSize.js +0 -25
  162. package/esm5/lib/models/IconPosition.js +0 -21
  163. package/esm5/lib/models/InputType.js +0 -33
  164. package/esm5/lib/models/InteractionTrigger.js +0 -35
  165. package/esm5/lib/models/ThemeColor.js +0 -45
  166. package/esm5/lib/popover/popover.component.js +0 -144
  167. package/esm5/lib/popover/popover.config.js +0 -37
  168. package/esm5/lib/popover/popover.directive.js +0 -573
  169. package/esm5/lib/popover/popup.js +0 -116
  170. package/esm5/lib/popover/positioning.js +0 -446
  171. package/esm5/lib/popover/triggers.js +0 -115
  172. package/esm5/lib/progress-bar/progress-bar.component.js +0 -218
  173. package/esm5/lib/radio/radio.component.js +0 -610
  174. package/esm5/lib/radio/unique-selection-dispatcher.js +0 -108
  175. package/esm5/lib/tabs/tab-group.component.js +0 -401
  176. package/esm5/lib/tabs/tab.component.js +0 -156
  177. package/esm5/lib/toggle/toggle.component.js +0 -200
  178. package/esm5/lib/tooltip/popup.js +0 -116
  179. package/esm5/lib/tooltip/positioning.js +0 -446
  180. package/esm5/lib/tooltip/tooltip.component.js +0 -80
  181. package/esm5/lib/tooltip/tooltip.config.js +0 -33
  182. package/esm5/lib/tooltip/tooltip.directive.js +0 -516
  183. package/esm5/lib/tooltip/triggers.js +0 -115
  184. package/esm5/lib/util/util.js +0 -48
  185. package/esm5/public_api.js +0 -28
  186. package/fesm2015/design-angular-kit.js +0 -4751
  187. package/fesm2015/design-angular-kit.js.map +0 -1
  188. package/fesm5/design-angular-kit.js +0 -5867
  189. package/fesm5/design-angular-kit.js.map +0 -1
  190. package/lib/button/button.component.d.ts +0 -50
  191. package/lib/dropdown/dropdown-header.component.d.ts +0 -3
  192. package/lib/models/IconPosition.d.ts +0 -9
  193. package/lib/models/InteractionTrigger.d.ts +0 -19
  194. package/lib/popover/popover.component.d.ts +0 -25
  195. package/lib/popover/popup.d.ts +0 -27
  196. package/lib/popover/positioning.d.ts +0 -32
  197. package/lib/popover/triggers.d.ts +0 -18
  198. package/lib/tooltip/popup.d.ts +0 -27
  199. package/lib/tooltip/positioning.d.ts +0 -32
  200. package/lib/tooltip/tooltip.component.d.ts +0 -20
  201. package/lib/tooltip/triggers.d.ts +0 -18
@@ -1,248 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
4
- */
5
- import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, HostListener, ChangeDetectionStrategy } from '@angular/core';
6
- import { Util } from '../util/util';
7
- import { ThemeColor } from '../models/ThemeColor';
8
- /** @type {?} */
9
- let identifier = 0;
10
- /** @type {?} */
11
- const DEFAULT_COLOR = 'dropdown';
12
- /** @type {?} */
13
- const PLACEMENT_PROPERTY = 'x-placement';
14
- /** @type {?} */
15
- const PLACEMENT_VALUE = 'bottom-start';
16
- /**
17
- * Componente usata per attivare o disattivare overlay contestuali per visualizzare elenchi di link e altro ancora con questi menù a tendina
18
- */
19
- export class DropdownComponent {
20
- /**
21
- * @param {?} _eleRef
22
- */
23
- constructor(_eleRef) {
24
- this._eleRef = _eleRef;
25
- this.id = `dropdown-${identifier++}`;
26
- this._isOpen = false;
27
- this._dark = false;
28
- this._fullWidth = false;
29
- this._color = DEFAULT_COLOR;
30
- this._label = '';
31
- this._onOpen = new EventEmitter();
32
- this._onClose = new EventEmitter();
33
- this._onToggle = new EventEmitter();
34
- }
35
- /**
36
- * @return {?}
37
- */
38
- get isOpen() { return this._isOpen; }
39
- /**
40
- * Se presente indica che il dropdown utilizza il tema di colorazione scura.
41
- * Accetta una espressione booleana o può essere usato come attributo senza valore
42
- * @return {?}
43
- */
44
- get dark() { return this._dark; }
45
- /**
46
- * @param {?} value
47
- * @return {?}
48
- */
49
- set dark(value) { this._dark = Util.coerceBooleanProperty(value); }
50
- /**
51
- * Se presente indica che le voci del dropdown si sviluppano orizzontalmente.
52
- * Accetta una espressione booleana o può essere usato come attributo senza valore
53
- * @return {?}
54
- */
55
- get fullWidth() { return this._fullWidth; }
56
- /**
57
- * @param {?} value
58
- * @return {?}
59
- */
60
- set fullWidth(value) { this._fullWidth = Util.coerceBooleanProperty(value); }
61
- /**
62
- * Il colore del pulsante che attiva il dropdown.
63
- * Può assumere i valori primary, secondary, danger, warning, info, warning, success, light e dark
64
- * @return {?}
65
- */
66
- get color() { return this._color; }
67
- /**
68
- * @param {?} value
69
- * @return {?}
70
- */
71
- set color(value) {
72
- if (ThemeColor.is(value)) {
73
- this._color = value;
74
- }
75
- else {
76
- this._color = DEFAULT_COLOR;
77
- }
78
- }
79
- /**
80
- * Il testo presente sul pulsante che attiva il dropdown
81
- * @return {?}
82
- */
83
- get label() { return this._label; }
84
- /**
85
- * @param {?} value
86
- * @return {?}
87
- */
88
- set label(value) { this._label = value; }
89
- /**
90
- * Evento che viene lanciato ogni volta che il dropdown viene aperto
91
- * @return {?}
92
- */
93
- get onOpen() { return this._onOpen; }
94
- /**
95
- * @param {?} value
96
- * @return {?}
97
- */
98
- set onOpen(value) { this._onOpen = value; }
99
- /**
100
- * Evento che viene lanciato ogni volta che il dropdown viene chiuso
101
- * @return {?}
102
- */
103
- get onClose() { return this._onClose; }
104
- /**
105
- * @param {?} value
106
- * @return {?}
107
- */
108
- set onClose(value) { this._onClose = value; }
109
- /**
110
- * Evento che viene lanciato ogni volta che il dropdown viene aperto oppure chiuso
111
- * @return {?}
112
- */
113
- get onToggle() { return this._onToggle; }
114
- /**
115
- * @param {?} value
116
- * @return {?}
117
- */
118
- set onToggle(value) { this._onToggle = value; }
119
- /**
120
- * @param {?} target
121
- * @return {?}
122
- */
123
- onClick(target) {
124
- if (target === this._dropdownButton.nativeElement) {
125
- this._toggle();
126
- }
127
- else if (this.isOpen) {
128
- this._close();
129
- }
130
- }
131
- /**
132
- * @param {?} target
133
- * @return {?}
134
- */
135
- onFocus(target) {
136
- /** @type {?} */
137
- const isPartOfDropdown = (/** @type {?} */ (this._eleRef.nativeElement)).contains(target);
138
- if (!isPartOfDropdown && this.isOpen) {
139
- this._close();
140
- }
141
- }
142
- /**
143
- * @return {?}
144
- */
145
- get dropdownButtonClass() {
146
- return `btn btn-${this.color} dropdown-toggle`;
147
- }
148
- /**
149
- * @return {?}
150
- */
151
- _toggle() {
152
- if (this._isOpen) {
153
- this._close();
154
- }
155
- else {
156
- this._open();
157
- }
158
- this.onToggle.emit(this);
159
- }
160
- /**
161
- * @return {?}
162
- */
163
- _open() {
164
- if (!this._isOpen) {
165
- this._isOpen = true;
166
- this._dropdownMenu.nativeElement.setAttribute(PLACEMENT_PROPERTY, PLACEMENT_VALUE);
167
- this.onOpen.emit(this);
168
- }
169
- }
170
- /**
171
- * @return {?}
172
- */
173
- _close() {
174
- if (this._isOpen) {
175
- this._isOpen = false;
176
- this._dropdownMenu.nativeElement.removeAttribute(PLACEMENT_PROPERTY);
177
- this.onClose.emit(this);
178
- }
179
- }
180
- }
181
- DropdownComponent.decorators = [
182
- { type: Component, args: [{
183
- selector: 'it-dropdown',
184
- template: `<div class="dropdown" [class.show]="isOpen" [id]="id">
185
- <button #dropdownButton [class]="dropdownButtonClass"
186
- type="button" id="dropdownMenuButton"
187
- aria-haspopup="true" [attr.aria-expanded]="isOpen">
188
- {{label}}
189
- </button>
190
- <div #dropdownMenu class="dropdown-menu" aria-labelledby="dropdownMenuButton"
191
- [class.dark]="dark" [class.full-width]="fullWidth" [class.show]="isOpen">
192
- <div class="link-list-wrapper">
193
- <ul class="link-list">
194
- <ng-content></ng-content>
195
- </ul>
196
- </div>
197
- </div>
198
- </div>
199
- `,
200
- styles: [``],
201
- changeDetection: ChangeDetectionStrategy.OnPush
202
- },] },
203
- ];
204
- /** @nocollapse */
205
- DropdownComponent.ctorParameters = () => [
206
- { type: ElementRef }
207
- ];
208
- DropdownComponent.propDecorators = {
209
- _dropdownMenu: [{ type: ViewChild, args: ['dropdownMenu',] }],
210
- _dropdownButton: [{ type: ViewChild, args: ['dropdownButton',] }],
211
- dark: [{ type: Input }],
212
- fullWidth: [{ type: Input }],
213
- color: [{ type: Input }],
214
- label: [{ type: Input }],
215
- onOpen: [{ type: Output }],
216
- onClose: [{ type: Output }],
217
- onToggle: [{ type: Output }],
218
- onClick: [{ type: HostListener, args: ['document:click', ['$event.target'],] }],
219
- onFocus: [{ type: HostListener, args: ['document:focusin', ['$event.target'],] }]
220
- };
221
- if (false) {
222
- /** @type {?} */
223
- DropdownComponent.prototype._dropdownMenu;
224
- /** @type {?} */
225
- DropdownComponent.prototype._dropdownButton;
226
- /** @type {?} */
227
- DropdownComponent.prototype.id;
228
- /** @type {?} */
229
- DropdownComponent.prototype._isOpen;
230
- /** @type {?} */
231
- DropdownComponent.prototype._dark;
232
- /** @type {?} */
233
- DropdownComponent.prototype._fullWidth;
234
- /** @type {?} */
235
- DropdownComponent.prototype._color;
236
- /** @type {?} */
237
- DropdownComponent.prototype._label;
238
- /** @type {?} */
239
- DropdownComponent.prototype._onOpen;
240
- /** @type {?} */
241
- DropdownComponent.prototype._onClose;
242
- /** @type {?} */
243
- DropdownComponent.prototype._onToggle;
244
- /** @type {?} */
245
- DropdownComponent.prototype._eleRef;
246
- }
247
-
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGVzaWduLWFuZ3VsYXIta2l0LyIsInNvdXJjZXMiOlsibGliL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFDckcsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRWxELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQzs7QUFFbkIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDOztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQzs7QUFDekMsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDOzs7O0FBMEJ2QyxNQUFNOzs7O0lBa0dKLFlBQW9CLE9BQW1CO1FBQW5CLFlBQU8sR0FBUCxPQUFPLENBQVk7a0JBM0ZsQyxZQUFZLFVBQVUsRUFBRSxFQUFFO3VCQUdiLEtBQUs7cUJBU1AsS0FBSzswQkFTQSxLQUFLO3NCQWVULGFBQWE7c0JBUWIsRUFBRTt1QkFRRCxJQUFJLFlBQVksRUFBcUI7d0JBUXBDLElBQUksWUFBWSxFQUFxQjt5QkFRcEMsSUFBSSxZQUFZLEVBQXFCO0tBeUJ4RDs7OztJQTNGRCxJQUFJLE1BQU0sS0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzs7Ozs7SUFPOUMsSUFDSSxJQUFJLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTs7Ozs7SUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBYyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Ozs7OztJQU81RSxJQUNJLFNBQVMsS0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFOzs7OztJQUNwRCxJQUFJLFNBQVMsQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTs7Ozs7O0lBT3RGLElBQ0ksS0FBSyxLQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Ozs7O0lBQ3hDLElBQUksS0FBSyxDQUFDLEtBQVU7UUFDbEIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDckI7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1NBQzdCO0tBQ0Y7Ozs7O0lBTUQsSUFDSSxLQUFLLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTs7Ozs7SUFDM0MsSUFBSSxLQUFLLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUU7Ozs7O0lBTWpELElBQ0ksTUFBTSxLQUFzQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzs7OztJQUN0RSxJQUFJLE1BQU0sQ0FBQyxLQUFzQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7Ozs7O0lBTTVFLElBQ0ksT0FBTyxLQUFzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFOzs7OztJQUN4RSxJQUFJLE9BQU8sQ0FBQyxLQUFzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUU7Ozs7O0lBTTlFLElBQ0ksUUFBUSxLQUFzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFOzs7OztJQUMxRSxJQUFJLFFBQVEsQ0FBQyxLQUFzQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUU7Ozs7O0lBSWhGLE9BQU8sQ0FBQyxNQUFNO1FBQ1osRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7S0FDRjs7Ozs7SUFHRCxPQUFPLENBQUMsTUFBTTs7UUFDWixNQUFNLGdCQUFnQixHQUFHLG1CQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBNEIsRUFBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO0tBQ0Y7Ozs7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxrQkFBa0IsQ0FBQztLQUNoRDs7OztJQU1PLE9BQU87UUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDZjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7SUFHbkIsS0FBSztRQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCOzs7OztJQUdLLE1BQU07UUFDWixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6Qjs7OztZQWpKSixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O0NBZVg7Z0JBQ0MsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7O1lBbENvRCxVQUFVOzs7NEJBb0M1RCxTQUFTLFNBQUMsY0FBYzs4QkFHeEIsU0FBUyxTQUFDLGdCQUFnQjttQkFZMUIsS0FBSzt3QkFTTCxLQUFLO29CQVNMLEtBQUs7b0JBY0wsS0FBSztxQkFRTCxNQUFNO3NCQVFOLE1BQU07dUJBUU4sTUFBTTtzQkFLTixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUM7c0JBU2hELFlBQVksU0FBQyxrQkFBa0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IFRoZW1lQ29sb3IgfSBmcm9tICcuLi9tb2RlbHMvVGhlbWVDb2xvcic7XG5cbmxldCBpZGVudGlmaWVyID0gMDtcblxuY29uc3QgREVGQVVMVF9DT0xPUiA9ICdkcm9wZG93bic7XG5jb25zdCBQTEFDRU1FTlRfUFJPUEVSVFkgPSAneC1wbGFjZW1lbnQnO1xuY29uc3QgUExBQ0VNRU5UX1ZBTFVFID0gJ2JvdHRvbS1zdGFydCc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSB1c2F0YSBwZXIgYXR0aXZhcmUgbyBkaXNhdHRpdmFyZSBvdmVybGF5IGNvbnRlc3R1YWxpIHBlciB2aXN1YWxpenphcmUgZWxlbmNoaSBkaSBsaW5rIGUgYWx0cm8gYW5jb3JhIGNvbiBxdWVzdGkgbWVuw7kgYSB0ZW5kaW5hXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiBbY2xhc3Muc2hvd109XCJpc09wZW5cIiBbaWRdPVwiaWRcIj5cbiAgPGJ1dHRvbiAjZHJvcGRvd25CdXR0b24gW2NsYXNzXT1cImRyb3Bkb3duQnV0dG9uQ2xhc3NcIiBcbiAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93bk1lbnVCdXR0b25cIlxuICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIj5cbiAgICB7e2xhYmVsfX1cbiAgPC9idXR0b24+XG4gIDxkaXYgI2Ryb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b25cIlxuICAgIFtjbGFzcy5kYXJrXT1cImRhcmtcIiBbY2xhc3MuZnVsbC13aWR0aF09XCJmdWxsV2lkdGhcIiBbY2xhc3Muc2hvd109XCJpc09wZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibGluay1saXN0LXdyYXBwZXJcIj5cbiAgICAgIDx1bCBjbGFzcz1cImxpbmstbGlzdFwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuYCxcbiAgc3R5bGVzOiBbYGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTWVudScpXG4gIHByaXZhdGUgX2Ryb3Bkb3duTWVudTogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdkcm9wZG93bkJ1dHRvbicpXG4gIHByaXZhdGUgX2Ryb3Bkb3duQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIGlkID0gYGRyb3Bkb3duLSR7aWRlbnRpZmllcisrfWA7XG5cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzT3BlbjsgfVxuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2UgcHJlc2VudGUgaW5kaWNhIGNoZSBpbCBkcm9wZG93biB1dGlsaXp6YSBpbCB0ZW1hIGRpIGNvbG9yYXppb25lIHNjdXJhLlxuICAgKiBBY2NldHRhIHVuYSBlc3ByZXNzaW9uZSBib29sZWFuYSBvIHB1w7IgZXNzZXJlIHVzYXRvIGNvbWUgYXR0cmlidXRvIHNlbnphIHZhbG9yZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRhcmsoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kYXJrOyB9XG4gIHNldCBkYXJrKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX2RhcmsgPSBVdGlsLmNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgcHJpdmF0ZSBfZGFyayA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZSBwcmVzZW50ZSBpbmRpY2EgY2hlIGxlIHZvY2kgZGVsIGRyb3Bkb3duIHNpIHN2aWx1cHBhbm8gb3JpenpvbnRhbG1lbnRlLlxuICAgKiBBY2NldHRhIHVuYSBlc3ByZXNzaW9uZSBib29sZWFuYSBvIHB1w7IgZXNzZXJlIHVzYXRvIGNvbWUgYXR0cmlidXRvIHNlbnphIHZhbG9yZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGZ1bGxXaWR0aCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Z1bGxXaWR0aDsgfVxuICBzZXQgZnVsbFdpZHRoKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX2Z1bGxXaWR0aCA9IFV0aWwuY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICBwcml2YXRlIF9mdWxsV2lkdGggPSBmYWxzZTtcblxuICAvKipcbiAgICogSWwgY29sb3JlIGRlbCBwdWxzYW50ZSBjaGUgYXR0aXZhIGlsIGRyb3Bkb3duLlxuICAgKiBQdcOyIGFzc3VtZXJlIGkgdmFsb3JpIHByaW1hcnksIHNlY29uZGFyeSwgZGFuZ2VyLCB3YXJuaW5nLCBpbmZvLCB3YXJuaW5nLCBzdWNjZXNzLCBsaWdodCBlIGRhcmtcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBjb2xvcigpOiBhbnkgeyByZXR1cm4gdGhpcy5fY29sb3I7IH1cbiAgc2V0IGNvbG9yKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoVGhlbWVDb2xvci5pcyh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbG9yID0gREVGQVVMVF9DT0xPUjtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfY29sb3IgPSBERUZBVUxUX0NPTE9SO1xuXG4gIC8qKlxuICAgKiBJbCB0ZXN0byBwcmVzZW50ZSBzdWwgcHVsc2FudGUgY2hlIGF0dGl2YSBpbCBkcm9wZG93blxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9sYWJlbDsgfVxuICBzZXQgbGFiZWwodmFsdWU6IHN0cmluZykgeyB0aGlzLl9sYWJlbCA9IHZhbHVlOyB9XG4gIHByaXZhdGUgX2xhYmVsID0gJyc7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBjaGUgdmllbmUgbGFuY2lhdG8gb2duaSB2b2x0YSBjaGUgaWwgZHJvcGRvd24gdmllbmUgYXBlcnRvXG4gICAqL1xuICBAT3V0cHV0KClcbiAgZ2V0IG9uT3BlbigpOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25Db21wb25lbnQ+IHsgcmV0dXJuIHRoaXMuX29uT3BlbjsgfVxuICBzZXQgb25PcGVuKHZhbHVlOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25Db21wb25lbnQ+KSB7IHRoaXMuX29uT3BlbiA9IHZhbHVlOyB9XG4gIHByaXZhdGUgX29uT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8RHJvcGRvd25Db21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBjaGUgdmllbmUgbGFuY2lhdG8gb2duaSB2b2x0YSBjaGUgaWwgZHJvcGRvd24gdmllbmUgY2hpdXNvXG4gICAqL1xuICBAT3V0cHV0KClcbiAgZ2V0IG9uQ2xvc2UoKTogRXZlbnRFbWl0dGVyPERyb3Bkb3duQ29tcG9uZW50PiB7IHJldHVybiB0aGlzLl9vbkNsb3NlOyB9XG4gIHNldCBvbkNsb3NlKHZhbHVlOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25Db21wb25lbnQ+KSB7IHRoaXMuX29uQ2xvc2UgPSB2YWx1ZTsgfVxuICBwcml2YXRlIF9vbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wZG93bkNvbXBvbmVudD4oKTtcblxuICAvKipcbiAgICogRXZlbnRvIGNoZSB2aWVuZSBsYW5jaWF0byBvZ25pIHZvbHRhIGNoZSBpbCBkcm9wZG93biB2aWVuZSBhcGVydG8gb3BwdXJlIGNoaXVzb1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIGdldCBvblRvZ2dsZSgpOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25Db21wb25lbnQ+IHsgcmV0dXJuIHRoaXMuX29uVG9nZ2xlOyB9XG4gIHNldCBvblRvZ2dsZSh2YWx1ZTogRXZlbnRFbWl0dGVyPERyb3Bkb3duQ29tcG9uZW50PikgeyB0aGlzLl9vblRvZ2dsZSA9IHZhbHVlOyB9XG4gIHByaXZhdGUgX29uVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wZG93bkNvbXBvbmVudD4oKTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkNsaWNrKHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHRoaXMuX2Ryb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Zm9jdXNpbicsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkZvY3VzKHRhcmdldCkge1xuICAgIGNvbnN0IGlzUGFydE9mRHJvcGRvd24gPSAodGhpcy5fZWxlUmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKCFpc1BhcnRPZkRyb3Bkb3duICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkcm9wZG93bkJ1dHRvbkNsYXNzKCkge1xuICAgIHJldHVybiBgYnRuIGJ0bi0ke3RoaXMuY29sb3J9IGRyb3Bkb3duLXRvZ2dsZWA7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVSZWY6IEVsZW1lbnRSZWYpIHtcblxuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZW4oKTtcbiAgICB9XG4gICAgdGhpcy5vblRvZ2dsZS5lbWl0KHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3BlbigpIHtcbiAgICBpZiAoIXRoaXMuX2lzT3Blbikge1xuICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Ryb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShQTEFDRU1FTlRfUFJPUEVSVFksIFBMQUNFTUVOVF9WQUxVRSk7XG4gICAgICB0aGlzLm9uT3Blbi5lbWl0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlKCkge1xuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5fZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFBMQUNFTUVOVF9QUk9QRVJUWSk7XG4gICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxufVxuIl19