@tolle_/tolle-ui 18.2.16 → 18.2.19

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.
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, forwardRef, inject, Input, Output, ChangeDetectorRef } from '@angular/core';
1
+ import { Component, EventEmitter, forwardRef, inject, Input, Output, ChangeDetectorRef, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
4
  import { CountrySelectorComponent } from './country-selector.component';
@@ -6,7 +6,8 @@ import { MaskedInputComponent } from './masked-input.component';
6
6
  import parsePhoneNumber from 'libphonenumber-js';
7
7
  import { cn } from './utils/cn';
8
8
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@angular/forms";
10
11
  export class PhoneNumberInputComponent {
11
12
  cdr = inject(ChangeDetectorRef);
12
13
  id = `phone-input-${Math.random().toString(36).substr(2, 9)}`;
@@ -34,6 +35,27 @@ export class PhoneNumberInputComponent {
34
35
  constructor() {
35
36
  this.selectedIso = this.defaultCountryCode;
36
37
  }
38
+ get computedLabelClass() {
39
+ return cn('text-sm font-medium text-foreground leading-none transition-opacity duration-200', this.disabled && 'opacity-50');
40
+ }
41
+ get computedMergedClass() {
42
+ return cn('group relative flex items-center w-full rounded-md border transition-all duration-200', 'bg-background border-input shadow-sm', this.size === 'xs' && 'h-8', this.size === 'sm' && 'h-9', this.size === 'default' && 'h-10', this.size === 'lg' && 'h-11',
43
+ // Focus state
44
+ !this.readonly &&
45
+ !this.disabled && [
46
+ 'focus-within:ring-4',
47
+ 'focus-within:ring-ring/30',
48
+ 'focus-within:ring-offset-0',
49
+ 'focus-within:shadow-none',
50
+ this.error ? 'focus-within:border-destructive/80' : 'focus-within:border-primary/80',
51
+ ],
52
+ // Error state
53
+ this.error && 'border-destructive', this.error && !this.readonly && !this.disabled && 'focus-within:ring-destructive/30',
54
+ // Disabled state
55
+ this.disabled && ['cursor-not-allowed opacity-50', 'border-opacity-50'],
56
+ // Readonly state
57
+ this.readonly && 'cursor-default border-dashed', this.class);
58
+ }
37
59
  writeValue(value) {
38
60
  if (value) {
39
61
  if (typeof value === 'object' && value.number) {
@@ -107,75 +129,99 @@ export class PhoneNumberInputComponent {
107
129
  {
108
130
  provide: NG_VALUE_ACCESSOR,
109
131
  useExisting: forwardRef(() => PhoneNumberInputComponent),
110
- multi: true
111
- }
132
+ multi: true,
133
+ },
112
134
  ], ngImport: i0, template: `
113
- <tolle-masked-input
114
- [id]="id"
115
- [label]="label"
116
- [hint]="hint"
117
- [error]="error"
118
- [errorMessage]="errorMessage"
119
- [hideHintOnFocus]="hideHintOnFocus"
120
- [mask]="mask"
121
- [size]="size"
122
- [disabled]="disabled"
123
- [readonly]="readonly"
124
- [placeholder]="placeholder"
125
- [(ngModel)]="displayValue"
126
- (ngModelChange)="onMaskInputChange($event)"
127
- [containerClass]="cn('pl-0', class)"
128
- >
129
- <tolle-country-selector
130
- prefix
131
- class="country-selector-override"
132
- [showName]="false"
133
- [size]="size"
134
- [disabled]="disabled || !enableCountrySelector"
135
- [readonly]="readonly"
136
- [(ngModel)]="selectedIso"
137
- (ngModelChange)="onCountryChange($event)"
138
- ></tolle-country-selector>
139
- </tolle-masked-input>
140
- `, isInline: true, styles: [":host{display:block;width:100%}::ng-deep .country-selector-override{display:flex;align-items:center;border-right:1px solid var(--border, #e5e7eb)}::ng-deep .country-selector-override button{border:none!important;border-radius:0!important;border-top-left-radius:calc(var(--radius, .5rem) - 1px)!important;border-bottom-left-radius:calc(var(--radius, .5rem) - 1px)!important;background:transparent!important;box-shadow:none!important;padding-left:.75rem!important;padding-right:.5rem!important;display:flex!important;align-items:center!important;justify-content:center!important;gap:.25rem!important}::ng-deep .country-selector-override button .flex{gap:.25rem!important}::ng-deep .country-selector-override button i{margin-left:0!important;line-height:1!important;display:flex!important;align-items:center!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CountrySelectorComponent, selector: "tolle-country-selector", inputs: ["id", "label", "hint", "errorMessage", "error", "hideHintOnFocus", "placeholder", "class", "disabled", "readonly", "size", "defaultCountryCode", "returnValue", "showName"], outputs: ["onSelect"] }, { kind: "component", type: MaskedInputComponent, selector: "tolle-masked-input", inputs: ["id", "label", "hint", "errorMessage", "mask", "placeholder", "type", "disabled", "readonly", "class", "containerClass", "error", "size", "returnRaw", "hideHintOnFocus"] }] });
135
+ <div class="flex w-full flex-col gap-1.5">
136
+ <label *ngIf="label" [for]="id" [class]="computedLabelClass">
137
+ {{ label }}
138
+ </label>
139
+
140
+ <div [class]="computedMergedClass">
141
+ <tolle-country-selector
142
+ [showName]="false"
143
+ [size]="size"
144
+ [disabled]="disabled || !enableCountrySelector"
145
+ [readonly]="readonly"
146
+ [mergedPosition]="'left'"
147
+ [(ngModel)]="selectedIso"
148
+ (ngModelChange)="onCountryChange($event)"></tolle-country-selector>
149
+
150
+ <tolle-masked-input
151
+ [id]="id"
152
+ [mask]="mask"
153
+ [size]="size"
154
+ [disabled]="disabled"
155
+ [readonly]="readonly"
156
+ [placeholder]="placeholder"
157
+ [error]="error"
158
+ [mergedPosition]="'right'"
159
+ [(ngModel)]="displayValue"
160
+ (ngModelChange)="onMaskInputChange($event)"></tolle-masked-input>
161
+ </div>
162
+
163
+ <ng-container *ngIf="!disabled">
164
+ <p
165
+ *ngIf="hint && !error"
166
+ class="px-1 text-xs text-muted-foreground transition-opacity duration-200">
167
+ {{ hint }}
168
+ </p>
169
+ <p *ngIf="error && errorMessage" [id]="id + '-error'" class="px-1 text-xs text-destructive">
170
+ {{ errorMessage }}
171
+ </p>
172
+ </ng-container>
173
+ </div>
174
+ `, isInline: true, styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CountrySelectorComponent, selector: "tolle-country-selector", inputs: ["id", "label", "hint", "errorMessage", "error", "hideHintOnFocus", "placeholder", "class", "disabled", "readonly", "size", "defaultCountryCode", "returnValue", "showName", "mergedPosition"], outputs: ["onSelect", "onFocusChange", "onBlurChange"] }, { kind: "component", type: MaskedInputComponent, selector: "tolle-masked-input", inputs: ["id", "label", "hint", "errorMessage", "mask", "placeholder", "type", "disabled", "readonly", "class", "containerClass", "error", "size", "returnRaw", "hideHintOnFocus", "mergedPosition"] }] });
141
175
  }
142
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhoneNumberInputComponent, decorators: [{
143
177
  type: Component,
144
178
  args: [{ selector: 'tolle-phone-number-input', standalone: true, imports: [CommonModule, FormsModule, CountrySelectorComponent, MaskedInputComponent], template: `
145
- <tolle-masked-input
146
- [id]="id"
147
- [label]="label"
148
- [hint]="hint"
149
- [error]="error"
150
- [errorMessage]="errorMessage"
151
- [hideHintOnFocus]="hideHintOnFocus"
152
- [mask]="mask"
153
- [size]="size"
154
- [disabled]="disabled"
155
- [readonly]="readonly"
156
- [placeholder]="placeholder"
157
- [(ngModel)]="displayValue"
158
- (ngModelChange)="onMaskInputChange($event)"
159
- [containerClass]="cn('pl-0', class)"
160
- >
161
- <tolle-country-selector
162
- prefix
163
- class="country-selector-override"
164
- [showName]="false"
165
- [size]="size"
166
- [disabled]="disabled || !enableCountrySelector"
167
- [readonly]="readonly"
168
- [(ngModel)]="selectedIso"
169
- (ngModelChange)="onCountryChange($event)"
170
- ></tolle-country-selector>
171
- </tolle-masked-input>
179
+ <div class="flex w-full flex-col gap-1.5">
180
+ <label *ngIf="label" [for]="id" [class]="computedLabelClass">
181
+ {{ label }}
182
+ </label>
183
+
184
+ <div [class]="computedMergedClass">
185
+ <tolle-country-selector
186
+ [showName]="false"
187
+ [size]="size"
188
+ [disabled]="disabled || !enableCountrySelector"
189
+ [readonly]="readonly"
190
+ [mergedPosition]="'left'"
191
+ [(ngModel)]="selectedIso"
192
+ (ngModelChange)="onCountryChange($event)"></tolle-country-selector>
193
+
194
+ <tolle-masked-input
195
+ [id]="id"
196
+ [mask]="mask"
197
+ [size]="size"
198
+ [disabled]="disabled"
199
+ [readonly]="readonly"
200
+ [placeholder]="placeholder"
201
+ [error]="error"
202
+ [mergedPosition]="'right'"
203
+ [(ngModel)]="displayValue"
204
+ (ngModelChange)="onMaskInputChange($event)"></tolle-masked-input>
205
+ </div>
206
+
207
+ <ng-container *ngIf="!disabled">
208
+ <p
209
+ *ngIf="hint && !error"
210
+ class="px-1 text-xs text-muted-foreground transition-opacity duration-200">
211
+ {{ hint }}
212
+ </p>
213
+ <p *ngIf="error && errorMessage" [id]="id + '-error'" class="px-1 text-xs text-destructive">
214
+ {{ errorMessage }}
215
+ </p>
216
+ </ng-container>
217
+ </div>
172
218
  `, providers: [
173
219
  {
174
220
  provide: NG_VALUE_ACCESSOR,
175
221
  useExisting: forwardRef(() => PhoneNumberInputComponent),
176
- multi: true
177
- }
178
- ], styles: [":host{display:block;width:100%}::ng-deep .country-selector-override{display:flex;align-items:center;border-right:1px solid var(--border, #e5e7eb)}::ng-deep .country-selector-override button{border:none!important;border-radius:0!important;border-top-left-radius:calc(var(--radius, .5rem) - 1px)!important;border-bottom-left-radius:calc(var(--radius, .5rem) - 1px)!important;background:transparent!important;box-shadow:none!important;padding-left:.75rem!important;padding-right:.5rem!important;display:flex!important;align-items:center!important;justify-content:center!important;gap:.25rem!important}::ng-deep .country-selector-override button .flex{gap:.25rem!important}::ng-deep .country-selector-override button i{margin-left:0!important;line-height:1!important;display:flex!important;align-items:center!important}\n"] }]
222
+ multi: true,
223
+ },
224
+ ], styles: [":host{display:block;width:100%}\n"] }]
179
225
  }], ctorParameters: () => [], propDecorators: { id: [{
180
226
  type: Input
181
227
  }], label: [{
@@ -209,4 +255,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
209
255
  }], onSelect: [{
210
256
  type: Output
211
257
  }] } });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcGhvbmUtbnVtYmVyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBRU4saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sZ0JBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBNkVoQyxNQUFNLE9BQU8seUJBQXlCO0lBQzFCLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUvQixFQUFFLEdBQUcsZUFBZSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUM3QixJQUFJLEdBQW1DLFNBQVMsQ0FB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RSxvQkFBb0I7OzRGQXdFMUUseUJBQXlCO2tCQTNFckMsU0FBUzsrQkFDSSwwQkFBMEIsY0FDeEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0IsQ0FBQyxZQUMxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCWCxhQW1DWTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzs0QkFDeEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7d0RBS1EsRUFBRTtzQkFBVixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvdW50cnlTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWFza2VkSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL21hc2tlZC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHBhcnNlUGhvbmVOdW1iZXIgZnJvbSAnbGlicGhvbmVudW1iZXItanMnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1waG9uZS1udW1iZXItaW5wdXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIENvdW50cnlTZWxlY3RvckNvbXBvbmVudCwgTWFza2VkSW5wdXRDb21wb25lbnRdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPHRvbGxlLW1hc2tlZC1pbnB1dFxuICAgICAgW2lkXT1cImlkXCJcbiAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICBbaGludF09XCJoaW50XCJcbiAgICAgIFtlcnJvcl09XCJlcnJvclwiXG4gICAgICBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiXG4gICAgICBbaGlkZUhpbnRPbkZvY3VzXT1cImhpZGVIaW50T25Gb2N1c1wiXG4gICAgICBbbWFza109XCJtYXNrXCJcbiAgICAgIFtzaXplXT1cInNpemVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgWyhuZ01vZGVsKV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NYXNrSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbY29udGFpbmVyQ2xhc3NdPVwiY24oJ3BsLTAnLCBjbGFzcylcIlxuICAgID5cbiAgICAgIDx0b2xsZS1jb3VudHJ5LXNlbGVjdG9yXG4gICAgICAgIHByZWZpeFxuICAgICAgICBjbGFzcz1cImNvdW50cnktc2VsZWN0b3Itb3ZlcnJpZGVcIlxuICAgICAgICBbc2hvd05hbWVdPVwiZmFsc2VcIlxuICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFlbmFibGVDb3VudHJ5U2VsZWN0b3JcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSXNvXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db3VudHJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvdG9sbGUtY291bnRyeS1zZWxlY3Rvcj5cbiAgICA8L3RvbGxlLW1hc2tlZC1pbnB1dD5cbiAgYCxcbiAgICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgOjpuZy1kZWVwIC5jb3VudHJ5LXNlbGVjdG9yLW92ZXJyaWRlIHtcbiAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLCAjZTVlN2ViKTtcbiAgICB9XG4gICAgOjpuZy1kZWVwIC5jb3VudHJ5LXNlbGVjdG9yLW92ZXJyaWRlIGJ1dHRvbiB7XG4gICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGModmFyKC0tcmFkaXVzLCAwLjVyZW0pIC0gMXB4KSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogY2FsYyh2YXIoLS1yYWRpdXMsIDAuNXJlbSkgLSAxcHgpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcbiAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICBnYXA6IDAuMjVyZW0gIWltcG9ydGFudDtcbiAgICB9XG4gICAgOjpuZy1kZWVwIC5jb3VudHJ5LXNlbGVjdG9yLW92ZXJyaWRlIGJ1dHRvbiAuZmxleCB7XG4gICAgICBnYXA6IDAuMjVyZW0gIWltcG9ydGFudDtcbiAgICB9XG4gICAgOjpuZy1kZWVwIC5jb3VudHJ5LXNlbGVjdG9yLW92ZXJyaWRlIGJ1dHRvbiBpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgICBsaW5lLWhlaWdodDogMSAhaW1wb3J0YW50O1xuICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgIH1cbiAgYF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGhvbmVOdW1iZXJJbnB1dENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQaG9uZU51bWJlcklucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIEBJbnB1dCgpIGlkID0gYHBob25lLWlucHV0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBoaW50ID0gJyc7XG4gICAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRlSGludE9uRm9jdXMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1Bob25lIG51bWJlcic7XG4gICAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICAgIEBJbnB1dCgpIGRhdGFUeXBlOiAnTnVtYmVyT25seScgfCAnRnVsbE9iamVjdCcgPSAnRnVsbE9iamVjdCc7XG4gICAgQElucHV0KCkgbWFzayA9ICcoMDAwKSAwMDAtMDAwMCc7XG4gICAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgICBASW5wdXQoKSBlbmFibGVDb3VudHJ5U2VsZWN0b3IgPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBkaXNwbGF5VmFsdWUgPSAnJztcbiAgICBzZWxlY3RlZElzbyA9ICcnO1xuICAgIHByaXZhdGUgcmF3VmFsdWUgPSAnJztcblxuICAgIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gICAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcbiAgICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXNvID0gdGhpcy5kZWZhdWx0Q291bnRyeUNvZGU7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUubnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElzbyA9IHZhbHVlLmNvdW50cnkgfHwgdGhpcy5kZWZhdWx0Q291bnRyeUNvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB2YWx1ZS5udW1iZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZSA9IHZhbHVlLm51bWJlci5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmF3VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VQaG9uZU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJc28gPSBwYXJzZWQuY291bnRyeSB8fCB0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uQ291bnRyeUNoYW5nZShpc286IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXNvID0gaXNvO1xuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XG4gICAgfVxuXG4gICAgb25NYXNrSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJhd1ZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTW9kZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5yYXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVBob25lTnVtYmVyKHRoaXMucmF3VmFsdWUsIHRoaXMuc2VsZWN0ZWRJc28gYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gJ0Z1bGxPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UocGFyc2VkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHBhcnNlZC5udW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQocGFyc2VkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJhd1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcGhvbmUtbnVtYmVyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sZ0JBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7OztBQStEaEMsTUFBTSxPQUFPLHlCQUF5QjtJQUM1QixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFL0IsRUFBRSxHQUFHLGVBQWUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDN0IsSUFBSSxHQUFtQyxTQUFTLENB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RUFBRSxvQkFBb0IsQ0FBQyxZQUMxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDVCxhQVNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3REFLUSxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb3VudHJ5U2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1hc2tlZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9tYXNrZWQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCBwYXJzZVBob25lTnVtYmVyIGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLXBob25lLW51bWJlci1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBDb3VudHJ5U2VsZWN0b3JDb21wb25lbnQsIE1hc2tlZElucHV0Q29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTEuNVwiPlxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCIgW2NsYXNzXT1cImNvbXB1dGVkTGFiZWxDbGFzc1wiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRNZXJnZWRDbGFzc1wiPlxuICAgICAgICA8dG9sbGUtY291bnRyeS1zZWxlY3RvclxuICAgICAgICAgIFtzaG93TmFtZV09XCJmYWxzZVwiXG4gICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFlbmFibGVDb3VudHJ5U2VsZWN0b3JcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgW21lcmdlZFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZElzb1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db3VudHJ5Q2hhbmdlKCRldmVudClcIj48L3RvbGxlLWNvdW50cnktc2VsZWN0b3I+XG5cbiAgICAgICAgPHRvbGxlLW1hc2tlZC1pbnB1dFxuICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgW21hc2tdPVwibWFza1wiXG4gICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2Vycm9yXT1cImVycm9yXCJcbiAgICAgICAgICBbbWVyZ2VkUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWFza0lucHV0Q2hhbmdlKCRldmVudClcIj48L3RvbGxlLW1hc2tlZC1pbnB1dD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJoaW50ICYmICFlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJweC0xIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIj5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgKm5nSWY9XCJlcnJvciAmJiBlcnJvck1lc3NhZ2VcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiIGNsYXNzPVwicHgtMSB0ZXh0LXhzIHRleHQtZGVzdHJ1Y3RpdmVcIj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGhvbmVOdW1iZXJJbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQaG9uZU51bWJlcklucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgQElucHV0KCkgaWQgPSBgcGhvbmUtaW5wdXQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUhpbnRPbkZvY3VzID0gdHJ1ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGhvbmUgbnVtYmVyJztcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICBASW5wdXQoKSBkYXRhVHlwZTogJ051bWJlck9ubHknIHwgJ0Z1bGxPYmplY3QnID0gJ0Z1bGxPYmplY3QnO1xuICBASW5wdXQoKSBtYXNrID0gJygwMDApIDAwMC0wMDAwJztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZW5hYmxlQ291bnRyeVNlbGVjdG9yID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBkaXNwbGF5VmFsdWUgPSAnJztcbiAgc2VsZWN0ZWRJc28gPSAnJztcbiAgcHJpdmF0ZSByYXdWYWx1ZSA9ICcnO1xuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXNvID0gdGhpcy5kZWZhdWx0Q291bnRyeUNvZGU7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRMYWJlbENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICd0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBsZWFkaW5nLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLmRpc2FibGVkICYmICdvcGFjaXR5LTUwJ1xuICAgICk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRNZXJnZWRDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAnZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCcsXG4gICAgICAnYmctYmFja2dyb3VuZCBib3JkZXItaW5wdXQgc2hhZG93LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAnaC04JyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiAnaC05JyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdoLTEwJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAnaC0xMScsXG4gICAgICAvLyBGb2N1cyBzdGF0ZVxuICAgICAgIXRoaXMucmVhZG9ubHkgJiZcbiAgICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgW1xuICAgICAgICAgICdmb2N1cy13aXRoaW46cmluZy00JyxcbiAgICAgICAgICAnZm9jdXMtd2l0aGluOnJpbmctcmluZy8zMCcsXG4gICAgICAgICAgJ2ZvY3VzLXdpdGhpbjpyaW5nLW9mZnNldC0wJyxcbiAgICAgICAgICAnZm9jdXMtd2l0aGluOnNoYWRvdy1ub25lJyxcbiAgICAgICAgICB0aGlzLmVycm9yID8gJ2ZvY3VzLXdpdGhpbjpib3JkZXItZGVzdHJ1Y3RpdmUvODAnIDogJ2ZvY3VzLXdpdGhpbjpib3JkZXItcHJpbWFyeS84MCcsXG4gICAgICAgIF0sXG4gICAgICAvLyBFcnJvciBzdGF0ZVxuICAgICAgdGhpcy5lcnJvciAmJiAnYm9yZGVyLWRlc3RydWN0aXZlJyxcbiAgICAgIHRoaXMuZXJyb3IgJiYgIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgJ2ZvY3VzLXdpdGhpbjpyaW5nLWRlc3RydWN0aXZlLzMwJyxcbiAgICAgIC8vIERpc2FibGVkIHN0YXRlXG4gICAgICB0aGlzLmRpc2FibGVkICYmIFsnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnLCAnYm9yZGVyLW9wYWNpdHktNTAnXSxcbiAgICAgIC8vIFJlYWRvbmx5IHN0YXRlXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmICdjdXJzb3ItZGVmYXVsdCBib3JkZXItZGFzaGVkJyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5udW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElzbyA9IHZhbHVlLmNvdW50cnkgfHwgdGhpcy5kZWZhdWx0Q291bnRyeUNvZGU7XG4gICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUubnVtYmVyO1xuICAgICAgICB0aGlzLnJhd1ZhbHVlID0gdmFsdWUubnVtYmVyLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJhd1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGhvbmVOdW1iZXIodmFsdWUpO1xuICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJc28gPSBwYXJzZWQuY291bnRyeSB8fCB0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICB0aGlzLnJhd1ZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ291bnRyeUNoYW5nZShpc286IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRJc28gPSBpc287XG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xuICB9XG5cbiAgb25NYXNrSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbCgpIHtcbiAgICBpZiAoIXRoaXMucmF3VmFsdWUpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGhvbmVOdW1iZXIodGhpcy5yYXdWYWx1ZSwgdGhpcy5zZWxlY3RlZElzbyBhcyBhbnkpO1xuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gJ0Z1bGxPYmplY3QnKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShwYXJzZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UocGFyc2VkLm51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KHBhcnNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucmF3VmFsdWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5yYXdWYWx1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=