valtech-components 4.0.76 → 4.0.80

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.
@@ -81,8 +81,8 @@ export class FeedbackFormComponent {
81
81
  placeholder: this.props.descriptionPlaceholder ?? this.i18n.t('descriptionPlaceholder'),
82
82
  type: InputType.TEXTAREA,
83
83
  order: 3,
84
- range: { min: 10, max: 5000 },
85
- validators: [Validators.required, Validators.minLength(10), Validators.maxLength(5000)],
84
+ range: { min: 10, max: 2000 },
85
+ validators: [Validators.required, Validators.minLength(10), Validators.maxLength(2000)],
86
86
  errors: {
87
87
  required: this.i18n.t('descriptionValidation'),
88
88
  minlength: this.i18n.t('descriptionValidation'),
@@ -95,7 +95,8 @@ export class FeedbackFormComponent {
95
95
  sections: [{ name: '', order: 0, fields }],
96
96
  actions: {
97
97
  type: 'submit',
98
- color: 'primary',
98
+ color: 'dark',
99
+ shape: 'round',
99
100
  text: this.props.submitButtonText ?? this.i18n.t('submit'),
100
101
  state: ComponentStates.ENABLED,
101
102
  expand: 'block',
@@ -140,6 +141,12 @@ export class FeedbackFormComponent {
140
141
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
141
142
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FeedbackFormComponent, isStandalone: true, selector: "val-feedback-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
142
143
  <div class="feedback-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
144
+ @if (props.showTitle) {
145
+ <div class="form-header">
146
+ <h2 class="form-title">{{ props.pageTitle || i18n.t('formTitle') }}</h2>
147
+ <p class="form-subtitle">{{ props.pageSubtitle || i18n.t('formSubtitle') }}</p>
148
+ </div>
149
+ }
143
150
  <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
144
151
  @if (props.showAttachments !== false) {
145
152
  <val-attachment-uploader
@@ -169,12 +176,18 @@ export class FeedbackFormComponent {
169
176
  </ion-button>
170
177
  }
171
178
  </div>
172
- `, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.feedback-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:20px}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
179
+ `, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}.form-title{font-size:1.5rem;font-weight:700;margin:0 0 4px;color:var(--ion-text-color)}.form-subtitle{font-size:1rem;font-weight:700;margin:0;color:var(--ion-text-color)}.feedback-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:20px}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
173
180
  }
174
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, decorators: [{
175
182
  type: Component,
176
183
  args: [{ selector: 'val-feedback-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, IonButton, IonIcon], template: `
177
184
  <div class="feedback-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
185
+ @if (props.showTitle) {
186
+ <div class="form-header">
187
+ <h2 class="form-title">{{ props.pageTitle || i18n.t('formTitle') }}</h2>
188
+ <p class="form-subtitle">{{ props.pageSubtitle || i18n.t('formSubtitle') }}</p>
189
+ </div>
190
+ }
178
191
  <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
179
192
  @if (props.showAttachments !== false) {
180
193
  <val-attachment-uploader
@@ -204,7 +217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
204
217
  </ion-button>
205
218
  }
206
219
  </div>
207
- `, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.feedback-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:20px}}.cancel-button{margin-top:8px}\n"] }]
220
+ `, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}.form-title{font-size:1.5rem;font-weight:700;margin:0 0 4px;color:var(--ion-text-color)}.form-subtitle{font-size:1rem;font-weight:700;margin:0;color:var(--ion-text-color)}.feedback-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:20px}}.cancel-button{margin-top:8px}\n"] }]
208
221
  }], ctorParameters: () => [], propDecorators: { props: [{
209
222
  type: Input
210
223
  }], onSubmit: [{
@@ -212,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
212
225
  }], onCancel: [{
213
226
  type: Output
214
227
  }] } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLDZCQUE2QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQXdELFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7OztBQWlGaEgsTUFBTSxPQUFPLHFCQUFxQjtJQWtCaEM7UUFqQlMsVUFBSyxHQUF5QixFQUFFLENBQUM7UUFFaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ25ELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBDLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0Isb0JBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFHbEQsZ0JBQVcsR0FBRyw2QkFBNkIsQ0FBQztRQUU1QyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLFVBQUssR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBRTVCLHVCQUFrQixHQUFxQixFQUFFLENBQUM7UUFHaEQsUUFBUSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sTUFBTSxHQUFvQixFQUFFLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELEVBQUUsRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUM7YUFDL0QsQ0FBQyxDQUFDLENBQUM7WUFDSixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLEtBQUssRUFBRSxlQUFlO2dCQUN0QixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUNsQyxJQUFJLEVBQUUsRUFBRTtnQkFDUixXQUFXLEVBQUUsRUFBRTtnQkFDZixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLE9BQU87Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFVBQVU7Z0JBQzNDLE1BQU0sRUFBRSxFQUFFO2dCQUNWLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTzthQUMvQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FDVDtZQUNFLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3BELElBQUksRUFBRSxFQUFFO1lBQ1IsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDM0UsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLEtBQUssRUFBRSxDQUFDO1lBQ1IsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckYsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO2dCQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7YUFDMUM7WUFDRCxLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU87U0FDL0IsRUFDRDtZQUNFLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsSUFBSSxFQUFFLGFBQWE7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ2hFLElBQUksRUFBRSxFQUFFO1lBQ1IsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUM7WUFDdkYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1lBQ3hCLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO1lBQzdCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZGLE1BQU0sRUFBRTtnQkFDTixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7Z0JBQzlDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDL0MsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hEO1lBQ0QsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPO1NBQy9CLENBQ0YsQ0FBQztRQUVGLE9BQU87WUFDTCxJQUFJLEVBQUUsRUFBRTtZQUNSLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFDLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsU0FBUztnQkFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUMxRCxLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU87Z0JBQzlCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1lBQ0QsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQXFCO1FBQzFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU87UUFDaEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUM7WUFBRSxPQUFPO1FBRXhFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFFdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWtCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDO1lBQ2hHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFXLENBQUM7WUFDbEQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQVcsQ0FBQztZQUM5RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDLENBQUM7WUFFbEcsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FDckQsSUFBSSxFQUNKLEtBQUssRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUN0QixDQUFDO1lBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBdUI7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0F0SlUscUJBQXFCO21HQUFyQixxQkFBcUIsa0tBekV0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCwwZkFoQ1MsWUFBWSw2SEFBRSxhQUFhLDhIQUFFLDJCQUEyQix1SEFBRSxTQUFTLG9QQUFFLE9BQU87OzRGQTBFM0UscUJBQXFCO2tCQTdFakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JUO3dEQTJDUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZWNrbWFya0NpcmNsZU91dGxpbmUsIGNsb3NlQ2lyY2xlT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgRmVlZGJhY2tTZXJ2aWNlLCBGZWVkYmFja1R5cGUsIERFRkFVTFRfRkVFREJBQ0tfVFlQRV9PUFRJT05TIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2snO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dE9wdGlvbiwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9hdHRhY2htZW50LXVwbG9hZGVyL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvdHlwZXMnO1xuaW1wb3J0IHsgRmVlZGJhY2tGb3JtTWV0YWRhdGEsIEZlZWRiYWNrU3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWZlZWRiYWNrLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtQ29tcG9uZW50LCBBdHRhY2htZW50VXBsb2FkZXJDb21wb25lbnQsIElvbkJ1dHRvbiwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWZvcm0td3JhcHBlclwiIFtjbGFzcy5jb21wYWN0XT1cInByb3BzLmNvbXBhY3RcIiBbbmdDbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiPlxuICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJmb3JtUHJvcHNcIiAob25TdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAocHJvcHMuc2hvd0F0dGFjaG1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgICAgIDx2YWwtYXR0YWNobWVudC11cGxvYWRlclxuICAgICAgICAgICAgW3Byb3BzXT1cInsgbWF4RmlsZXM6IDUgfVwiXG4gICAgICAgICAgICAoYXR0YWNobWVudHNDaGFuZ2UpPVwib25BdHRhY2htZW50c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC92YWwtYXR0YWNobWVudC11cGxvYWRlcj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZXJyb3IoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFjay1hbGVydCBlcnJvclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBlcnJvcigpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChpc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFjay1hbGVydCBzdWNjZXNzXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5zdWNjZXNzTWVzc2FnZSB8fCBpMThuLnQoJ2ZlZWRiYWNrU3VjY2VzcycpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L3ZhbC1mb3JtPlxuXG4gICAgICBAaWYgKHByb3BzLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBjb2xvcj1cIm1lZGl1bVwiIGV4cGFuZD1cImJsb2NrXCIgY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHByb3BzLmNhbmNlbEJ1dHRvblRleHQgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZmVlZGJhY2stZm9ybS13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG5cbiAgICAgICAgJi5jb21wYWN0IHtcbiAgICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZmVlZGJhY2stYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcblxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXRpbnQpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VjY2VzcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNhbmNlbC1idXR0b24ge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmVlZGJhY2tGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvcHM6IEZlZWRiYWNrRm9ybU1ldGFkYXRhID0ge307XG5cbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGZWVkYmFja1N1Ym1pdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuXG4gIGZvcm1Qcm9wcyE6IEZvcm1NZXRhZGF0YTtcbiAgdHlwZU9wdGlvbnMgPSBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUztcblxuICBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBpc1N1Y2Nlc3MgPSBzaWduYWwoZmFsc2UpO1xuICBlcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIGN1cnJlbnRBdHRhY2htZW50czogQXR0YWNobWVudEl0ZW1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHsgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSwgY2xvc2VDaXJjbGVPdXRsaW5lIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLnR5cGVPcHRpb25zLmZpbHRlcihvcHQgPT4gdGhpcy5wcm9wcy5lbmFibGVkVHlwZXMhLmluY2x1ZGVzKG9wdC52YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy50eXBlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5wcm9wcy50eXBlT3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgY29uc3QgZmllbGRzOiBJbnB1dE1ldGFkYXRhW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNob3dUeXBlU2VsZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBJbnB1dE9wdGlvbltdID0gdGhpcy50eXBlT3B0aW9ucy5tYXAoKG9wdCwgaSkgPT4gKHtcbiAgICAgICAgaWQ6IG9wdC52YWx1ZSxcbiAgICAgICAgbmFtZTogb3B0LmxhYmVsLFxuICAgICAgICBvcmRlcjogaSxcbiAgICAgICAgc2VsZWN0ZWQ6IG9wdC52YWx1ZSA9PT0gKHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyksXG4gICAgICB9KSk7XG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdHlwZScsXG4gICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgbGFiZWw6IHRoaXMuaTE4bi50KCdmZWVkYmFja1R5cGUnKSxcbiAgICAgICAgaGludDogJycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlNFTEVDVCxcbiAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyxcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmllbGRzLnB1c2goXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdGl0bGUnLFxuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMuaTE4bi50KCd0aXRsZScpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudGl0bGVQbGFjZWhvbGRlciA/PyB0aGlzLmkxOG4udCgndGl0bGVQbGFjZWhvbGRlcicpLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVCxcbiAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKV0sXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIHJlcXVpcmVkOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stZGVzY3JpcHRpb24nLFxuICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5kZXNjcmlwdGlvbkxhYmVsID8/IHRoaXMuaTE4bi50KCdkZXNjcmlwdGlvbicpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciA/PyB0aGlzLmkxOG4udCgnZGVzY3JpcHRpb25QbGFjZWhvbGRlcicpLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVEFSRUEsXG4gICAgICAgIG9yZGVyOiAzLFxuICAgICAgICByYW5nZTogeyBtaW46IDEwLCBtYXg6IDUwMDAgfSxcbiAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwMCldLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1pbmxlbmd0aDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1heGxlbmd0aDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHNlY3Rpb25zOiBbeyBuYW1lOiAnJywgb3JkZXI6IDAsIGZpZWxkcyB9XSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIHRleHQ6IHRoaXMucHJvcHMuc3VibWl0QnV0dG9uVGV4dCA/PyB0aGlzLmkxOG4udCgnc3VibWl0JyksXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgZXhwYW5kOiAnYmxvY2snLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRm9ybVN1Ym1pdChzdWJtaXR0ZWQ6IEZvcm1TdWJtaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmN1cnJlbnRBdHRhY2htZW50cy5zb21lKGEgPT4gYS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuaXNTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcbiAgICB0aGlzLmZvcm1Qcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZSA9IChzdWJtaXR0ZWQuZmllbGRzWyd0eXBlJ10gYXMgRmVlZGJhY2tUeXBlKSA/PyB0aGlzLnByb3BzLmRlZmF1bHRUeXBlID8/ICdmZWVkYmFjayc7XG4gICAgICBjb25zdCB0aXRsZSA9IHN1Ym1pdHRlZC5maWVsZHNbJ3RpdGxlJ10gYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBzdWJtaXR0ZWQuZmllbGRzWydkZXNjcmlwdGlvbiddIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcmxzID0gdGhpcy5jdXJyZW50QXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpLm1hcChhID0+IGEudXJsISk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZWVkYmFja1NlcnZpY2UuY3JlYXRlQXN5bmMoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgYXR0YWNobWVudFVybHMsXG4gICAgICAgIHRoaXMucHJvcHMuY29udGVudFJlZlxuICAgICAgKTtcblxuICAgICAgdGhpcy5pc1N1Y2Nlc3Muc2V0KHRydWUpO1xuXG4gICAgICB0aGlzLm9uU3VibWl0LmVtaXQoeyByZXNwb25zZSwgdHlwZSwgdGl0bGUsIGF0dGFjaG1lbnRVcmxzIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLmVycm9yLnNldChlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyLm1lc3NhZ2UgfHwgdGhpcy5pMThuLnQoJ2ZlZWRiYWNrRXJyb3InKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cbiAgfVxuXG4gIG9uQXR0YWNobWVudHNDaGFuZ2UoaXRlbXM6IEF0dGFjaG1lbnRJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRBdHRhY2htZW50cyA9IGl0ZW1zO1xuICB9XG5cbiAgb25DYW5jZWxDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxufVxuIl19
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLDZCQUE2QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQXdELFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7OztBQXlHaEgsTUFBTSxPQUFPLHFCQUFxQjtJQWtCaEM7UUFqQlMsVUFBSyxHQUF5QixFQUFFLENBQUM7UUFFaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ25ELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBDLFNB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SUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUF1QjtRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDOytHQXZKVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixrS0FqR3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNULG9zQkF0Q1MsWUFBWSw2SEFBRSxhQUFhLDhIQUFFLDJCQUEyQix1SEFBRSxTQUFTLG9QQUFFLE9BQU87OzRGQWtHM0UscUJBQXFCO2tCQXJHakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNUO3dEQTZEUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZWNrbWFya0NpcmNsZU91dGxpbmUsIGNsb3NlQ2lyY2xlT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgRmVlZGJhY2tTZXJ2aWNlLCBGZWVkYmFja1R5cGUsIERFRkFVTFRfRkVFREJBQ0tfVFlQRV9PUFRJT05TIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2snO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dE9wdGlvbiwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9hdHRhY2htZW50LXVwbG9hZGVyL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvdHlwZXMnO1xuaW1wb3J0IHsgRmVlZGJhY2tGb3JtTWV0YWRhdGEsIEZlZWRiYWNrU3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWZlZWRiYWNrLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtQ29tcG9uZW50LCBBdHRhY2htZW50VXBsb2FkZXJDb21wb25lbnQsIElvbkJ1dHRvbiwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWZvcm0td3JhcHBlclwiIFtjbGFzcy5jb21wYWN0XT1cInByb3BzLmNvbXBhY3RcIiBbbmdDbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiPlxuICAgICAgQGlmIChwcm9wcy5zaG93VGl0bGUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiZm9ybS10aXRsZVwiPnt7IHByb3BzLnBhZ2VUaXRsZSB8fCBpMThuLnQoJ2Zvcm1UaXRsZScpIH19PC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvcm0tc3VidGl0bGVcIj57eyBwcm9wcy5wYWdlU3VidGl0bGUgfHwgaTE4bi50KCdmb3JtU3VidGl0bGUnKSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cImZvcm1Qcm9wc1wiIChvblN1Ym1pdCk9XCJoYW5kbGVGb3JtU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgQGlmIChwcm9wcy5zaG93QXR0YWNobWVudHMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgPHZhbC1hdHRhY2htZW50LXVwbG9hZGVyXG4gICAgICAgICAgICBbcHJvcHNdPVwieyBtYXhGaWxlczogNSB9XCJcbiAgICAgICAgICAgIChhdHRhY2htZW50c0NoYW5nZSk9XCJvbkF0dGFjaG1lbnRzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgID48L3ZhbC1hdHRhY2htZW50LXVwbG9hZGVyPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChlcnJvcigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWFsZXJ0IGVycm9yXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLWNpcmNsZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGVycm9yKCkgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWFsZXJ0IHN1Y2Nlc3NcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHByb3BzLnN1Y2Nlc3NNZXNzYWdlIHx8IGkxOG4udCgnZmVlZGJhY2tTdWNjZXNzJykgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvdmFsLWZvcm0+XG5cbiAgICAgIEBpZiAocHJvcHMuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwibWVkaXVtXCIgZXhwYW5kPVwiYmxvY2tcIiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCI+XG4gICAgICAgICAge3sgcHJvcHMuY2FuY2VsQnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5mZWVkYmFjay1mb3JtLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcblxuICAgICAgICAmLmNvbXBhY3Qge1xuICAgICAgICAgIGdhcDogNHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5mb3JtLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cblxuICAgICAgLmZvcm0tdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbWFyZ2luOiAwIDAgNHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAuZm9ybS1zdWJ0aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAuZmVlZGJhY2stYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcblxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXRpbnQpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VjY2VzcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNhbmNlbC1idXR0b24ge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmVlZGJhY2tGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvcHM6IEZlZWRiYWNrRm9ybU1ldGFkYXRhID0ge307XG5cbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGZWVkYmFja1N1Ym1pdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuXG4gIGZvcm1Qcm9wcyE6IEZvcm1NZXRhZGF0YTtcbiAgdHlwZU9wdGlvbnMgPSBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUztcblxuICBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBpc1N1Y2Nlc3MgPSBzaWduYWwoZmFsc2UpO1xuICBlcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIGN1cnJlbnRBdHRhY2htZW50czogQXR0YWNobWVudEl0ZW1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHsgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSwgY2xvc2VDaXJjbGVPdXRsaW5lIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLnR5cGVPcHRpb25zLmZpbHRlcihvcHQgPT4gdGhpcy5wcm9wcy5lbmFibGVkVHlwZXMhLmluY2x1ZGVzKG9wdC52YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy50eXBlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5wcm9wcy50eXBlT3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgY29uc3QgZmllbGRzOiBJbnB1dE1ldGFkYXRhW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNob3dUeXBlU2VsZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBJbnB1dE9wdGlvbltdID0gdGhpcy50eXBlT3B0aW9ucy5tYXAoKG9wdCwgaSkgPT4gKHtcbiAgICAgICAgaWQ6IG9wdC52YWx1ZSxcbiAgICAgICAgbmFtZTogb3B0LmxhYmVsLFxuICAgICAgICBvcmRlcjogaSxcbiAgICAgICAgc2VsZWN0ZWQ6IG9wdC52YWx1ZSA9PT0gKHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyksXG4gICAgICB9KSk7XG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdHlwZScsXG4gICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgbGFiZWw6IHRoaXMuaTE4bi50KCdmZWVkYmFja1R5cGUnKSxcbiAgICAgICAgaGludDogJycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlNFTEVDVCxcbiAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyxcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmllbGRzLnB1c2goXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdGl0bGUnLFxuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMuaTE4bi50KCd0aXRsZScpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudGl0bGVQbGFjZWhvbGRlciA/PyB0aGlzLmkxOG4udCgndGl0bGVQbGFjZWhvbGRlcicpLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVCxcbiAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKV0sXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIHJlcXVpcmVkOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stZGVzY3JpcHRpb24nLFxuICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5kZXNjcmlwdGlvbkxhYmVsID8/IHRoaXMuaTE4bi50KCdkZXNjcmlwdGlvbicpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciA/PyB0aGlzLmkxOG4udCgnZGVzY3JpcHRpb25QbGFjZWhvbGRlcicpLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVEFSRUEsXG4gICAgICAgIG9yZGVyOiAzLFxuICAgICAgICByYW5nZTogeyBtaW46IDEwLCBtYXg6IDIwMDAgfSxcbiAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwMCldLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1pbmxlbmd0aDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1heGxlbmd0aDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHNlY3Rpb25zOiBbeyBuYW1lOiAnJywgb3JkZXI6IDAsIGZpZWxkcyB9XSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb3BzLnN1Ym1pdEJ1dHRvblRleHQgPz8gdGhpcy5pMThuLnQoJ3N1Ym1pdCcpLFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZvcm1TdWJtaXQoc3VibWl0dGVkOiBGb3JtU3VibWl0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jdXJyZW50QXR0YWNobWVudHMuc29tZShhID0+IGEuc3RhdHVzID09PSAndXBsb2FkaW5nJykpIHJldHVybjtcblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmlzU3VjY2Vzcy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgdGhpcy5mb3JtUHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGUgPSAoc3VibWl0dGVkLmZpZWxkc1sndHlwZSddIGFzIEZlZWRiYWNrVHlwZSkgPz8gdGhpcy5wcm9wcy5kZWZhdWx0VHlwZSA/PyAnZmVlZGJhY2snO1xuICAgICAgY29uc3QgdGl0bGUgPSBzdWJtaXR0ZWQuZmllbGRzWyd0aXRsZSddIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc3VibWl0dGVkLmZpZWxkc1snZGVzY3JpcHRpb24nXSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBhdHRhY2htZW50VXJscyA9IHRoaXMuY3VycmVudEF0dGFjaG1lbnRzLmZpbHRlcihhID0+IGEuc3RhdHVzID09PSAncmVhZHknKS5tYXAoYSA9PiBhLnVybCEpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmVlZGJhY2tTZXJ2aWNlLmNyZWF0ZUFzeW5jKFxuICAgICAgICB0eXBlLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGF0dGFjaG1lbnRVcmxzLFxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnRSZWZcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNTdWNjZXNzLnNldCh0cnVlKTtcblxuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KHsgcmVzcG9uc2UsIHR5cGUsIHRpdGxlLCBhdHRhY2htZW50VXJscyB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdGhpcy5lcnJvci5zZXQoZXJyLmVycm9yPy5tZXNzYWdlIHx8IGVyci5tZXNzYWdlIHx8IHRoaXMuaTE4bi50KCdmZWVkYmFja0Vycm9yJykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgIHRoaXMuZm9ybVByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG4gIH1cblxuICBvbkF0dGFjaG1lbnRzQ2hhbmdlKGl0ZW1zOiBBdHRhY2htZW50SXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QXR0YWNobWVudHMgPSBpdGVtcztcbiAgfVxuXG4gIG9uQ2FuY2VsQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZlZWRiYWNrVHlwZSxcbiAgQ29udGVudFJlZixcbiAgQ3JlYXRlRmVlZGJhY2tSZXNwb25zZSxcbiAgRmVlZGJhY2tUeXBlT3B0aW9uLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjay90eXBlcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgcGFyYSBlbCBjb21wb25lbnRlIEZlZWRiYWNrRm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1NZXRhZGF0YSB7XG4gIC8qKiBUaXBvIGRlIGZlZWRiYWNrIHByZXNlbGVjY2lvbmFkbyAqL1xuICBkZWZhdWx0VHlwZT86IEZlZWRiYWNrVHlwZTtcblxuICAvKiogUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyAoc2kgYXBsaWNhKSAqL1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcblxuICAvKiogTW9zdHJhciBzZWxlY3RvciBkZSB0aXBvIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93VHlwZVNlbGVjdG9yPzogYm9vbGVhbjtcblxuICAvKiogVGlwb3MgZGUgZmVlZGJhY2sgaGFiaWxpdGFkb3MgKHBvciBkZWZlY3RvIHRvZG9zKSAqL1xuICBlbmFibGVkVHlwZXM/OiBGZWVkYmFja1R5cGVbXTtcblxuICAvKiogT3BjaW9uZXMgcGVyc29uYWxpemFkYXMgcGFyYSB0aXBvcyBkZSBmZWVkYmFjayAqL1xuICB0eXBlT3B0aW9ucz86IEZlZWRiYWNrVHlwZU9wdGlvbltdO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBwYXJhIHTDrXR1bG8gKi9cbiAgdGl0bGVQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogUGxhY2Vob2xkZXIgcGFyYSBkZXNjcmlwY2nDs24gKi9cbiAgZGVzY3JpcHRpb25QbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogTGFiZWwgcGFyYSBjYW1wbyBkZSB0w610dWxvICovXG4gIHRpdGxlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIExhYmVsIHBhcmEgY2FtcG8gZGUgZGVzY3JpcGNpw7NuICovXG4gIGRlc2NyaXB0aW9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gZGUgZW52w61vICovXG4gIHN1Ym1pdEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gY2FuY2VsYXIgKHNpIG5vIHNlIHByb3BvcmNpb25hLCBubyBzZSBtdWVzdHJhKSAqL1xuICBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIGNhbXBvIGRlIGFkanVudG9zIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93QXR0YWNobWVudHM/OiBib29sZWFuO1xuXG4gIC8qKiBMYWJlbCBwYXJhIGNhbXBvIGRlIGFkanVudG9zICovXG4gIGF0dGFjaG1lbnRzTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIE1lbnNhamUgZGUgw6l4aXRvIHBlcnNvbmFsaXphZG8gKi9cbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgcGFyYSBlbCBjb250ZW5lZG9yICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKiBNb2RvIGNvbXBhY3RvIChtZW5vcyBlc3BhY2lhZG8pICovXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV2ZW50byBlbWl0aWRvIGN1YW5kbyBlbCBmZWVkYmFjayBzZSBlbnbDrWEgZXhpdG9zYW1lbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrU3VibWl0RXZlbnQge1xuICByZXNwb25zZTogQ3JlYXRlRmVlZGJhY2tSZXNwb25zZTtcbiAgdHlwZTogRmVlZGJhY2tUeXBlO1xuICB0aXRsZTogc3RyaW5nO1xuICBhdHRhY2htZW50VXJscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEVzdGFkbyBkZWwgZm9ybXVsYXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1TdGF0ZSB7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWNjZXNzOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZlZWRiYWNrVHlwZSxcbiAgQ29udGVudFJlZixcbiAgQ3JlYXRlRmVlZGJhY2tSZXNwb25zZSxcbiAgRmVlZGJhY2tUeXBlT3B0aW9uLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjay90eXBlcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgcGFyYSBlbCBjb21wb25lbnRlIEZlZWRiYWNrRm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1NZXRhZGF0YSB7XG4gIC8qKiBUaXBvIGRlIGZlZWRiYWNrIHByZXNlbGVjY2lvbmFkbyAqL1xuICBkZWZhdWx0VHlwZT86IEZlZWRiYWNrVHlwZTtcblxuICAvKiogUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyAoc2kgYXBsaWNhKSAqL1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcblxuICAvKiogTW9zdHJhciBzZWxlY3RvciBkZSB0aXBvIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93VHlwZVNlbGVjdG9yPzogYm9vbGVhbjtcblxuICAvKiogVGlwb3MgZGUgZmVlZGJhY2sgaGFiaWxpdGFkb3MgKHBvciBkZWZlY3RvIHRvZG9zKSAqL1xuICBlbmFibGVkVHlwZXM/OiBGZWVkYmFja1R5cGVbXTtcblxuICAvKiogT3BjaW9uZXMgcGVyc29uYWxpemFkYXMgcGFyYSB0aXBvcyBkZSBmZWVkYmFjayAqL1xuICB0eXBlT3B0aW9ucz86IEZlZWRiYWNrVHlwZU9wdGlvbltdO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBwYXJhIHTDrXR1bG8gKi9cbiAgdGl0bGVQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogUGxhY2Vob2xkZXIgcGFyYSBkZXNjcmlwY2nDs24gKi9cbiAgZGVzY3JpcHRpb25QbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogTGFiZWwgcGFyYSBjYW1wbyBkZSB0w610dWxvICovXG4gIHRpdGxlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIExhYmVsIHBhcmEgY2FtcG8gZGUgZGVzY3JpcGNpw7NuICovXG4gIGRlc2NyaXB0aW9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gZGUgZW52w61vICovXG4gIHN1Ym1pdEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gY2FuY2VsYXIgKHNpIG5vIHNlIHByb3BvcmNpb25hLCBubyBzZSBtdWVzdHJhKSAqL1xuICBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIGNhbXBvIGRlIGFkanVudG9zIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93QXR0YWNobWVudHM/OiBib29sZWFuO1xuXG4gIC8qKiBMYWJlbCBwYXJhIGNhbXBvIGRlIGFkanVudG9zICovXG4gIGF0dGFjaG1lbnRzTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIE1lbnNhamUgZGUgw6l4aXRvIHBlcnNvbmFsaXphZG8gKi9cbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgcGFyYSBlbCBjb250ZW5lZG9yICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKiBNb2RvIGNvbXBhY3RvIChtZW5vcyBlc3BhY2lhZG8pICovXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xuXG4gIC8qKiBNb3N0cmFyIGVuY2FiZXphZG8gZGUgdMOtdHVsbyB5IHN1YnTDrXR1bG8gZW5jaW1hIGRlbCBmb3JtdWxhcmlvICovXG4gIHNob3dUaXRsZT86IGJvb2xlYW47XG5cbiAgLyoqIFTDrXR1bG8gcGVyc29uYWxpemFkbyAodXNhIGkxOG4gJ2Zvcm1UaXRsZScgY29tbyBmYWxsYmFjaykgKi9cbiAgcGFnZVRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKiBTdWJ0w610dWxvIHBlcnNvbmFsaXphZG8gKHVzYSBpMThuICdmb3JtU3VidGl0bGUnIGNvbW8gZmFsbGJhY2spICovXG4gIHBhZ2VTdWJ0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudG8gZW1pdGlkbyBjdWFuZG8gZWwgZmVlZGJhY2sgc2UgZW52w61hIGV4aXRvc2FtZW50ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja1N1Ym1pdEV2ZW50IHtcbiAgcmVzcG9uc2U6IENyZWF0ZUZlZWRiYWNrUmVzcG9uc2U7XG4gIHR5cGU6IEZlZWRiYWNrVHlwZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgYXR0YWNobWVudFVybHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFc3RhZG8gZGVsIGZvcm11bGFyaW8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tGb3JtU3RhdGUge1xuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW47XG4gIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
@@ -339,8 +339,17 @@ export class OAuthService {
339
339
  clearInterval(this.checkClosedInterval);
340
340
  this.checkClosedInterval = null;
341
341
  }
342
- if (this.popup && !this.popup.closed) {
343
- this.popup.close();
342
+ // COOP (Google usa same-origin) puede severar la BCG del popup → acceder a
343
+ // popup.closed o llamar popup.close() lanza SecurityError. Sin este try/catch,
344
+ // cleanup() tira, ngZone.run() nunca se llama y el observer no emite → sin
345
+ // navegación post-login (bug intermitente).
346
+ try {
347
+ if (this.popup && !this.popup.closed) {
348
+ this.popup.close();
349
+ }
350
+ }
351
+ catch {
352
+ // Cross-BCG por COOP: ignorar, el popup se cierra solo vía closeAfterDelay
344
353
  }
345
354
  this.popup = null;
346
355
  // El nonce ya fue verificado (si correspondía) antes de llegar acá; se
@@ -401,4 +410,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
401
410
  type: Inject,
402
411
  args: [VALTECH_AUTH_CONFIG]
403
412
  }] }, { type: i1.HttpClient }, { type: i0.NgZone }] });
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBVyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVl2QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixNQUFjO1FBRjJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWRoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztRQUMxRTs7Ozs7V0FLRztRQUNLLGtCQUFhLEdBQWtCLElBQUksQ0FBQztJQU16QyxDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFFBQXVCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSx5RUFBeUU7WUFDekUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLDRFQUE0RTtZQUM1RSxnRkFB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QUFZLGtCQWFELG1CQUFtQjttSEFiOUIsWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBYzdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBOZ1pvbmUsIE9wdGlvbmFsLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgT0F1dGhQcm92aWRlcixcbiAgT0F1dGhSZXN1bHQsXG4gIE9BdXRoRXJyb3IsXG4gIE9BdXRoQ2FsbGJhY2tEYXRhLFxuICBMaW5rZWRQcm92aWRlcixcbiAgSGFzUGFzc3dvcmRSZXNwb25zZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBkZSBPQXV0aCBwYXJhIGxvZ2luIHNvY2lhbC5cbiAqXG4gKiBJbXBsZW1lbnRhIGZsdWpvIE9BdXRoIHNlcnZlci1zaWRlIGNvbiBwb3B1cDpcbiAqIDEuIEZyb250ZW5kIGFicmUgcG9wdXAgaGFjaWEgYmFja2VuZFxuICogMi4gQmFja2VuZCByZWRpcmlnZSBhIHByb3ZpZGVyIChHb29nbGUsIEFwcGxlLCBNaWNyb3NvZnQpXG4gKiAzLiBVc3VhcmlvIGF1dG9yaXphXG4gKiA0LiBCYWNrZW5kIGludGVyY2FtYmlhIGNvZGUsIGdlbmVyYSBKV1QsIHJlZGlyaWdlIGNvbiB0b2tlbnNcbiAqIDUuIFBvcHVwIGVudsOtYSB0b2tlbnMgYSB2ZW50YW5hIHBhZHJlIHZpYSBwb3N0TWVzc2FnZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBPQXV0aFNlcnZpY2UsIEF1dGhTZXJ2aWNlIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBvYXV0aCA9IGluamVjdChPQXV0aFNlcnZpY2UpO1xuICogICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICpcbiAqICAgYXN5bmMgbG9naW5XaXRoR29vZ2xlKCkge1xuICogICAgIHRoaXMub2F1dGguc3RhcnRGbG93KCdnb29nbGUnKS5zdWJzY3JpYmUoe1xuICogICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICogICAgICAgICAvLyBUb2tlbnMgcmVjaWJpZG9zLCBndWFyZGFyIGVuIGF1dGggc3RhdGVcbiAqICAgICAgICAgdGhpcy5hdXRoLmhhbmRsZU9BdXRoU3VjY2VzcyhyZXN1bHQpO1xuICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gKiAgICAgICB9LFxuICogICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICogICAgICAgICBjb25zb2xlLmVycm9yKCdPQXV0aCBmYWlsZWQ6JywgZXJyb3IpO1xuICogICAgICAgfVxuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBPQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHBvcHVwOiBXaW5kb3cgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcjogKChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNoZWNrQ2xvc2VkSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogTm9uY2UgZGVsIGZsdWpvIE9BdXRoIGVuIGN1cnNvIChNLTA3KS4gVml2ZSBTT0xPIGVuIG1lbW9yaWEg4oCUIHVuIFhTUyBubyBsb1xuICAgKiBwdWVkZSBsZWVyIGRlIGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZS4gVmlhamEgYWwgYmFja2VuZCAoY2xpZW50X25vbmNlKSxcbiAgICogdnVlbHZlIGVuIGVsIGNhbGxiYWNrLCB5IHNlIHZlcmlmaWNhIGFjw6Eg4oaSIHJlY2hhemEgdW4gb2F1dGhfY2FsbGJhY2tfZGF0YVxuICAgKiBmb3JqYWRvIHBvciBYU1MuXG4gICAqL1xuICBwcml2YXRlIGV4cGVjdGVkTm9uY2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVkFMVEVDSF9BVVRIX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hBdXRoQ29uZmlnIHwgbnVsbCxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIEluaWNpYSBmbHVqbyBPQXV0aCBlbiBwb3B1cC5cbiAgICogUmV0b3JuYSBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBjdWFuZG8gZWwgdXN1YXJpbyBjb21wbGV0YSBlbCBmbHVqby5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyIC0gUHJvdmVlZG9yIE9BdXRoICgnZ29vZ2xlJywgJ2FwcGxlJywgJ21pY3Jvc29mdCcpXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIE9BdXRoUmVzdWx0IG8gZXJyb3JcbiAgICovXG4gIHN0YXJ0Rmxvdyhwcm92aWRlcjogT0F1dGhQcm92aWRlcik6IE9ic2VydmFibGU8T0F1dGhSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgLy8gTm9uY2UgZGUgZmx1am8gKE0tMDcpOiB2aXZlIHNvbG8gZW4gZXN0ZSBvYmpldG8gKG5vIGVuIHN0b3JhZ2UpLCB2aWFqYVxuICAgICAgLy8gYWwgYmFja2VuZCBlbiBjbGllbnRfbm9uY2UgeSB2dWVsdmUgZW4gZWwgY2FsbGJhY2suIEVsIG9wZW5lciBsbyB2ZXJpZmljYVxuICAgICAgLy8g4oaSIHVuIG9hdXRoX2NhbGxiYWNrX2RhdGEgZm9yamFkbyBlbiBsb2NhbFN0b3JhZ2UgcG9yIFhTUyBubyBsbyBjb25vY2UuXG4gICAgICBjb25zdCBub25jZSA9IHRoaXMuZ2VuZXJhdGVOb25jZSgpO1xuICAgICAgdGhpcy5leHBlY3RlZE5vbmNlID0gbm9uY2U7XG5cbiAgICAgIC8vIHBvcHVwPXRydWUgc29icmV2aXZlIGVsIGJvdW5jZSBjcm9zcy1vcmlnaW4gKEdvb2dsZS9NUyBib3JyYW4gd2luZG93Lm5hbWVcbiAgICAgIC8vIHBvciBwcml2YWNpZGFkKS4gRWwgYmFja2VuZCBsbyByZWVudsOtYSBlbiBlbCByZWRpcmVjdCBmaW5hbCB2w61hIGFwcGVuZFBhcmFtcy5cbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFjaz9wb3B1cD10cnVlYDtcbiAgICAgIGNvbnN0IHN0YXJ0VXJsID0gYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC8ke3Byb3ZpZGVyfS9zdGFydD9yZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmkpfSZjbGllbnRfbm9uY2U9JHtlbmNvZGVVUklDb21wb25lbnQobm9uY2UpfWA7XG5cbiAgICAgIC8vIEFicmlyIHBvcHVwIGNlbnRyYWRvXG4gICAgICBjb25zdCB3aWR0aCA9IDUwMDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IDYwMDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aW5kb3cuc2NyZWVuWCArICh3aW5kb3cub3V0ZXJXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICBjb25zdCB0b3AgPSB3aW5kb3cuc2NyZWVuWSArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gYHdpZHRoPSR7d2lkdGh9LGhlaWdodD0ke2hlaWdodH0sbGVmdD0ke2xlZnR9LHRvcD0ke3RvcH0scG9wdXA9eWVzYDtcblxuICAgICAgdGhpcy5wb3B1cCA9IHdpbmRvdy5vcGVuKHN0YXJ0VXJsLCAnb2F1dGgnLCBmZWF0dXJlcyk7XG5cbiAgICAgIGlmICghdGhpcy5wb3B1cCkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgY29kZTogJ1BPUFVQX0JMT0NLRUQnLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlLiBQb3IgZmF2b3IsIHBlcm1pdGUgcG9wdXBzIHBhcmEgZXN0ZSBzaXRpby4nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICB9XG5cbiAgICAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGRlbCBwb3B1cFxuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFZhbGlkYXIgb3JpZ2VuXG4gICAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGFyIHRpcG8gZGUgbWVuc2FqZVxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWZXJpZmljYXIgZWwgbm9uY2UgZGVsIGZsdWpvIChNLTA3KTogc2kgbm8gY29pbmNpZGUsIG5vIGVzIG51ZXN0cm9cbiAgICAgICAgLy8gY2FsbGJhY2sg4oaSIGlnbm9yYXIgKG5vIGNvbnN1bWlyIGVsIG9ic2VydmFibGUpLlxuICAgICAgICBpZiAoIXRoaXMuaXNOb25jZVZhbGlkKGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGltcGlhclxuICAgICAgICB0aGlzLmNsZWFudXAoKTtcblxuICAgICAgICAvLyBFbWl0aXIgcmVzdWx0YWRvIGRlbnRybyBkZSBOZ1pvbmUgcGFyYSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnRva2Vucykge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhLnRva2Vucyk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1Jlc3B1ZXN0YSBpbnbDoWxpZGEgZGVsIHNlcnZpZG9yIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG5cbiAgICAgIC8vIFBvbGxpbmcgZGUgbG9jYWxTdG9yYWdlIChDT09QIHdvcmthcm91bmQgLSBubyBwb2RlbW9zIGRldGVjdGFyIHBvcHVwLmNsb3NlZClcbiAgICAgIC8vIFRhbWJpw6luIHZlcmlmaWNhIHNpIGVsIHBvcHVwIHNlIGNlcnLDsyBtYW51YWxtZW50ZVxuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAvLyBQcmltZXJvIHZlcmlmaWNhciBsb2NhbFN0b3JhZ2UgKGZ1bmNpb25hIGF1bnF1ZSBDT09QIGJsb3F1ZWUgdG9kbylcbiAgICAgICAgY29uc3Qgc3RvcmVkRGF0YSA9IHRoaXMuY2hlY2tMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuICAgICAgICBpZiAoc3RvcmVkRGF0YSkge1xuICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcmVkRGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihzdG9yZWREYXRhLmVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkRGF0YS50b2tlbnMpIHtcbiAgICAgICAgICAgICAgLy8gR2F0ZSBkZSBkaWFnbsOzc3RpY286IGxhIG1ldGFkYXRhIGRlIHRva2VucyAoa2V5cywgcHJlc2VuY2lhIHlcbiAgICAgICAgICAgICAgLy8gbG9uZ2l0dWQgZGVsIGZpcmViYXNlVG9rZW4pIG5vIGRlYmUgZmlsdHJhcnNlIGEgbGEgY29uc29sYSBlblxuICAgICAgICAgICAgICAvLyBwcm9kdWNjacOzbiAoTDQgZGVsIGF1ZGl0KS4gU29sbyBlbiBkZXYuXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhTZXJ2aWNlXSBSZXRyaWV2ZWQgdG9rZW5zIGZyb20gbG9jYWxTdG9yYWdlIGZhbGxiYWNrJywge1xuICAgICAgICAgICAgICAgICAga2V5czogT2JqZWN0LmtleXMoc3RvcmVkRGF0YS50b2tlbnMpLFxuICAgICAgICAgICAgICAgICAgaGFzRmlyZWJhc2VUb2tlbjogISFzdG9yZWREYXRhLnRva2Vucy5maXJlYmFzZVRva2VuLFxuICAgICAgICAgICAgICAgICAgZmlyZWJhc2VUb2tlbkxlbmd0aDogc3RvcmVkRGF0YS50b2tlbnMuZmlyZWJhc2VUb2tlbj8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChzdG9yZWREYXRhLnRva2Vucyk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZXNwdWVzdGEgaW52w6FsaWRhIGRlbCBzZXJ2aWRvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW50ZW50YXIgdmVyaWZpY2FyIHNpIHBvcHVwIHNlIGNlcnLDsyAocHVlZGUgZmFsbGFyIHBvciBDT09QKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0aGlzLnBvcHVwPy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1BVUF9DTE9TRUQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZSBjZXJyw7MgbGEgdmVudGFuYSBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIENPT1AgYmxvcXVlYSBhY2Nlc28gYSBwb3B1cC5jbG9zZWQgLSBpZ25vcmFyIHkgc2VndWlyIGNvbiBwb2xsaW5nXG4gICAgICAgIH1cbiAgICAgIH0sIDMwMCk7XG5cbiAgICAgIC8vIENsZWFudXAgY3VhbmRvIGVsIG9ic2VydmFibGUgc2UgZGVzdHJ1eWVcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZmx1am8gZGUgbGlua2luZyBwYXJhIHZpbmN1bGFyIHVuIHByb3ZlZWRvciBhZGljaW9uYWwuXG4gICAqIFJlcXVpZXJlIHF1ZSBlbCB1c3VhcmlvIGVzdMOpIGF1dGVudGljYWRvLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSBQcm92ZWVkb3IgT0F1dGggYSB2aW5jdWxhclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBjdWFuZG8gc2UgY29tcGxldGEgZWwgbGlua2luZ1xuICAgKi9cbiAgc3RhcnRMaW5rRmxvdyhwcm92aWRlcjogT0F1dGhQcm92aWRlcik6IE9ic2VydmFibGU8T0F1dGhSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL29hdXRoL2NhbGxiYWNrP3BvcHVwPXRydWVgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL2xpbmsvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX1gO1xuXG4gICAgICBjb25zdCB3aWR0aCA9IDUwMDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IDYwMDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aW5kb3cuc2NyZWVuWCArICh3aW5kb3cub3V0ZXJXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICBjb25zdCB0b3AgPSB3aW5kb3cuc2NyZWVuWSArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gYHdpZHRoPSR7d2lkdGh9LGhlaWdodD0ke2hlaWdodH0sbGVmdD0ke2xlZnR9LHRvcD0ke3RvcH0scG9wdXA9eWVzYDtcblxuICAgICAgdGhpcy5wb3B1cCA9IHdpbmRvdy5vcGVuKHN0YXJ0VXJsLCAnb2F1dGgtbGluaycsIGZlYXR1cmVzKTtcblxuICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICBjb2RlOiAnUE9QVVBfQkxPQ0tFRCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0VsIG5hdmVnYWRvciBibG9xdWXDsyBsYSB2ZW50YW5hIGVtZXJnZW50ZScsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTsgLy8gY2xlYW51cCBmdW5jdGlvblxuICAgICAgfVxuXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zIHx8ICh7fSBhcyBPQXV0aFJlc3VsdCkpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ1BPUFVQX0NMT1NFRCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZSBjZXJyw7MgbGEgdmVudGFuYSBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsb3MgcHJvdmVlZG9yZXMgT0F1dGggdmluY3VsYWRvcyBhbCB1c3VhcmlvLlxuICAgKi9cbiAgZ2V0TGlua2VkUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8TGlua2VkUHJvdmlkZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBwcm92aWRlcnM6IExpbmtlZFByb3ZpZGVyW10gfT4oYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC9wcm92aWRlcnNgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnRkVUQ0hfRVJST1InLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBvYnRlbmVyIHByb3ZlZWRvcmVzIHZpbmN1bGFkb3MnLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN2aW5jdWxhIHVuIHByb3ZlZWRvciBPQXV0aC5cbiAgICovXG4gIHVubGlua1Byb3ZpZGVyKHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3VubGlua2AsIHsgcHJvdmlkZXIgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1VOTElOS19FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGRlc3ZpbmN1bGFyIHByb3ZlZWRvcicsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXN0YWJsZWNlIGNvbnRyYXNlw7FhIHBhcmEgdXN1YXJpb3MgcXVlIHNvbG8gdGllbmVuIE9BdXRoLlxuICAgKi9cbiAgc2V0UGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4oYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC9zZXQtcGFzc3dvcmRgLCB7IHBhc3N3b3JkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdTRVRfUEFTU1dPUkRfRVJST1InLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBlc3RhYmxlY2VyIGNvbnRyYXNlw7FhJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGNvbnRyYXNlw7FhIGVzdGFibGVjaWRhLlxuICAgKi9cbiAgaGFzUGFzc3dvcmQoKTogT2JzZXJ2YWJsZTxIYXNQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxIYXNQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL2hhcy1wYXNzd29yZGApXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdDSEVDS19QQVNTV09SRF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIHZlcmlmaWNhciBjb250cmFzZcOxYScsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV2aXNhIGxvY2FsU3RvcmFnZSBwb3IgZGF0b3MgZGUgY2FsbGJhY2sgT0F1dGggKGZhbGxiYWNrIHBhcmEgQ09PUCkuXG4gICAqIFNvbG8gYWNlcHRhIGRhdG9zIHJlY2llbnRlcyAow7psdGltb3MgMzAgc2VndW5kb3MpLlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrKCk6IE9BdXRoQ2FsbGJhY2tEYXRhIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnKTtcbiAgICAgIGNvbnN0IGRhdGFTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfZGF0YScpO1xuXG4gICAgICBpZiAoIXRpbWVzdGFtcCB8fCAhZGF0YVN0cikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBhY2VwdGFyIGRhdG9zIGRlIGxvcyDDumx0aW1vcyAzMCBzZWd1bmRvc1xuICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHBhcnNlSW50KHRpbWVzdGFtcCwgMTApO1xuICAgICAgaWYgKGFnZSA+IDMwMDAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhTZXJ2aWNlXSBsb2NhbFN0b3JhZ2UgZGF0YSB0b28gb2xkLCBpZ25vcmluZycpO1xuICAgICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG5cbiAgICAgIC8vIEVsIGNhbWlubyBsb2NhbFN0b3JhZ2UgZXMgZWwgcXVlIHVuIFhTUyBwb2Ryw61hIGZvcmphciAoTS0wNykuIEVsXG4gICAgICAvLyBwb3N0TWVzc2FnZSB5YSB2YWxpZGEgb3JpZ2luICsgdGlwbzsgYWPDoSByZXBsaWNhbW9zIGVzYXMgZGVmZW5zYXMgeVxuICAgICAgLy8gc3VtYW1vcyBsYSB2ZXJpZmljYWNpw7NuIGRlbCBub25jZSBkZSBmbHVqbyArIGZvcm1hIGRlbCBwYXlsb2FkLlxuICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNOb25jZVZhbGlkKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2FsbGJhY2tTaGFwZVZhbGlkKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aFNlcnZpY2VdIEVycm9yIHJlYWRpbmcgbG9jYWxTdG9yYWdlIGZhbGxiYWNrOicsIGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSBkYXRvcyBkZSBmYWxsYmFjayBkZSBsb2NhbFN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJyk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb2F1dGhfY2FsbGJhY2tfdGltZXN0YW1wJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmFyIGVycm9yZXMgZGUgbGltcGllemFcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIHJlY3Vyc29zIGRlbCBwb3B1cC5cbiAgICovXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jaGVja0Nsb3NlZEludGVydmFsKTtcbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wdXAgJiYgIXRoaXMucG9wdXAuY2xvc2VkKSB7XG4gICAgICB0aGlzLnBvcHVwLmNsb3NlKCk7XG4gICAgfVxuICAgIHRoaXMucG9wdXAgPSBudWxsO1xuICAgIC8vIEVsIG5vbmNlIHlhIGZ1ZSB2ZXJpZmljYWRvIChzaSBjb3JyZXNwb25kw61hKSBhbnRlcyBkZSBsbGVnYXIgYWPDoTsgc2VcbiAgICAvLyBsaW1waWEgcGFyYSBubyByZXVzYXJsbyBlbiB1biBmbHVqbyBmdXR1cm8gKE0tMDcpLlxuICAgIHRoaXMuZXhwZWN0ZWROb25jZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIHVuIG5vbmNlIGFsZWF0b3JpbyAoQ1NQUk5HKSB1cmwtc2FmZSBwYXJhIGVsIGZsdWpvIE9BdXRoIChNLTA3KS5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVOb25jZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnl0ZXMpO1xuICAgIGxldCBiaW4gPSAnJztcbiAgICBieXRlcy5mb3JFYWNoKGIgPT4gKGJpbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpKSk7XG4gICAgLy8gYmFzZTY0dXJsIHNpbiBwYWRkaW5nLlxuICAgIHJldHVybiBidG9hKGJpbikucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHF1ZSBlbCBjYWxsYmFjayB0cmFpZ2EgZWwgbm9uY2UgZGVsIGZsdWpvIGFjdHVhbCAoTS0wNykuXG4gICAqXG4gICAqIFRvbGVyYW50ZSBhIGxhIHRyYW5zaWNpw7NuOiBzb2xvIHNlIEVYSUdFIGNvaW5jaWRlbmNpYSBjdWFuZG8gZWwgY2FsbGJhY2tcbiAgICogdHJhZSB1biBub25jZS4gU2kgbm8gbG8gdHJhZSAoYmFja2VuZCBhw7puIHNpbiBNLTA3IGRlc3BsZWdhZG8sIHAuZWouIGRldiksIG5vXG4gICAqIHNlIGJsb3F1ZWEgZWwgbG9naW4uIEN1YW5kbyBlbCBiYWNrZW5kIGVjaGEgYGNsaWVudF9ub25jZWAgZW4gdG9kb3MgbGFkb3MsIHVuXG4gICAqIGNhbGxiYWNrIGZvcmphZG8gY29uIHVuIG5vbmNlIGRpc3RpbnRvIHPDrSBzZSByZWNoYXphLiBVbiBwYXlsb2FkIGZvcmphZG8gcG9yXG4gICAqIFhTUyBxdWUgT01JVEEgZWwgbm9uY2Ugbm8gc2UgZnJlbmEgcG9yIGFjw6EsIHBlcm8gaWd1YWwgcGFzYSBwb3IgbGFzXG4gICAqIHZhbGlkYWNpb25lcyBkZSB0aXBvL2Zvcm1hIGRlIGBjaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrYC5cbiAgICovXG4gIHByaXZhdGUgaXNOb25jZVZhbGlkKGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogYm9vbGVhbiB7XG4gICAgLy8gTm8gaGF5IGZsdWpvIGNvbiBub25jZSBhY3Rpdm8gKGxlZ2FjeSAvIGxpbmsgZmxvdykg4oaSIG5vIGJsb3F1ZWFyLlxuICAgIGlmICghdGhpcy5leHBlY3RlZE5vbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRWwgY2FsbGJhY2sgbm8gdHJhZSBub25jZSAoYmFja2VuZCBzaW4gTS0wNykg4oaSIG5vIGJsb3F1ZWFyICh0cmFuc2ljacOzbikuXG4gICAgaWYgKCFkYXRhPy5ub25jZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIE5vbmNlIHByZXNlbnRlIOKGkiBkZWJlIGNvaW5jaWRpciBjb24gZWwgZGVsIGZsdWpvLlxuICAgIHJldHVybiBkYXRhLm5vbmNlID09PSB0aGlzLmV4cGVjdGVkTm9uY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhIGxhIGZvcm1hIGRlbCBwYXlsb2FkIGRlbCBjYWxsYmFjayAoTS0wNyk6IGRlYmUgc2VyIHVuIGVycm9yIG8gdG9rZW5zXG4gICAqIGNvbW8gb2JqZXRvLiBCbG9xdWVhIGlueWVjY2lvbmVzIG1hbGZvcm1hZGFzIChwcmltaXRpdm9zLCBzaGFwZXMgYmFzdXJhKS5cbiAgICovXG4gIHByaXZhdGUgaXNDYWxsYmFja1NoYXBlVmFsaWQoZGF0YTogT0F1dGhDYWxsYmFja0RhdGEpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFcnJvciA9ICEhZGF0YS5lcnJvciAmJiB0eXBlb2YgZGF0YS5lcnJvciA9PT0gJ29iamVjdCc7XG4gICAgY29uc3QgaGFzVG9rZW5zID0gISFkYXRhLnRva2VucyAmJiB0eXBlb2YgZGF0YS50b2tlbnMgPT09ICdvYmplY3QnO1xuICAgIHJldHVybiBoYXNFcnJvciB8fCBoYXNUb2tlbnM7XG4gIH1cbn1cbiJdfQ==
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBVyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVl2QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixNQUFjO1FBRjJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWRoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztRQUMxRTs7Ozs7V0FLRztRQUNLLGtCQUFhLEdBQWtCLElBQUksQ0FBQztJQU16QyxDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFFBQXVCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSx5RUFBeUU7WUFDekUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLDRFQUE0RTtZQUM1RSxnRkFB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LENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUM7UUFDbkUsT0FBTyxRQUFRLElBQUksU0FBUyxDQUFDO0lBQy9CLENBQUM7K0dBcGFVLFlBQVksa0JBYUQsbUJBQW1CO21IQWI5QixZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFjN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE5nWm9uZSwgT3B0aW9uYWwsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBPQXV0aFByb3ZpZGVyLFxuICBPQXV0aFJlc3VsdCxcbiAgT0F1dGhFcnJvcixcbiAgT0F1dGhDYWxsYmFja0RhdGEsXG4gIExpbmtlZFByb3ZpZGVyLFxuICBIYXNQYXNzd29yZFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIE9BdXRoIHBhcmEgbG9naW4gc29jaWFsLlxuICpcbiAqIEltcGxlbWVudGEgZmx1am8gT0F1dGggc2VydmVyLXNpZGUgY29uIHBvcHVwOlxuICogMS4gRnJvbnRlbmQgYWJyZSBwb3B1cCBoYWNpYSBiYWNrZW5kXG4gKiAyLiBCYWNrZW5kIHJlZGlyaWdlIGEgcHJvdmlkZXIgKEdvb2dsZSwgQXBwbGUsIE1pY3Jvc29mdClcbiAqIDMuIFVzdWFyaW8gYXV0b3JpemFcbiAqIDQuIEJhY2tlbmQgaW50ZXJjYW1iaWEgY29kZSwgZ2VuZXJhIEpXVCwgcmVkaXJpZ2UgY29uIHRva2Vuc1xuICogNS4gUG9wdXAgZW52w61hIHRva2VucyBhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE9BdXRoU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIG9hdXRoID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbldpdGhHb29nbGUoKSB7XG4gKiAgICAgdGhpcy5vYXV0aC5zdGFydEZsb3coJ2dvb2dsZScpLnN1YnNjcmliZSh7XG4gKiAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gKiAgICAgICAgIC8vIFRva2VucyByZWNpYmlkb3MsIGd1YXJkYXIgZW4gYXV0aCBzdGF0ZVxuICogICAgICAgICB0aGlzLmF1dGguaGFuZGxlT0F1dGhTdWNjZXNzKHJlc3VsdCk7XG4gKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAqICAgICAgIH0sXG4gKiAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ09BdXRoIGZhaWxlZDonLCBlcnJvcik7XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcG9wdXA6IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hlY2tDbG9zZWRJbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBOb25jZSBkZWwgZmx1am8gT0F1dGggZW4gY3Vyc28gKE0tMDcpLiBWaXZlIFNPTE8gZW4gbWVtb3JpYSDigJQgdW4gWFNTIG5vIGxvXG4gICAqIHB1ZWRlIGxlZXIgZGUgbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlLiBWaWFqYSBhbCBiYWNrZW5kIChjbGllbnRfbm9uY2UpLFxuICAgKiB2dWVsdmUgZW4gZWwgY2FsbGJhY2ssIHkgc2UgdmVyaWZpY2EgYWPDoSDihpIgcmVjaGF6YSB1biBvYXV0aF9jYWxsYmFja19kYXRhXG4gICAqIGZvcmphZG8gcG9yIFhTUy5cbiAgICovXG4gIHByaXZhdGUgZXhwZWN0ZWROb25jZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIE9BdXRoIGVuIHBvcHVwLlxuICAgKiBSZXRvcm5hIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCB1c3VhcmlvIGNvbXBsZXRhIGVsIGZsdWpvLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSBQcm92ZWVkb3IgT0F1dGggKCdnb29nbGUnLCAnYXBwbGUnLCAnbWljcm9zb2Z0JylcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgT0F1dGhSZXN1bHQgbyBlcnJvclxuICAgKi9cbiAgc3RhcnRGbG93KHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxPQXV0aFJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAvLyBOb25jZSBkZSBmbHVqbyAoTS0wNyk6IHZpdmUgc29sbyBlbiBlc3RlIG9iamV0byAobm8gZW4gc3RvcmFnZSksIHZpYWphXG4gICAgICAvLyBhbCBiYWNrZW5kIGVuIGNsaWVudF9ub25jZSB5IHZ1ZWx2ZSBlbiBlbCBjYWxsYmFjay4gRWwgb3BlbmVyIGxvIHZlcmlmaWNhXG4gICAgICAvLyDihpIgdW4gb2F1dGhfY2FsbGJhY2tfZGF0YSBmb3JqYWRvIGVuIGxvY2FsU3RvcmFnZSBwb3IgWFNTIG5vIGxvIGNvbm9jZS5cbiAgICAgIGNvbnN0IG5vbmNlID0gdGhpcy5nZW5lcmF0ZU5vbmNlKCk7XG4gICAgICB0aGlzLmV4cGVjdGVkTm9uY2UgPSBub25jZTtcblxuICAgICAgLy8gcG9wdXA9dHJ1ZSBzb2JyZXZpdmUgZWwgYm91bmNlIGNyb3NzLW9yaWdpbiAoR29vZ2xlL01TIGJvcnJhbiB3aW5kb3cubmFtZVxuICAgICAgLy8gcG9yIHByaXZhY2lkYWQpLiBFbCBiYWNrZW5kIGxvIHJlZW52w61hIGVuIGVsIHJlZGlyZWN0IGZpbmFsIHbDrWEgYXBwZW5kUGFyYW1zLlxuICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL29hdXRoL2NhbGxiYWNrP3BvcHVwPXRydWVgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoLyR7cHJvdmlkZXJ9L3N0YXJ0P3JlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSl9JmNsaWVudF9ub25jZT0ke2VuY29kZVVSSUNvbXBvbmVudChub25jZSl9YDtcblxuICAgICAgLy8gQWJyaXIgcG9wdXAgY2VudHJhZG9cbiAgICAgIGNvbnN0IHdpZHRoID0gNTAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gNjAwO1xuICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5ZICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBgd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfSxwb3B1cD15ZXNgO1xuXG4gICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4oc3RhcnRVcmwsICdvYXV0aCcsIGZlYXR1cmVzKTtcblxuICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICBjb2RlOiAnUE9QVVBfQkxPQ0tFRCcsXG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICdFbCBuYXZlZ2Fkb3IgYmxvcXVlw7MgbGEgdmVudGFuYSBlbWVyZ2VudGUuIFBvciBmYXZvciwgcGVybWl0ZSBwb3B1cHMgcGFyYSBlc3RlIHNpdGlvLicsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgIH1cblxuICAgICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIHBvcHVwXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhciBvcmlnZW5cbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXIgdGlwbyBkZSBtZW5zYWplXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZlcmlmaWNhciBlbCBub25jZSBkZWwgZmx1am8gKE0tMDcpOiBzaSBubyBjb2luY2lkZSwgbm8gZXMgbnVlc3Ryb1xuICAgICAgICAvLyBjYWxsYmFjayDihpIgaWdub3JhciAobm8gY29uc3VtaXIgZWwgb2JzZXJ2YWJsZSkuXG4gICAgICAgIGlmICghdGhpcy5pc05vbmNlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1waWFyXG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICAgIC8vIEVtaXRpciByZXN1bHRhZG8gZGVudHJvIGRlIE5nWm9uZSBwYXJhIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0UnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgLy8gUG9sbGluZyBkZSBsb2NhbFN0b3JhZ2UgKENPT1Agd29ya2Fyb3VuZCAtIG5vIHBvZGVtb3MgZGV0ZWN0YXIgcG9wdXAuY2xvc2VkKVxuICAgICAgLy8gVGFtYmnDqW4gdmVyaWZpY2Egc2kgZWwgcG9wdXAgc2UgY2VycsOzIG1hbnVhbG1lbnRlXG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vIFByaW1lcm8gdmVyaWZpY2FyIGxvY2FsU3RvcmFnZSAoZnVuY2lvbmEgYXVucXVlIENPT1AgYmxvcXVlZSB0b2RvKVxuICAgICAgICBjb25zdCBzdG9yZWREYXRhID0gdGhpcy5jaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG4gICAgICAgIGlmIChzdG9yZWREYXRhKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9yZWREYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHN0b3JlZERhdGEuZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9yZWREYXRhLnRva2Vucykge1xuICAgICAgICAgICAgICAvLyBHYXRlIGRlIGRpYWduw7NzdGljbzogbGEgbWV0YWRhdGEgZGUgdG9rZW5zIChrZXlzLCBwcmVzZW5jaWEgeVxuICAgICAgICAgICAgICAvLyBsb25naXR1ZCBkZWwgZmlyZWJhc2VUb2tlbikgbm8gZGViZSBmaWx0cmFyc2UgYSBsYSBjb25zb2xhIGVuXG4gICAgICAgICAgICAgIC8vIHByb2R1Y2Npw7NuIChMNCBkZWwgYXVkaXQpLiBTb2xvIGVuIGRldi5cbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aFNlcnZpY2VdIFJldHJpZXZlZCB0b2tlbnMgZnJvbSBsb2NhbFN0b3JhZ2UgZmFsbGJhY2snLCB7XG4gICAgICAgICAgICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhzdG9yZWREYXRhLnRva2VucyksXG4gICAgICAgICAgICAgICAgICBoYXNGaXJlYmFzZVRva2VuOiAhIXN0b3JlZERhdGEudG9rZW5zLmZpcmViYXNlVG9rZW4sXG4gICAgICAgICAgICAgICAgICBmaXJlYmFzZVRva2VuTGVuZ3RoOiBzdG9yZWREYXRhLnRva2Vucy5maXJlYmFzZVRva2VuPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHN0b3JlZERhdGEudG9rZW5zKTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1Jlc3B1ZXN0YSBpbnbDoWxpZGEgZGVsIHNlcnZpZG9yIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbnRlbnRhciB2ZXJpZmljYXIgc2kgcG9wdXAgc2UgY2VycsOzIChwdWVkZSBmYWxsYXIgcG9yIENPT1ApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRoaXMucG9wdXA/LmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgY29kZTogJ1BPUFVQX0NMT1NFRCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlIGNlcnLDsyBsYSB2ZW50YW5hIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gQ09PUCBibG9xdWVhIGFjY2VzbyBhIHBvcHVwLmNsb3NlZCAtIGlnbm9yYXIgeSBzZWd1aXIgY29uIHBvbGxpbmdcbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcblxuICAgICAgLy8gQ2xlYW51cCBjdWFuZG8gZWwgb2JzZXJ2YWJsZSBzZSBkZXN0cnV5ZVxuICAgICAgcmV0dXJuICgpID0+IHRoaXMuY2xlYW51cCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaWNpYSBmbHVqbyBkZSBsaW5raW5nIHBhcmEgdmluY3VsYXIgdW4gcHJvdmVlZG9yIGFkaWNpb25hbC5cbiAgICogUmVxdWllcmUgcXVlIGVsIHVzdWFyaW8gZXN0w6kgYXV0ZW50aWNhZG8uXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlciAtIFByb3ZlZWRvciBPQXV0aCBhIHZpbmN1bGFyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBzZSBjb21wbGV0YSBlbCBsaW5raW5nXG4gICAqL1xuICBzdGFydExpbmtGbG93KHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxPQXV0aFJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvb2F1dGgvY2FsbGJhY2s/cG9wdXA9dHJ1ZWA7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvbGluay8ke3Byb3ZpZGVyfS9zdGFydD9yZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmkpfWA7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gNTAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gNjAwO1xuICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5ZICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBgd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfSxwb3B1cD15ZXNgO1xuXG4gICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4oc3RhcnRVcmwsICdvYXV0aC1saW5rJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9OyAvLyBjbGVhbnVwIGZ1bmN0aW9uXG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMgfHwgKHt9IGFzIE9BdXRoUmVzdWx0KSk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwPy5jbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlIGNlcnLDsyBsYSB2ZW50YW5hIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwMCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwcm92ZWVkb3JlcyBPQXV0aCB2aW5jdWxhZG9zIGFsIHVzdWFyaW8uXG4gICAqL1xuICBnZXRMaW5rZWRQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IHByb3ZpZGVyczogTGlua2VkUHJvdmlkZXJbXSB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3Byb3ZpZGVyc2ApXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdGRVRDSF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIG9idGVuZXIgcHJvdmVlZG9yZXMgdmluY3VsYWRvcycsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPExpbmtlZFByb3ZpZGVyW10+O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3ZpbmN1bGEgdW4gcHJvdmVlZG9yIE9BdXRoLlxuICAgKi9cbiAgdW5saW5rUHJvdmlkZXIocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBzdWNjZXNzOiBib29sZWFuIH0+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvdW5saW5rYCwgeyBwcm92aWRlciB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnVU5MSU5LX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgZGVzdmluY3VsYXIgcHJvdmVlZG9yJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3RhYmxlY2UgY29udHJhc2XDsWEgcGFyYSB1c3VhcmlvcyBxdWUgc29sbyB0aWVuZW4gT0F1dGguXG4gICAqL1xuICBzZXRQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3NldC1wYXNzd29yZGAsIHsgcGFzc3dvcmQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1NFVF9QQVNTV09SRF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGVzdGFibGVjZXIgY29udHJhc2XDsWEnLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgY29udHJhc2XDsWEgZXN0YWJsZWNpZGEuXG4gICAqL1xuICBoYXNQYXNzd29yZCgpOiBPYnNlcnZhYmxlPEhhc1Bhc3N3b3JkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEhhc1Bhc3N3b3JkUmVzcG9uc2U+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvaGFzLXBhc3N3b3JkYClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ0NIRUNLX1BBU1NXT1JEX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgdmVyaWZpY2FyIGNvbnRyYXNlw7FhJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZpc2EgbG9jYWxTdG9yYWdlIHBvciBkYXRvcyBkZSBjYWxsYmFjayBPQXV0aCAoZmFsbGJhY2sgcGFyYSBDT09QKS5cbiAgICogU29sbyBhY2VwdGEgZGF0b3MgcmVjaWVudGVzICjDumx0aW1vcyAzMCBzZWd1bmRvcykuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2soKTogT0F1dGhDYWxsYmFja0RhdGEgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX3RpbWVzdGFtcCcpO1xuICAgICAgY29uc3QgZGF0YVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJyk7XG5cbiAgICAgIGlmICghdGltZXN0YW1wIHx8ICFkYXRhU3RyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTb2xvIGFjZXB0YXIgZGF0b3MgZGUgbG9zIMO6bHRpbW9zIDMwIHNlZ3VuZG9zXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gcGFyc2VJbnQodGltZXN0YW1wLCAxMCk7XG4gICAgICBpZiAoYWdlID4gMzAwMDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aFNlcnZpY2VdIGxvY2FsU3RvcmFnZSBkYXRhIHRvbyBvbGQsIGlnbm9yaW5nJyk7XG4gICAgICAgIHRoaXMuY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cikgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcblxuICAgICAgLy8gRWwgY2FtaW5vIGxvY2FsU3RvcmFnZSBlcyBlbCBxdWUgdW4gWFNTIHBvZHLDrWEgZm9yamFyIChNLTA3KS4gRWxcbiAgICAgIC8vIHBvc3RNZXNzYWdlIHlhIHZhbGlkYSBvcmlnaW4gKyB0aXBvOyBhY8OhIHJlcGxpY2Ftb3MgZXNhcyBkZWZlbnNhcyB5XG4gICAgICAvLyBzdW1hbW9zIGxhIHZlcmlmaWNhY2nDs24gZGVsIG5vbmNlIGRlIGZsdWpvICsgZm9ybWEgZGVsIHBheWxvYWQuXG4gICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc05vbmNlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDYWxsYmFja1NoYXBlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW09BdXRoU2VydmljZV0gRXJyb3IgcmVhZGluZyBsb2NhbFN0b3JhZ2UgZmFsbGJhY2s6JywgZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIGRhdG9zIGRlIGZhbGxiYWNrIGRlIGxvY2FsU3RvcmFnZS5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ29hdXRoX2NhbGxiYWNrX2RhdGEnKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBkZSBsaW1waWV6YVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgcmVjdXJzb3MgZGVsIHBvcHVwLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDT09QIChHb29nbGUgdXNhIHNhbWUtb3JpZ2luKSBwdWVkZSBzZXZlcmFyIGxhIEJDRyBkZWwgcG9wdXAg4oaSIGFjY2VkZXIgYVxuICAgIC8vIHBvcHVwLmNsb3NlZCBvIGxsYW1hciBwb3B1cC5jbG9zZSgpIGxhbnphIFNlY3VyaXR5RXJyb3IuIFNpbiBlc3RlIHRyeS9jYXRjaCxcbiAgICAvLyBjbGVhbnVwKCkgdGlyYSwgbmdab25lLnJ1bigpIG51bmNhIHNlIGxsYW1hIHkgZWwgb2JzZXJ2ZXIgbm8gZW1pdGUg4oaSIHNpblxuICAgIC8vIG5hdmVnYWNpw7NuIHBvc3QtbG9naW4gKGJ1ZyBpbnRlcm1pdGVudGUpLlxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5wb3B1cCAmJiAhdGhpcy5wb3B1cC5jbG9zZWQpIHtcbiAgICAgICAgdGhpcy5wb3B1cC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ3Jvc3MtQkNHIHBvciBDT09QOiBpZ25vcmFyLCBlbCBwb3B1cCBzZSBjaWVycmEgc29sbyB2w61hIGNsb3NlQWZ0ZXJEZWxheVxuICAgIH1cbiAgICB0aGlzLnBvcHVwID0gbnVsbDtcbiAgICAvLyBFbCBub25jZSB5YSBmdWUgdmVyaWZpY2FkbyAoc2kgY29ycmVzcG9uZMOtYSkgYW50ZXMgZGUgbGxlZ2FyIGFjw6E7IHNlXG4gICAgLy8gbGltcGlhIHBhcmEgbm8gcmV1c2FybG8gZW4gdW4gZmx1am8gZnV0dXJvIChNLTA3KS5cbiAgICB0aGlzLmV4cGVjdGVkTm9uY2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBub25jZSBhbGVhdG9yaW8gKENTUFJORykgdXJsLXNhZmUgcGFyYSBlbCBmbHVqbyBPQXV0aCAoTS0wNykuXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlTm9uY2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ5dGVzKTtcbiAgICBsZXQgYmluID0gJyc7XG4gICAgYnl0ZXMuZm9yRWFjaChiID0+IChiaW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiKSkpO1xuICAgIC8vIGJhc2U2NHVybCBzaW4gcGFkZGluZy5cbiAgICByZXR1cm4gYnRvYShiaW4pLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBxdWUgZWwgY2FsbGJhY2sgdHJhaWdhIGVsIG5vbmNlIGRlbCBmbHVqbyBhY3R1YWwgKE0tMDcpLlxuICAgKlxuICAgKiBUb2xlcmFudGUgYSBsYSB0cmFuc2ljacOzbjogc29sbyBzZSBFWElHRSBjb2luY2lkZW5jaWEgY3VhbmRvIGVsIGNhbGxiYWNrXG4gICAqIHRyYWUgdW4gbm9uY2UuIFNpIG5vIGxvIHRyYWUgKGJhY2tlbmQgYcO6biBzaW4gTS0wNyBkZXNwbGVnYWRvLCBwLmVqLiBkZXYpLCBub1xuICAgKiBzZSBibG9xdWVhIGVsIGxvZ2luLiBDdWFuZG8gZWwgYmFja2VuZCBlY2hhIGBjbGllbnRfbm9uY2VgIGVuIHRvZG9zIGxhZG9zLCB1blxuICAgKiBjYWxsYmFjayBmb3JqYWRvIGNvbiB1biBub25jZSBkaXN0aW50byBzw60gc2UgcmVjaGF6YS4gVW4gcGF5bG9hZCBmb3JqYWRvIHBvclxuICAgKiBYU1MgcXVlIE9NSVRBIGVsIG5vbmNlIG5vIHNlIGZyZW5hIHBvciBhY8OhLCBwZXJvIGlndWFsIHBhc2EgcG9yIGxhc1xuICAgKiB2YWxpZGFjaW9uZXMgZGUgdGlwby9mb3JtYSBkZSBgY2hlY2tMb2NhbFN0b3JhZ2VGYWxsYmFja2AuXG4gICAqL1xuICBwcml2YXRlIGlzTm9uY2VWYWxpZChkYXRhOiBPQXV0aENhbGxiYWNrRGF0YSk6IGJvb2xlYW4ge1xuICAgIC8vIE5vIGhheSBmbHVqbyBjb24gbm9uY2UgYWN0aXZvIChsZWdhY3kgLyBsaW5rIGZsb3cpIOKGkiBubyBibG9xdWVhci5cbiAgICBpZiAoIXRoaXMuZXhwZWN0ZWROb25jZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIEVsIGNhbGxiYWNrIG5vIHRyYWUgbm9uY2UgKGJhY2tlbmQgc2luIE0tMDcpIOKGkiBubyBibG9xdWVhciAodHJhbnNpY2nDs24pLlxuICAgIGlmICghZGF0YT8ubm9uY2UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBOb25jZSBwcmVzZW50ZSDihpIgZGViZSBjb2luY2lkaXIgY29uIGVsIGRlbCBmbHVqby5cbiAgICByZXR1cm4gZGF0YS5ub25jZSA9PT0gdGhpcy5leHBlY3RlZE5vbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYSBsYSBmb3JtYSBkZWwgcGF5bG9hZCBkZWwgY2FsbGJhY2sgKE0tMDcpOiBkZWJlIHNlciB1biBlcnJvciBvIHRva2Vuc1xuICAgKiBjb21vIG9iamV0by4gQmxvcXVlYSBpbnllY2Npb25lcyBtYWxmb3JtYWRhcyAocHJpbWl0aXZvcywgc2hhcGVzIGJhc3VyYSkuXG4gICAqL1xuICBwcml2YXRlIGlzQ2FsbGJhY2tTaGFwZVZhbGlkKGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRXJyb3IgPSAhIWRhdGEuZXJyb3IgJiYgdHlwZW9mIGRhdGEuZXJyb3IgPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IGhhc1Rva2VucyA9ICEhZGF0YS50b2tlbnMgJiYgdHlwZW9mIGRhdGEudG9rZW5zID09PSAnb2JqZWN0JztcbiAgICByZXR1cm4gaGFzRXJyb3IgfHwgaGFzVG9rZW5zO1xuICB9XG59XG4iXX0=