@softpak/components 0.3.7 → 18.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 (67) hide show
  1. package/esm2022/spx-alert/spx-alert.component.mjs +53 -43
  2. package/esm2022/spx-app-expiry/spx-app-expiry.component.mjs +57 -40
  3. package/esm2022/spx-app-update/spx-app-update.component.mjs +61 -55
  4. package/esm2022/spx-card/spx-card-item.component.mjs +37 -31
  5. package/esm2022/spx-card/spx-card-line.component.mjs +63 -40
  6. package/esm2022/spx-card/spx-card.component.mjs +52 -49
  7. package/esm2022/spx-change-details/spx-change-details.component.mjs +3 -5
  8. package/esm2022/spx-channel-selection/src/spx-welcome.component.mjs +3 -6
  9. package/esm2022/spx-check-digit/spx-check-digit.component.mjs +4 -7
  10. package/esm2022/spx-form-section/spx-form-section.component.mjs +19 -14
  11. package/esm2022/spx-form-view/spx-autocomplete-search.component.mjs +3 -5
  12. package/esm2022/spx-form-view/spx-form-view.component.mjs +141 -131
  13. package/esm2022/spx-inputs/spx-dropdown.component.mjs +35 -36
  14. package/esm2022/spx-inputs/spx-input-box.component.mjs +143 -125
  15. package/esm2022/spx-inputs/spx-input-date.component.mjs +84 -81
  16. package/esm2022/spx-inputs/spx-input-float.component.mjs +2 -5
  17. package/esm2022/spx-inputs/spx-input-radio.component.mjs +25 -25
  18. package/esm2022/spx-inputs/spx-input-text.component.mjs +65 -61
  19. package/esm2022/spx-inputs/spx-input-time-modal.component.mjs +73 -60
  20. package/esm2022/spx-inputs/spx-input-time.component.mjs +2 -5
  21. package/esm2022/spx-inputs/spx-input.component.mjs +223 -213
  22. package/esm2022/spx-navigation/spx-home-tile.component.mjs +40 -37
  23. package/esm2022/spx-navigation/spx-navigation.component.mjs +6 -10
  24. package/esm2022/spx-number-check/spx-number-check.component.mjs +47 -41
  25. package/esm2022/spx-patch/spx-patch.component.mjs +27 -21
  26. package/esm2022/spx-spinner/spx-spinner.component.mjs +143 -142
  27. package/esm2022/spx-stock-info/spx-stock-info.component.mjs +6 -9
  28. package/esm2022/spx-toaster/src/spx-toaster.component.mjs +91 -96
  29. package/esm2022/spx-update/src/spx-update-info.component.mjs +3 -5
  30. package/esm2022/spx-validation/spx-validate-control.component.mjs +4 -7
  31. package/fesm2022/softpak-components-spx-alert.mjs +52 -42
  32. package/fesm2022/softpak-components-spx-alert.mjs.map +1 -1
  33. package/fesm2022/softpak-components-spx-app-expiry.mjs +56 -39
  34. package/fesm2022/softpak-components-spx-app-expiry.mjs.map +1 -1
  35. package/fesm2022/softpak-components-spx-app-update.mjs +60 -54
  36. package/fesm2022/softpak-components-spx-app-update.mjs.map +1 -1
  37. package/fesm2022/softpak-components-spx-card.mjs +148 -115
  38. package/fesm2022/softpak-components-spx-card.mjs.map +1 -1
  39. package/fesm2022/softpak-components-spx-change-details.mjs +2 -4
  40. package/fesm2022/softpak-components-spx-change-details.mjs.map +1 -1
  41. package/fesm2022/softpak-components-spx-channel-selection.mjs +2 -5
  42. package/fesm2022/softpak-components-spx-channel-selection.mjs.map +1 -1
  43. package/fesm2022/softpak-components-spx-check-digit.mjs +3 -6
  44. package/fesm2022/softpak-components-spx-check-digit.mjs.map +1 -1
  45. package/fesm2022/softpak-components-spx-form-section.mjs +18 -13
  46. package/fesm2022/softpak-components-spx-form-section.mjs.map +1 -1
  47. package/fesm2022/softpak-components-spx-form-view.mjs +142 -133
  48. package/fesm2022/softpak-components-spx-form-view.mjs.map +1 -1
  49. package/fesm2022/softpak-components-spx-inputs.mjs +643 -594
  50. package/fesm2022/softpak-components-spx-inputs.mjs.map +1 -1
  51. package/fesm2022/softpak-components-spx-navigation.mjs +44 -44
  52. package/fesm2022/softpak-components-spx-navigation.mjs.map +1 -1
  53. package/fesm2022/softpak-components-spx-number-check.mjs +46 -40
  54. package/fesm2022/softpak-components-spx-number-check.mjs.map +1 -1
  55. package/fesm2022/softpak-components-spx-patch.mjs +26 -20
  56. package/fesm2022/softpak-components-spx-patch.mjs.map +1 -1
  57. package/fesm2022/softpak-components-spx-spinner.mjs +142 -141
  58. package/fesm2022/softpak-components-spx-spinner.mjs.map +1 -1
  59. package/fesm2022/softpak-components-spx-stock-info.mjs +5 -8
  60. package/fesm2022/softpak-components-spx-stock-info.mjs.map +1 -1
  61. package/fesm2022/softpak-components-spx-toaster.mjs +90 -95
  62. package/fesm2022/softpak-components-spx-toaster.mjs.map +1 -1
  63. package/fesm2022/softpak-components-spx-update.mjs +2 -4
  64. package/fesm2022/softpak-components-spx-update.mjs.map +1 -1
  65. package/fesm2022/softpak-components-spx-validation.mjs +3 -6
  66. package/fesm2022/softpak-components-spx-validation.mjs.map +1 -1
  67. package/package.json +12 -12
@@ -1,4 +1,3 @@
1
- import { NgIf } from '@angular/common';
2
1
  import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
2
  import { SpxButtonComponent } from '@softpak/components/spx-button';
4
3
  import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
@@ -64,71 +63,81 @@ export class SpxInputBoxComponent {
64
63
  }
65
64
  }
66
65
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpxInputBoxComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SpxInputBoxComponent, isStandalone: true, selector: "spx-input-box", inputs: { spxCompact: "spxCompact", spxFocused: "spxFocused", spxLabel: "spxLabel", spxReadonly: "spxReadonly", spxRequired: "spxRequired", spxShowClear: "spxShowClear", spxShowEdit: "spxShowEdit", spxShowHelp: "spxShowHelp", spxShowLabel: "spxShowLabel", spxShowSearch: "spxShowSearch", spxShowValidationMessages: "spxShowValidationMessages", spxValue: "spxValue" }, outputs: { spxClear: "spxClear", spxSearch: "spxSearch", spxFocus: "spxFocus", spxFocusOut: "spxFocusOut", spxEdit: "spxEdit", spxHelp: "spxHelp" }, host: { listeners: { "focusin": "handleFocusIn($event)", "focusout": "handleFocusOut($event)", "document:click": "handleWindowClick($event)" } }, ngImport: i0, template: `<div class="flex rounded w-full gap-3"
68
- [class.rounded-none]="this.spxShowValidationMessages"
69
- [class.rounded-t]="this.spxShowValidationMessages"
70
- [class.outline-none]="this.spxFocused && !this.spxReadonly"
71
- [class.ring-2]="this.spxFocused && !this.spxReadonly"
72
- [class.ring-offset-2]="this.spxFocused && !this.spxReadonly"
73
- [class.ring-blue-500]="this.spxFocused && !this.spxReadonly"
74
- [class.bg-white]="!this.spxReadonly"
75
- [class.bg-gray-300]="this.spxReadonly"
76
- [class.cursor-not-allowed]="this.spxReadonly">
77
- <div class="flex-auto p-3"
78
- [class.p-0]="this.spxCompact"
79
- [class.flex]="this.spxCompact"
80
- [class.items-center]="this.spxCompact">
81
- <div *ngIf="this.spxShowLabel" class="font-bold text-sm mb-1 text-gray-800"
82
- [class.mb-0]="this.spxCompact"
83
- [class.px-3]="this.spxCompact">
84
- {{this.spxLabel}} <span *ngIf="spxRequired" class="text-red-800">*</span>
85
- </div>
66
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SpxInputBoxComponent, isStandalone: true, selector: "spx-input-box", inputs: { spxCompact: "spxCompact", spxFocused: "spxFocused", spxLabel: "spxLabel", spxReadonly: "spxReadonly", spxRequired: "spxRequired", spxShowClear: "spxShowClear", spxShowEdit: "spxShowEdit", spxShowHelp: "spxShowHelp", spxShowLabel: "spxShowLabel", spxShowSearch: "spxShowSearch", spxShowValidationMessages: "spxShowValidationMessages", spxValue: "spxValue" }, outputs: { spxClear: "spxClear", spxSearch: "spxSearch", spxFocus: "spxFocus", spxFocusOut: "spxFocusOut", spxEdit: "spxEdit", spxHelp: "spxHelp" }, host: { listeners: { "focusin": "handleFocusIn($event)", "focusout": "handleFocusOut($event)", "document:click": "handleWindowClick($event)" } }, ngImport: i0, template: `<div class="flex rounded w-full gap-3"
67
+ [class.rounded-none]="this.spxShowValidationMessages"
68
+ [class.rounded-t]="this.spxShowValidationMessages"
69
+ [class.outline-none]="this.spxFocused && !this.spxReadonly"
70
+ [class.ring-2]="this.spxFocused && !this.spxReadonly"
71
+ [class.ring-offset-2]="this.spxFocused && !this.spxReadonly"
72
+ [class.ring-blue-500]="this.spxFocused && !this.spxReadonly"
73
+ [class.bg-white]="!this.spxReadonly"
74
+ [class.bg-gray-300]="this.spxReadonly"
75
+ [class.cursor-not-allowed]="this.spxReadonly">
76
+ <div class="flex-auto p-3"
77
+ [class.p-0]="this.spxCompact"
78
+ [class.flex]="this.spxCompact"
79
+ [class.items-center]="this.spxCompact">
80
+ @if (this.spxShowLabel) {
81
+ <div class="font-bold text-sm mb-1 text-gray-800"
82
+ [class.mb-0]="this.spxCompact"
83
+ [class.px-3]="this.spxCompact">
84
+ {{this.spxLabel}} @if (spxRequired) {
85
+ <span class="text-red-800">*</span>
86
+ }
87
+ </div>
88
+ }
86
89
  <ng-content select="[controls]"></ng-content>
87
90
  </div>
88
91
  <div class="flex flex-none gap-1 p-1">
89
- <spx-button
90
- *ngIf="this.spxShowEdit"
91
- (spxClick)="onEdit()"
92
- [spxFullHeight]="true"
93
- [spxSize]="'xl'"
94
- [spxType]="'button'">
95
- <fa-icon [icon]="faEdit" class="block text-xl"></fa-icon>
96
- </spx-button>
97
- <spx-button
98
- *ngIf="this.spxShowHelp"
99
- (spxClick)="onHelp()"
100
- [spxFullHeight]="true"
101
- [spxDisabled]="this.spxReadonly"
102
- [spxSize]="'xl'"
103
- [spxTabIndex]="-1"
104
- [spxType]="'button'">
105
- <fa-icon [icon]="faQuestion" class="block text-xl"></fa-icon>
106
- </spx-button>
107
- <spx-button
108
- *ngIf="this.spxShowSearch"
109
- (spxClick)="onSearch()"
110
- [spxFullHeight]="true"
111
- [spxDisabled]="this.spxReadonly"
112
- [spxSize]="'xl'"
113
- [spxTabIndex]="-1"
114
- [spxType]="'button'">
115
- <fa-icon [icon]="faSearch" class="block text-xl"></fa-icon>
116
- </spx-button>
117
- <spx-button
118
- *ngIf="this.spxShowClear"
119
- (spxClick)="onClear()"
120
- [spxDisabled]="this.spxReadonly || !this.spxValue?.value"
121
- [spxFullHeight]="true"
122
- [spxSize]="'xl'"
123
- [spxTabIndex]="-1"
124
- [spxType]="'button'">
125
- <fa-icon [icon]="faTimes" class="block text-xl"></fa-icon>
126
- </spx-button>
92
+ @if (this.spxShowEdit) {
93
+ <spx-button
94
+ (spxClick)="onEdit()"
95
+ [spxFullHeight]="true"
96
+ [spxSize]="'xl'"
97
+ [spxType]="'button'">
98
+ <fa-icon [icon]="faEdit" class="block text-xl"></fa-icon>
99
+ </spx-button>
100
+ }
101
+ @if (this.spxShowHelp) {
102
+ <spx-button
103
+ (spxClick)="onHelp()"
104
+ [spxFullHeight]="true"
105
+ [spxDisabled]="this.spxReadonly"
106
+ [spxSize]="'xl'"
107
+ [spxTabIndex]="-1"
108
+ [spxType]="'button'">
109
+ <fa-icon [icon]="faQuestion" class="block text-xl"></fa-icon>
110
+ </spx-button>
111
+ }
112
+ @if (this.spxShowSearch) {
113
+ <spx-button
114
+ (spxClick)="onSearch()"
115
+ [spxFullHeight]="true"
116
+ [spxDisabled]="this.spxReadonly"
117
+ [spxSize]="'xl'"
118
+ [spxTabIndex]="-1"
119
+ [spxType]="'button'">
120
+ <fa-icon [icon]="faSearch" class="block text-xl"></fa-icon>
121
+ </spx-button>
122
+ }
123
+ @if (this.spxShowClear) {
124
+ <spx-button
125
+ (spxClick)="onClear()"
126
+ [spxDisabled]="this.spxReadonly || !this.spxValue?.value"
127
+ [spxFullHeight]="true"
128
+ [spxSize]="'xl'"
129
+ [spxTabIndex]="-1"
130
+ [spxType]="'button'">
131
+ <fa-icon [icon]="faTimes" class="block text-xl"></fa-icon>
132
+ </spx-button>
133
+ }
134
+ </div>
127
135
  </div>
128
- </div>
129
- <div *ngIf="this.spxShowValidationMessages" class="bg-red-600 rounded-b text-white p-3">
130
- <ng-content select="[validation-messages]"></ng-content>
131
- </div>`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SpxButtonComponent, selector: "spx-button", inputs: ["spxDisabled", "spxClass", "spxClassObject", "spxForm", "spxFullHeight", "spxFullWidth", "spxSeverity", "spxSize", "spxTabIndex", "spxType"], outputs: ["spxClick"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
136
+ @if (this.spxShowValidationMessages) {
137
+ <div class="bg-red-600 rounded-b text-white p-3">
138
+ <ng-content select="[validation-messages]"></ng-content>
139
+ </div>
140
+ }`, isInline: true, dependencies: [{ kind: "component", type: SpxButtonComponent, selector: "spx-button", inputs: ["spxDisabled", "spxClass", "spxClassObject", "spxForm", "spxFullHeight", "spxFullWidth", "spxSeverity", "spxSize", "spxTabIndex", "spxType"], outputs: ["spxClick"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
132
141
  }
133
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpxInputBoxComponent, decorators: [{
134
143
  type: Component,
@@ -136,75 +145,84 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
136
145
  selector: 'spx-input-box',
137
146
  standalone: true,
138
147
  imports: [
139
- NgIf,
140
148
  SpxButtonComponent,
141
- FontAwesomeModule,
149
+ FontAwesomeModule
142
150
  ],
143
151
  template: `<div class="flex rounded w-full gap-3"
144
- [class.rounded-none]="this.spxShowValidationMessages"
145
- [class.rounded-t]="this.spxShowValidationMessages"
146
- [class.outline-none]="this.spxFocused && !this.spxReadonly"
147
- [class.ring-2]="this.spxFocused && !this.spxReadonly"
148
- [class.ring-offset-2]="this.spxFocused && !this.spxReadonly"
149
- [class.ring-blue-500]="this.spxFocused && !this.spxReadonly"
150
- [class.bg-white]="!this.spxReadonly"
151
- [class.bg-gray-300]="this.spxReadonly"
152
- [class.cursor-not-allowed]="this.spxReadonly">
153
- <div class="flex-auto p-3"
154
- [class.p-0]="this.spxCompact"
155
- [class.flex]="this.spxCompact"
156
- [class.items-center]="this.spxCompact">
157
- <div *ngIf="this.spxShowLabel" class="font-bold text-sm mb-1 text-gray-800"
158
- [class.mb-0]="this.spxCompact"
159
- [class.px-3]="this.spxCompact">
160
- {{this.spxLabel}} <span *ngIf="spxRequired" class="text-red-800">*</span>
161
- </div>
152
+ [class.rounded-none]="this.spxShowValidationMessages"
153
+ [class.rounded-t]="this.spxShowValidationMessages"
154
+ [class.outline-none]="this.spxFocused && !this.spxReadonly"
155
+ [class.ring-2]="this.spxFocused && !this.spxReadonly"
156
+ [class.ring-offset-2]="this.spxFocused && !this.spxReadonly"
157
+ [class.ring-blue-500]="this.spxFocused && !this.spxReadonly"
158
+ [class.bg-white]="!this.spxReadonly"
159
+ [class.bg-gray-300]="this.spxReadonly"
160
+ [class.cursor-not-allowed]="this.spxReadonly">
161
+ <div class="flex-auto p-3"
162
+ [class.p-0]="this.spxCompact"
163
+ [class.flex]="this.spxCompact"
164
+ [class.items-center]="this.spxCompact">
165
+ @if (this.spxShowLabel) {
166
+ <div class="font-bold text-sm mb-1 text-gray-800"
167
+ [class.mb-0]="this.spxCompact"
168
+ [class.px-3]="this.spxCompact">
169
+ {{this.spxLabel}} @if (spxRequired) {
170
+ <span class="text-red-800">*</span>
171
+ }
172
+ </div>
173
+ }
162
174
  <ng-content select="[controls]"></ng-content>
163
175
  </div>
164
176
  <div class="flex flex-none gap-1 p-1">
165
- <spx-button
166
- *ngIf="this.spxShowEdit"
167
- (spxClick)="onEdit()"
168
- [spxFullHeight]="true"
169
- [spxSize]="'xl'"
170
- [spxType]="'button'">
171
- <fa-icon [icon]="faEdit" class="block text-xl"></fa-icon>
172
- </spx-button>
173
- <spx-button
174
- *ngIf="this.spxShowHelp"
175
- (spxClick)="onHelp()"
176
- [spxFullHeight]="true"
177
- [spxDisabled]="this.spxReadonly"
178
- [spxSize]="'xl'"
179
- [spxTabIndex]="-1"
180
- [spxType]="'button'">
181
- <fa-icon [icon]="faQuestion" class="block text-xl"></fa-icon>
182
- </spx-button>
183
- <spx-button
184
- *ngIf="this.spxShowSearch"
185
- (spxClick)="onSearch()"
186
- [spxFullHeight]="true"
187
- [spxDisabled]="this.spxReadonly"
188
- [spxSize]="'xl'"
189
- [spxTabIndex]="-1"
190
- [spxType]="'button'">
191
- <fa-icon [icon]="faSearch" class="block text-xl"></fa-icon>
192
- </spx-button>
193
- <spx-button
194
- *ngIf="this.spxShowClear"
195
- (spxClick)="onClear()"
196
- [spxDisabled]="this.spxReadonly || !this.spxValue?.value"
197
- [spxFullHeight]="true"
198
- [spxSize]="'xl'"
199
- [spxTabIndex]="-1"
200
- [spxType]="'button'">
201
- <fa-icon [icon]="faTimes" class="block text-xl"></fa-icon>
202
- </spx-button>
177
+ @if (this.spxShowEdit) {
178
+ <spx-button
179
+ (spxClick)="onEdit()"
180
+ [spxFullHeight]="true"
181
+ [spxSize]="'xl'"
182
+ [spxType]="'button'">
183
+ <fa-icon [icon]="faEdit" class="block text-xl"></fa-icon>
184
+ </spx-button>
185
+ }
186
+ @if (this.spxShowHelp) {
187
+ <spx-button
188
+ (spxClick)="onHelp()"
189
+ [spxFullHeight]="true"
190
+ [spxDisabled]="this.spxReadonly"
191
+ [spxSize]="'xl'"
192
+ [spxTabIndex]="-1"
193
+ [spxType]="'button'">
194
+ <fa-icon [icon]="faQuestion" class="block text-xl"></fa-icon>
195
+ </spx-button>
196
+ }
197
+ @if (this.spxShowSearch) {
198
+ <spx-button
199
+ (spxClick)="onSearch()"
200
+ [spxFullHeight]="true"
201
+ [spxDisabled]="this.spxReadonly"
202
+ [spxSize]="'xl'"
203
+ [spxTabIndex]="-1"
204
+ [spxType]="'button'">
205
+ <fa-icon [icon]="faSearch" class="block text-xl"></fa-icon>
206
+ </spx-button>
207
+ }
208
+ @if (this.spxShowClear) {
209
+ <spx-button
210
+ (spxClick)="onClear()"
211
+ [spxDisabled]="this.spxReadonly || !this.spxValue?.value"
212
+ [spxFullHeight]="true"
213
+ [spxSize]="'xl'"
214
+ [spxTabIndex]="-1"
215
+ [spxType]="'button'">
216
+ <fa-icon [icon]="faTimes" class="block text-xl"></fa-icon>
217
+ </spx-button>
218
+ }
219
+ </div>
203
220
  </div>
204
- </div>
205
- <div *ngIf="this.spxShowValidationMessages" class="bg-red-600 rounded-b text-white p-3">
206
- <ng-content select="[validation-messages]"></ng-content>
207
- </div>`,
221
+ @if (this.spxShowValidationMessages) {
222
+ <div class="bg-red-600 rounded-b text-white p-3">
223
+ <ng-content select="[validation-messages]"></ng-content>
224
+ </div>
225
+ }`,
208
226
  }]
209
227
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { spxCompact: [{
210
228
  type: Input
@@ -252,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
252
270
  type: HostListener,
253
271
  args: ['document:click', ["$event"]]
254
272
  }] } });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWlucHV0LWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWlucHV0cy9zcHgtaW5wdXQtYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7QUE0RTFGLE1BQU0sT0FBTyxvQkFBb0I7SUF1Qk0sYUFBYSxDQUFDLEVBQVM7UUFDMUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDcUMsY0FBYyxDQUFDLEVBQWM7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUE0QixDQUFDO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUE0QixDQUFDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBQzJDLGlCQUFpQixDQUFDLEVBQVM7UUFDckUsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUs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QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDOEIsYUFBYTtzQkFBakQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBR0csY0FBYztzQkFBbkQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT1EsaUJBQWlCO3NCQUE1RCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcHhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAc29mdHBhay9jb21wb25lbnRzL3NweC1idXR0b24nO1xuaW1wb3J0IHsgU3B4VmFsdWVQYWlyIH0gZnJvbSAnLi9zcHgtdmFsdWUtaW50ZXJmYWNlJztcbmltcG9ydCB7IEZvbnRBd2Vzb21lTW9kdWxlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFFZGl0LCBmYVF1ZXN0aW9uLCBmYVNlYXJjaCwgZmFUaW1lcyB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NweC1pbnB1dC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBTcHhCdXR0b25Db21wb25lbnQsXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImZsZXggcm91bmRlZCB3LWZ1bGwgZ2FwLTNcIlxuICAgIFtjbGFzcy5yb3VuZGVkLW5vbmVdPVwidGhpcy5zcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzXCJcbiAgICBbY2xhc3Mucm91bmRlZC10XT1cInRoaXMuc3B4U2hvd1ZhbGlkYXRpb25NZXNzYWdlc1wiXG4gICAgW2NsYXNzLm91dGxpbmUtbm9uZV09XCJ0aGlzLnNweEZvY3VzZWQgJiYgIXRoaXMuc3B4UmVhZG9ubHlcIlxuICAgIFtjbGFzcy5yaW5nLTJdPVwidGhpcy5zcHhGb2N1c2VkICYmICF0aGlzLnNweFJlYWRvbmx5XCJcbiAgICBbY2xhc3MucmluZy1vZmZzZXQtMl09XCJ0aGlzLnNweEZvY3VzZWQgJiYgIXRoaXMuc3B4UmVhZG9ubHlcIlxuICAgIFtjbGFzcy5yaW5nLWJsdWUtNTAwXT1cInRoaXMuc3B4Rm9jdXNlZCAmJiAhdGhpcy5zcHhSZWFkb25seVwiXG4gICAgW2NsYXNzLmJnLXdoaXRlXT1cIiF0aGlzLnNweFJlYWRvbmx5XCJcbiAgICBbY2xhc3MuYmctZ3JheS0zMDBdPVwidGhpcy5zcHhSZWFkb25seVwiXG4gICAgW2NsYXNzLmN1cnNvci1ub3QtYWxsb3dlZF09XCJ0aGlzLnNweFJlYWRvbmx5XCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtYXV0byBwLTNcIlxuICAgICAgW2NsYXNzLnAtMF09XCJ0aGlzLnNweENvbXBhY3RcIlxuICAgICAgW2NsYXNzLmZsZXhdPVwidGhpcy5zcHhDb21wYWN0XCJcbiAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwidGhpcy5zcHhDb21wYWN0XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5zcHhTaG93TGFiZWxcIiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXNtIG1iLTEgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgIFtjbGFzcy5tYi0wXT1cInRoaXMuc3B4Q29tcGFjdFwiXG4gICAgICAgIFtjbGFzcy5weC0zXT1cInRoaXMuc3B4Q29tcGFjdFwiPlxuICAgICAgICB7e3RoaXMuc3B4TGFiZWx9fSA8c3BhbiAqbmdJZj1cInNweFJlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC04MDBcIj4qPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY29udHJvbHNdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm9uZSBnYXAtMSBwLTFcIj5cbiAgICAgIDxzcHgtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwidGhpcy5zcHhTaG93RWRpdFwiXG4gICAgICAgIChzcHhDbGljayk9XCJvbkVkaXQoKVwiXG4gICAgICAgIFtzcHhGdWxsSGVpZ2h0XT1cInRydWVcIlxuICAgICAgICBbc3B4U2l6ZV09XCIneGwnXCJcbiAgICAgICAgW3NweFR5cGVdPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFFZGl0XCIgY2xhc3M9XCJibG9jayB0ZXh0LXhsXCI+PC9mYS1pY29uPlxuICAgICAgPC9zcHgtYnV0dG9uPlxuICAgICAgPHNweC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJ0aGlzLnNweFNob3dIZWxwXCJcbiAgICAgICAgKHNweENsaWNrKT1cIm9uSGVscCgpXCJcbiAgICAgICAgW3NweEZ1bGxIZWlnaHRdPVwidHJ1ZVwiXG4gICAgICAgIFtzcHhEaXNhYmxlZF09XCJ0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgICAgW3NweFNpemVdPVwiJ3hsJ1wiXG4gICAgICAgIFtzcHhUYWJJbmRleF09XCItMVwiXG4gICAgICAgIFtzcHhUeXBlXT1cIididXR0b24nXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhUXVlc3Rpb25cIiBjbGFzcz1cImJsb2NrIHRleHQteGxcIj48L2ZhLWljb24+XG4gICAgICA8L3NweC1idXR0b24+XG4gICAgICA8c3B4LWJ1dHRvblxuICAgICAgICAqbmdJZj1cInRoaXMuc3B4U2hvd1NlYXJjaFwiXG4gICAgICAgIChzcHhDbGljayk9XCJvblNlYXJjaCgpXCJcbiAgICAgICAgW3NweEZ1bGxIZWlnaHRdPVwidHJ1ZVwiXG4gICAgICAgIFtzcHhEaXNhYmxlZF09XCJ0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgICAgW3NweFNpemVdPVwiJ3hsJ1wiXG4gICAgICAgIFtzcHhUYWJJbmRleF09XCItMVwiXG4gICAgICAgIFtzcHhUeXBlXT1cIididXR0b24nXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhU2VhcmNoXCIgY2xhc3M9XCJibG9jayB0ZXh0LXhsXCI+PC9mYS1pY29uPlxuICAgICAgPC9zcHgtYnV0dG9uPlxuICAgICAgPHNweC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJ0aGlzLnNweFNob3dDbGVhclwiXG4gICAgICAgIChzcHhDbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICBbc3B4RGlzYWJsZWRdPVwidGhpcy5zcHhSZWFkb25seSB8fCAhdGhpcy5zcHhWYWx1ZT8udmFsdWVcIlxuICAgICAgICBbc3B4RnVsbEhlaWdodF09XCJ0cnVlXCJcbiAgICAgICAgW3NweFNpemVdPVwiJ3hsJ1wiXG4gICAgICAgIFtzcHhUYWJJbmRleF09XCItMVwiXG4gICAgICAgIFtzcHhUeXBlXT1cIididXR0b24nXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhVGltZXNcIiBjbGFzcz1cImJsb2NrIHRleHQteGxcIj48L2ZhLWljb24+XG4gICAgICA8L3NweC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidGhpcy5zcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzXCIgY2xhc3M9XCJiZy1yZWQtNjAwIHJvdW5kZWQtYiB0ZXh0LXdoaXRlIHAtM1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt2YWxpZGF0aW9uLW1lc3NhZ2VzXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgU3B4SW5wdXRCb3hDb21wb25lbnQge1xuICBmYUVkaXQgPSBmYUVkaXQ7XG4gIGZhU2VhcmNoID0gZmFTZWFyY2g7XG4gIGZhUXVlc3Rpb24gPSBmYVF1ZXN0aW9uO1xuICBmYVRpbWVzID0gZmFUaW1lcztcbiAgQElucHV0KCkgc3B4Q29tcGFjdD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNweEZvY3VzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc3B4TGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNweFJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNweFJlcXVpcmVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgc3B4U2hvd0NsZWFyID0gdHJ1ZTtcbiAgQElucHV0KCkgc3B4U2hvd0VkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBzcHhTaG93SGVscD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNweFNob3dMYWJlbCA9IHRydWU7XG4gIEBJbnB1dCgpIHNweFNob3dTZWFyY2g/OiBib29sZWFuO1xuICBASW5wdXQoKSBzcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNweFZhbHVlPzogU3B4VmFsdWVQYWlyPGFueT47XG4gIEBPdXRwdXQoKSBzcHhDbGVhcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc3B4U2VhcmNoOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzcHhGb2N1czogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc3B4Rm9jdXNPdXQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNweEVkaXQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNweEhlbHA6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicsIFtcIiRldmVudFwiXSkgaGFuZGxlRm9jdXNJbihldjogRXZlbnQpIHtcbiAgICB0aGlzLmVtaXRGb2N1c0luKCk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnLCBbXCIkZXZlbnRcIl0pIGhhbmRsZUZvY3VzT3V0KGV2OiBGb2N1c0V2ZW50KSB7XG4gICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJlbGF0ZWRFbGVtZW50ID0gZXYucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIXJlbGF0ZWRFbGVtZW50IHx8ICF0aGlzRWwuY29udGFpbnMocmVsYXRlZEVsZW1lbnQpKSB7XG4gICAgICB0aGlzLmVtaXRGb2N1c091dCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFtcIiRldmVudFwiXSkgaGFuZGxlV2luZG93Q2xpY2soZXY6IEV2ZW50KSB7XG4gICAgaWYgKGV2LmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgIHRoaXMuZW1pdEZvY3VzSW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0Rm9jdXNPdXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkNsZWFyKCkge1xuICAgIHRoaXMuc3B4Q2xlYXIuZW1pdCgpO1xuICB9XG5cbiAgb25TZWFyY2goKSB7XG4gICAgdGhpcy5zcHhTZWFyY2guZW1pdCgpO1xuICB9XG5cbiAgb25FZGl0KCkge1xuICAgIHRoaXMuc3B4RWRpdC5lbWl0KCk7XG4gIH1cblxuICBvbkhlbHAoKSB7XG4gICAgdGhpcy5zcHhIZWxwLmVtaXQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZvY3VzSW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNweEZvY3VzZWQpIHtcbiAgICAgIHRoaXMuc3B4Rm9jdXMuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZvY3VzT3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNweEZvY3VzZWQpIHtcbiAgICAgIHRoaXMuc3B4Rm9jdXNPdXQuZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuIl19
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWlucHV0LWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zb2Z0cGFrL2NvbXBvbmVudHMvc3B4LWlucHV0cy9zcHgtaW5wdXQtYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQXFGMUYsTUFBTSxPQUFPLG9CQUFvQjtJQXVCTSxhQUFhLENBQUMsRUFBUztRQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNxQyxjQUFjLENBQUMsRUFBYztRQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQTRCLENBQUM7UUFDdkQsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQTRCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDMkMsaUJBQWlCLENBQUMsRUFBUztRQUNyRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixD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aEIsTUFBTTtnQkFDOEIsYUFBYTtzQkFBakQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBR0csY0FBYztzQkFBbkQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT1EsaUJBQWlCO3NCQUE1RCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcHhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAc29mdHBhay9jb21wb25lbnRzL3NweC1idXR0b24nO1xuaW1wb3J0IHsgU3B4VmFsdWVQYWlyIH0gZnJvbSAnLi9zcHgtdmFsdWUtaW50ZXJmYWNlJztcbmltcG9ydCB7IEZvbnRBd2Vzb21lTW9kdWxlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFFZGl0LCBmYVF1ZXN0aW9uLCBmYVNlYXJjaCwgZmFUaW1lcyB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NweC1pbnB1dC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgU3B4QnV0dG9uQ29tcG9uZW50LFxuICAgIEZvbnRBd2Vzb21lTW9kdWxlXG5dLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJmbGV4IHJvdW5kZWQgdy1mdWxsIGdhcC0zXCJcbiAgICAgIFtjbGFzcy5yb3VuZGVkLW5vbmVdPVwidGhpcy5zcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzXCJcbiAgICAgIFtjbGFzcy5yb3VuZGVkLXRdPVwidGhpcy5zcHhTaG93VmFsaWRhdGlvbk1lc3NhZ2VzXCJcbiAgICAgIFtjbGFzcy5vdXRsaW5lLW5vbmVdPVwidGhpcy5zcHhGb2N1c2VkICYmICF0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgIFtjbGFzcy5yaW5nLTJdPVwidGhpcy5zcHhGb2N1c2VkICYmICF0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgIFtjbGFzcy5yaW5nLW9mZnNldC0yXT1cInRoaXMuc3B4Rm9jdXNlZCAmJiAhdGhpcy5zcHhSZWFkb25seVwiXG4gICAgICBbY2xhc3MucmluZy1ibHVlLTUwMF09XCJ0aGlzLnNweEZvY3VzZWQgJiYgIXRoaXMuc3B4UmVhZG9ubHlcIlxuICAgICAgW2NsYXNzLmJnLXdoaXRlXT1cIiF0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgIFtjbGFzcy5iZy1ncmF5LTMwMF09XCJ0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgIFtjbGFzcy5jdXJzb3Itbm90LWFsbG93ZWRdPVwidGhpcy5zcHhSZWFkb25seVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtYXV0byBwLTNcIlxuICAgICAgICBbY2xhc3MucC0wXT1cInRoaXMuc3B4Q29tcGFjdFwiXG4gICAgICAgIFtjbGFzcy5mbGV4XT1cInRoaXMuc3B4Q29tcGFjdFwiXG4gICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwidGhpcy5zcHhDb21wYWN0XCI+XG4gICAgICAgIEBpZiAodGhpcy5zcHhTaG93TGFiZWwpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gbWItMSB0ZXh0LWdyYXktODAwXCJcbiAgICAgICAgICAgIFtjbGFzcy5tYi0wXT1cInRoaXMuc3B4Q29tcGFjdFwiXG4gICAgICAgICAgICBbY2xhc3MucHgtM109XCJ0aGlzLnNweENvbXBhY3RcIj5cbiAgICAgICAgICAgIHt7dGhpcy5zcHhMYWJlbH19IEBpZiAoc3B4UmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtODAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NvbnRyb2xzXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW5vbmUgZ2FwLTEgcC0xXCI+XG4gICAgICBAaWYgKHRoaXMuc3B4U2hvd0VkaXQpIHtcbiAgICAgICAgPHNweC1idXR0b25cbiAgICAgICAgICAoc3B4Q2xpY2spPVwib25FZGl0KClcIlxuICAgICAgICAgIFtzcHhGdWxsSGVpZ2h0XT1cInRydWVcIlxuICAgICAgICAgIFtzcHhTaXplXT1cIid4bCdcIlxuICAgICAgICAgIFtzcHhUeXBlXT1cIididXR0b24nXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFFZGl0XCIgY2xhc3M9XCJibG9jayB0ZXh0LXhsXCI+PC9mYS1pY29uPlxuICAgICAgICA8L3NweC1idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKHRoaXMuc3B4U2hvd0hlbHApIHtcbiAgICAgICAgPHNweC1idXR0b25cbiAgICAgICAgICAoc3B4Q2xpY2spPVwib25IZWxwKClcIlxuICAgICAgICAgIFtzcHhGdWxsSGVpZ2h0XT1cInRydWVcIlxuICAgICAgICAgIFtzcHhEaXNhYmxlZF09XCJ0aGlzLnNweFJlYWRvbmx5XCJcbiAgICAgICAgICBbc3B4U2l6ZV09XCIneGwnXCJcbiAgICAgICAgICBbc3B4VGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgIFtzcHhUeXBlXT1cIididXR0b24nXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFRdWVzdGlvblwiIGNsYXNzPVwiYmxvY2sgdGV4dC14bFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPC9zcHgtYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmICh0aGlzLnNweFNob3dTZWFyY2gpIHtcbiAgICAgICAgPHNweC1idXR0b25cbiAgICAgICAgICAoc3B4Q2xpY2spPVwib25TZWFyY2goKVwiXG4gICAgICAgICAgW3NweEZ1bGxIZWlnaHRdPVwidHJ1ZVwiXG4gICAgICAgICAgW3NweERpc2FibGVkXT1cInRoaXMuc3B4UmVhZG9ubHlcIlxuICAgICAgICAgIFtzcHhTaXplXT1cIid4bCdcIlxuICAgICAgICAgIFtzcHhUYWJJbmRleF09XCItMVwiXG4gICAgICAgICAgW3NweFR5cGVdPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVNlYXJjaFwiIGNsYXNzPVwiYmxvY2sgdGV4dC14bFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPC9zcHgtYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmICh0aGlzLnNweFNob3dDbGVhcikge1xuICAgICAgICA8c3B4LWJ1dHRvblxuICAgICAgICAgIChzcHhDbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICAgIFtzcHhEaXNhYmxlZF09XCJ0aGlzLnNweFJlYWRvbmx5IHx8ICF0aGlzLnNweFZhbHVlPy52YWx1ZVwiXG4gICAgICAgICAgW3NweEZ1bGxIZWlnaHRdPVwidHJ1ZVwiXG4gICAgICAgICAgW3NweFNpemVdPVwiJ3hsJ1wiXG4gICAgICAgICAgW3NweFRhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICBbc3B4VHlwZV09XCInYnV0dG9uJ1wiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhVGltZXNcIiBjbGFzcz1cImJsb2NrIHRleHQteGxcIj48L2ZhLWljb24+XG4gICAgICAgIDwvc3B4LWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKHRoaXMuc3B4U2hvd1ZhbGlkYXRpb25NZXNzYWdlcykge1xuICAgICAgPGRpdiBjbGFzcz1cImJnLXJlZC02MDAgcm91bmRlZC1iIHRleHQtd2hpdGUgcC0zXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt2YWxpZGF0aW9uLW1lc3NhZ2VzXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIH1gLFxufSlcbmV4cG9ydCBjbGFzcyBTcHhJbnB1dEJveENvbXBvbmVudCB7XG4gIGZhRWRpdCA9IGZhRWRpdDtcbiAgZmFTZWFyY2ggPSBmYVNlYXJjaDtcbiAgZmFRdWVzdGlvbiA9IGZhUXVlc3Rpb247XG4gIGZhVGltZXMgPSBmYVRpbWVzO1xuICBASW5wdXQoKSBzcHhDb21wYWN0PzogYm9vbGVhbjtcbiAgQElucHV0KCkgc3B4Rm9jdXNlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzcHhMYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgc3B4UmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc3B4UmVxdWlyZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBzcHhTaG93Q2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBzcHhTaG93RWRpdD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNweFNob3dIZWxwPzogYm9vbGVhbjtcbiAgQElucHV0KCkgc3B4U2hvd0xhYmVsID0gdHJ1ZTtcbiAgQElucHV0KCkgc3B4U2hvd1NlYXJjaD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNweFNob3dWYWxpZGF0aW9uTWVzc2FnZXM/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgc3B4VmFsdWU/OiBTcHhWYWx1ZVBhaXI8YW55PjtcbiAgQE91dHB1dCgpIHNweENsZWFyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzcHhTZWFyY2g6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNweEZvY3VzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzcHhGb2N1c091dDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc3B4RWRpdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc3B4SGVscDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJywgW1wiJGV2ZW50XCJdKSBoYW5kbGVGb2N1c0luKGV2OiBFdmVudCkge1xuICAgIHRoaXMuZW1pdEZvY3VzSW4oKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcsIFtcIiRldmVudFwiXSkgaGFuZGxlRm9jdXNPdXQoZXY6IEZvY3VzRXZlbnQpIHtcbiAgICBjb25zdCB0aGlzRWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnQgPSBldi5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghcmVsYXRlZEVsZW1lbnQgfHwgIXRoaXNFbC5jb250YWlucyhyZWxhdGVkRWxlbWVudCkpIHtcbiAgICAgIHRoaXMuZW1pdEZvY3VzT3V0KCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgW1wiJGV2ZW50XCJdKSBoYW5kbGVXaW5kb3dDbGljayhldjogRXZlbnQpIHtcbiAgICBpZiAoZXYuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgdGhpcy5lbWl0Rm9jdXNJbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXRGb2N1c091dCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xlYXIoKSB7XG4gICAgdGhpcy5zcHhDbGVhci5lbWl0KCk7XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICB0aGlzLnNweFNlYXJjaC5lbWl0KCk7XG4gIH1cblxuICBvbkVkaXQoKSB7XG4gICAgdGhpcy5zcHhFZGl0LmVtaXQoKTtcbiAgfVxuXG4gIG9uSGVscCgpIHtcbiAgICB0aGlzLnNweEhlbHAuZW1pdCgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZikge1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Rm9jdXNJbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3B4Rm9jdXNlZCkge1xuICAgICAgdGhpcy5zcHhGb2N1cy5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Rm9jdXNPdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3B4Rm9jdXNlZCkge1xuICAgICAgdGhpcy5zcHhGb2N1c091dC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=