surveysparrow-ionic-plugin 2.0.1 → 2.0.2-beta.2
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.
- package/dist/angular-ui/esm2022/spotchecks/SpotCheckComponent.mjs +80 -51
- package/dist/angular-ui/esm2022/spotchecks/SpotCheckEventListener.mjs +26 -0
- package/dist/angular-ui/esm2022/spotchecks/api.mjs +1 -1
- package/dist/angular-ui/esm2022/spotchecks/helpers.mjs +6 -3
- package/dist/angular-ui/esm2022/spotchecks/index.mjs +2 -1
- package/dist/angular-ui/fesm2022/angular-ui.mjs +109 -54
- package/dist/angular-ui/fesm2022/angular-ui.mjs.map +1 -1
- package/dist/angular-ui/spotchecks/SpotCheckComponent.d.ts +10 -4
- package/dist/angular-ui/spotchecks/SpotCheckEventListener.d.ts +16 -0
- package/dist/angular-ui/spotchecks/index.d.ts +1 -0
- package/dist/esm/angular-ui/lib/spotchecks/SpotCheckComponent.d.ts +10 -4
- package/dist/esm/angular-ui/lib/spotchecks/SpotCheckComponent.js +75 -48
- package/dist/esm/angular-ui/lib/spotchecks/SpotCheckComponent.js.map +1 -1
- package/dist/esm/angular-ui/lib/spotchecks/SpotCheckEventListener.d.ts +16 -0
- package/dist/esm/angular-ui/lib/spotchecks/SpotCheckEventListener.js +28 -0
- package/dist/esm/angular-ui/lib/spotchecks/SpotCheckEventListener.js.map +1 -0
- package/dist/esm/angular-ui/lib/spotchecks/api.js.map +1 -1
- package/dist/esm/angular-ui/lib/spotchecks/helpers.js +5 -2
- package/dist/esm/angular-ui/lib/spotchecks/helpers.js.map +1 -1
- package/dist/esm/angular-ui/lib/spotchecks/index.d.ts +1 -0
- package/dist/esm/angular-ui/lib/spotchecks/index.js +1 -0
- package/dist/esm/angular-ui/lib/spotchecks/index.js.map +1 -1
- package/dist/plugin.cjs.js +103 -44
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +103 -44
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/angular-ui/lib/spotchecks/SpotCheckComponent.ts +75 -44
- package/src/angular-ui/lib/spotchecks/SpotCheckEventListener.ts +50 -0
- package/src/angular-ui/lib/spotchecks/api.ts +2 -2
- package/src/angular-ui/lib/spotchecks/helpers.ts +6 -4
- package/src/angular-ui/lib/spotchecks/index.ts +3 -0
|
@@ -2,19 +2,24 @@ import { Component, Input, ViewChild, HostListener, } from '@angular/core';
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { closeSpotCheck, closeSpotCheckAndHandleSurveyEnd, getSpotcheckComponentCssStyles, handleSurveyEnd, ischatSurvey } from './helpers';
|
|
4
4
|
import { getSpotcheckStateService } from './helpers';
|
|
5
|
+
import { getSpotCheckEventListener } from './SpotCheckEventListener';
|
|
5
6
|
import axios from 'axios';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/platform-browser";
|
|
8
9
|
import * as i2 from "@angular/common";
|
|
9
10
|
export class WebViewComponent {
|
|
10
11
|
sanitizer;
|
|
12
|
+
ngZone;
|
|
13
|
+
cdr;
|
|
11
14
|
url = '';
|
|
12
15
|
webviewType = 'classic';
|
|
13
16
|
isMiniCard = false;
|
|
14
17
|
safeUrl = null;
|
|
15
18
|
iframe;
|
|
16
|
-
constructor(sanitizer) {
|
|
19
|
+
constructor(sanitizer, ngZone, cdr) {
|
|
17
20
|
this.sanitizer = sanitizer;
|
|
21
|
+
this.ngZone = ngZone;
|
|
22
|
+
this.cdr = cdr;
|
|
18
23
|
}
|
|
19
24
|
ngOnInit() {
|
|
20
25
|
if (this.url) {
|
|
@@ -41,48 +46,55 @@ export class WebViewComponent {
|
|
|
41
46
|
setupIframeLoadListener() {
|
|
42
47
|
const iframe = this.iframe.nativeElement;
|
|
43
48
|
iframe.addEventListener('load', () => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
this.ngZone.run(() => {
|
|
50
|
+
const stateService = getSpotcheckStateService();
|
|
51
|
+
if (this.webviewType === 'classic') {
|
|
52
|
+
stateService.setState({ isClassicLoading: false });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
stateService.setState({ isChatLoading: false });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
51
58
|
});
|
|
52
59
|
}
|
|
53
60
|
onMessage(event) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
this.ngZone.run(() => {
|
|
62
|
+
const stateService = getSpotcheckStateService();
|
|
63
|
+
const { data } = event;
|
|
64
|
+
switch (data.type) {
|
|
65
|
+
case 'slideInFrame':
|
|
66
|
+
if (data.mounted) {
|
|
67
|
+
stateService.setState({ isMounted: true });
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case 'resizeWindow':
|
|
71
|
+
if (data.size) {
|
|
72
|
+
stateService.setState({
|
|
73
|
+
currentQuestionHeight: data.size.height,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else if (data.isCloseButtonEnabled) {
|
|
77
|
+
stateService.setState({
|
|
78
|
+
isCloseButtonEnabled: data.isCloseButtonEnabled,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
case 'surveyCompleted':
|
|
83
|
+
closeSpotCheckAndHandleSurveyEnd().then(() => {
|
|
84
|
+
getSpotCheckEventListener().emit('surveyCompleted', data.response);
|
|
85
|
+
this.cdr.detectChanges();
|
|
71
86
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
default:
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
87
|
+
break;
|
|
88
|
+
case 'surveyLoadStarted':
|
|
89
|
+
getSpotCheckEventListener().emit('surveyLoadStarted', data.surveyDetails);
|
|
90
|
+
break;
|
|
91
|
+
default:
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
this.cdr.detectChanges();
|
|
95
|
+
});
|
|
84
96
|
}
|
|
85
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: WebViewComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
97
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: WebViewComponent, deps: [{ token: i1.DomSanitizer }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
86
98
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: WebViewComponent, isStandalone: true, selector: "WebViewComponent", inputs: { url: "url", webviewType: "webviewType", isMiniCard: "isMiniCard" }, host: { listeners: { "window:message": "onMessage($event)" } }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframeRef"], descendants: true }], ngImport: i0, template: `
|
|
87
99
|
<div style="overflow: hidden; height: 100%; border-radius: {{isMiniCard ? 12 : 0}}px; padding-left: {{isMiniCard ? 12 : 0}}px; padding-right: {{isMiniCard ? 12 : 0}}px; box-sizing: border-box;">
|
|
88
100
|
<iframe
|
|
@@ -115,7 +127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
115
127
|
standalone: true,
|
|
116
128
|
imports: [CommonModule],
|
|
117
129
|
}]
|
|
118
|
-
}], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { url: [{
|
|
130
|
+
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { url: [{
|
|
119
131
|
type: Input
|
|
120
132
|
}], webviewType: [{
|
|
121
133
|
type: Input
|
|
@@ -183,6 +195,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
183
195
|
type: Input
|
|
184
196
|
}] } });
|
|
185
197
|
export class CloseButtonComponent {
|
|
198
|
+
ngZone;
|
|
199
|
+
cdr;
|
|
186
200
|
size = 30;
|
|
187
201
|
strokeWidth = 1.2;
|
|
188
202
|
state;
|
|
@@ -191,13 +205,18 @@ export class CloseButtonComponent {
|
|
|
191
205
|
isVisible = false;
|
|
192
206
|
isMiniCard = false;
|
|
193
207
|
stroke = 'black';
|
|
194
|
-
constructor() {
|
|
208
|
+
constructor(ngZone, cdr) {
|
|
209
|
+
this.ngZone = ngZone;
|
|
210
|
+
this.cdr = cdr;
|
|
195
211
|
this.stateService = getSpotcheckStateService();
|
|
196
212
|
this.state = this.stateService.getState();
|
|
197
213
|
this.updateComponentState();
|
|
198
214
|
this.stateSubscription = this.stateService.state$.subscribe((newState) => {
|
|
199
|
-
this.
|
|
200
|
-
|
|
215
|
+
this.ngZone.run(() => {
|
|
216
|
+
this.state = newState;
|
|
217
|
+
this.updateComponentState();
|
|
218
|
+
this.cdr.detectChanges();
|
|
219
|
+
});
|
|
201
220
|
});
|
|
202
221
|
}
|
|
203
222
|
ngOnDestroy() {
|
|
@@ -220,8 +239,11 @@ export class CloseButtonComponent {
|
|
|
220
239
|
onClick = async () => {
|
|
221
240
|
await closeSpotCheck();
|
|
222
241
|
handleSurveyEnd();
|
|
242
|
+
this.ngZone.run(() => {
|
|
243
|
+
this.cdr.detectChanges();
|
|
244
|
+
});
|
|
223
245
|
};
|
|
224
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: CloseButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: CloseButtonComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
247
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: CloseButtonComponent, isStandalone: true, selector: "spotcheck-close-button", inputs: { size: "size", strokeWidth: "strokeWidth" }, ngImport: i0, template: `
|
|
226
248
|
<div style="position: absolute; top: -36px; right: 16px; z-index: 100001; cursor: pointer; background-color: white; border-radius: 50px;" (click)="onClick()" *ngIf="isVisible && isMiniCard">
|
|
227
249
|
<close-svg [size]="size" [stroke]="stroke" [strokeWidth]="strokeWidth" style="display: flex; align-items: center; justify-content: center;"/>
|
|
@@ -246,25 +268,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
246
268
|
standalone: true,
|
|
247
269
|
imports: [CommonModule, CloseSVGComponent],
|
|
248
270
|
}]
|
|
249
|
-
}], ctorParameters: () => [], propDecorators: { size: [{
|
|
271
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { size: [{
|
|
250
272
|
type: Input
|
|
251
273
|
}], strokeWidth: [{
|
|
252
274
|
type: Input
|
|
253
275
|
}] } });
|
|
254
276
|
export class SpotCheckComponent {
|
|
277
|
+
ngZone;
|
|
278
|
+
cdr;
|
|
255
279
|
state;
|
|
256
280
|
spotcheckStateService;
|
|
257
281
|
stateSubscription;
|
|
258
282
|
componentStyles = {};
|
|
259
283
|
avatarUrl = '';
|
|
260
|
-
constructor() {
|
|
284
|
+
constructor(ngZone, cdr) {
|
|
285
|
+
this.ngZone = ngZone;
|
|
286
|
+
this.cdr = cdr;
|
|
261
287
|
this.spotcheckStateService = getSpotcheckStateService();
|
|
262
288
|
this.state = this.spotcheckStateService.getState();
|
|
263
289
|
this.updateComponentStyles();
|
|
264
290
|
this.stateSubscription = this.spotcheckStateService.state$.subscribe((newState) => {
|
|
265
|
-
this.
|
|
266
|
-
|
|
267
|
-
|
|
291
|
+
this.ngZone.run(() => {
|
|
292
|
+
this.state = newState;
|
|
293
|
+
this.updateComponentStyles();
|
|
294
|
+
this.avatarUrl = this.state.avatarUrl || "https://static.surveysparrow.com/application/images/profile.png";
|
|
295
|
+
this.cdr.detectChanges();
|
|
296
|
+
});
|
|
268
297
|
});
|
|
269
298
|
}
|
|
270
299
|
ngOnInit() {
|
|
@@ -313,11 +342,11 @@ export class SpotCheckComponent {
|
|
|
313
342
|
console.log('Error initializing widget:', JSON.stringify(error));
|
|
314
343
|
}
|
|
315
344
|
};
|
|
316
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheckComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
345
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheckComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
317
346
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: SpotCheckComponent, isStandalone: true, selector: "SpotCheckComponent", ngImport: i0, template: "<div [ngStyle]=\"componentStyles.wrapperStyles\" class=\"safe-area\">\n <div [ngStyle]=\"componentStyles.styles\">\n <div style=\"position: relative; height: 100%;\">\n <spotcheck-close-button />\n \n <WebViewComponent\n *ngIf=\"state.classicUrl && state.classicUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'classic'\"\n [url]=\"state.classicUrl\"\n [webviewType]=\"'classic'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n \n <WebViewComponent\n *ngIf=\"state.chatUrl && state.chatUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'chat'\"\n [url]=\"state.chatUrl\"\n [webviewType]=\"'chat'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n\n <div *ngIf=\"state.spotChecksMode === 'miniCard' && state.avatarEnabled\">\n <div style=\"position: absolute; bottom: -66px; left: 16px; z-index: 100001;\">\n <img [src]=\"avatarUrl\" style=\"width: 56px; height: 56px; border-radius: 50px; background-color: white;\"/>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".safe-area{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: WebViewComponent, selector: "WebViewComponent", inputs: ["url", "webviewType", "isMiniCard"] }, { kind: "component", type: CloseButtonComponent, selector: "spotcheck-close-button", inputs: ["size", "strokeWidth"] }] });
|
|
318
347
|
}
|
|
319
348
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: SpotCheckComponent, decorators: [{
|
|
320
349
|
type: Component,
|
|
321
350
|
args: [{ selector: 'SpotCheckComponent', standalone: true, imports: [CommonModule, WebViewComponent, CloseButtonComponent], template: "<div [ngStyle]=\"componentStyles.wrapperStyles\" class=\"safe-area\">\n <div [ngStyle]=\"componentStyles.styles\">\n <div style=\"position: relative; height: 100%;\">\n <spotcheck-close-button />\n \n <WebViewComponent\n *ngIf=\"state.classicUrl && state.classicUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'classic'\"\n [url]=\"state.classicUrl\"\n [webviewType]=\"'classic'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n \n <WebViewComponent\n *ngIf=\"state.chatUrl && state.chatUrl.length > 0 && state.spotcheckURL.length > 0 && state.spotCheckType === 'chat'\"\n [url]=\"state.chatUrl\"\n [webviewType]=\"'chat'\"\n [isMiniCard]=\"state.spotChecksMode === 'miniCard'\"\n />\n\n <div *ngIf=\"state.spotChecksMode === 'miniCard' && state.avatarEnabled\">\n <div style=\"position: absolute; bottom: -66px; left: 16px; z-index: 100001;\">\n <img [src]=\"avatarUrl\" style=\"width: 56px; height: 56px; border-radius: 50px; background-color: white;\"/>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".safe-area{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);box-sizing:border-box}\n"] }]
|
|
322
|
-
}], ctorParameters: () => [] });
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BvdENoZWNrQ29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrQ29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrQ29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7Ozs7QUFtQjFCLE1BQU0sT0FBTyxnQkFBZ0I7SUFRUDtJQVBYLEdBQUcsR0FBVyxFQUFFLENBQUM7SUFDakIsV0FBVyxHQUF1QixTQUFTLENBQUM7SUFDNUMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVyQyxPQUFPLEdBQTJCLElBQUksQ0FBQztJQUNmLE1BQU0sQ0FBaUM7SUFFL0QsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUFHLENBQUM7SUFDL0MsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFlBQVksR0FBRyx3QkFBd0IsRUFBRSxD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QUNQLE1BQU0sVUFBVSxHQUFHLFVBQVU7b0JBQzNCLENBQUMsQ0FBQyxXQUFXLFVBQVUsb0JBQW9CO29CQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUVQLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7b0JBQ2xDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7b0JBQzNDLFVBQVUsRUFBRSxhQUFhO29CQUN6QixPQUFPLEVBQUUsVUFBVTtpQkFDcEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUMsQ0FBQzt1R0EzRVMsa0JBQWtCOzJGQUFsQixrQkFBa0IsOEVDMU4vQixpcENBMkJBLDRQRDZMWSxZQUFZLHdOQXBMWCxnQkFBZ0IsMkdBNEhoQixvQkFBb0I7OzJGQTBEcEIsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNFLG9CQUFvQixjQUdsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBPbkluaXQsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IGNsb3NlU3BvdENoZWNrLCBjbG9zZVNwb3RDaGVja0FuZEhhbmRsZVN1cnZleUVuZCwgZ2V0U3BvdGNoZWNrQ29tcG9uZW50Q3NzU3R5bGVzLCBoYW5kbGVTdXJ2ZXlFbmQsIGlzY2hhdFN1cnZleSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTcG90Y2hlY2tTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFNwb3RjaGVja1N0YXRlU2VydmljZSB9IGZyb20gJy4vU3BvdGNoZWNrU3RhdGVTZXJ2aWNlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1dlYlZpZXdDb21wb25lbnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyBoZWlnaHQ6IDEwMCU7IGJvcmRlci1yYWRpdXM6IHt7aXNNaW5pQ2FyZCA/IDEyIDogMH19cHg7IHBhZGRpbmctbGVmdDoge3tpc01pbmlDYXJkID8gMTIgOiAwfX1weDsgcGFkZGluZy1yaWdodDoge3tpc01pbmlDYXJkID8gMTIgOiAwfX1weDsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgYWxsb3c9XCJjYW1lcmE7IG1pY3JvcGhvbmU7IGdlb2xvY2F0aW9uOyBkaXNwbGF5LWNhcHR1cmU7IGF1dG9wbGF5OyBjbGlwYm9hcmQtcmVhZDsgY2xpcGJvYXJkLXdyaXRlO1wiXG4gICAgICAgICNpZnJhbWVSZWZcbiAgICAgICAgW3NyY109XCJzYWZlVXJsXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXJhZGl1czoge3tpc01pbmlDYXJkID8gMTIgOiAwfX1weDtcIlxuICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgPlxuICAgICAgPC9pZnJhbWU+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBXZWJWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgdXJsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgd2Vidmlld1R5cGU6ICdjbGFzc2ljJyB8ICdjaGF0JyA9ICdjbGFzc2ljJztcbiAgQElucHV0KCkgaXNNaW5pQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNhZmVVcmw6IFNhZmVSZXNvdXJjZVVybCB8IG51bGwgPSBudWxsO1xuICBAVmlld0NoaWxkKCdpZnJhbWVSZWYnKSBpZnJhbWUhOiBFbGVtZW50UmVmPEhUTUxJRnJhbWVFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy51cmwpIHtcbiAgICAgIHRoaXMuc2FmZVVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLnVybCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHN0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIGNvbnN0IHdlYlZpZXdSZWYgPSB0aGlzLmlmcmFtZS5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRoaXMud2Vidmlld1R5cGUgPT09ICdjbGFzc2ljJykge1xuICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgY2xhc3NpY1dlYlZpZXdSZWY6IHdlYlZpZXdSZWYsXG4gICAgICAgIGlzQ2xhc3NpY0xvYWRpbmc6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICAgIGNoYXRXZWJWaWV3UmVmOiB3ZWJWaWV3UmVmLFxuICAgICAgICBpc0NoYXRMb2FkaW5nOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldHVwSWZyYW1lTG9hZExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWZyYW1lTG9hZExpc3RlbmVyKCkge1xuICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICAgIGlmICh0aGlzLndlYnZpZXdUeXBlID09PSAnY2xhc3NpYycpIHtcbiAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgaXNDbGFzc2ljTG9hZGluZzogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoeyBpc0NoYXRMb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcbiAgb25NZXNzYWdlKGV2ZW50OiBNZXNzYWdlRXZlbnQpIHtcbiAgICBjb25zdCBzdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGV2ZW50O1xuICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICBjYXNlICdzbGlkZUluRnJhbWUnOlxuICAgICAgICBpZiAoZGF0YS5tb3VudGVkKSB7XG4gICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgaXNNb3VudGVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNpemVXaW5kb3cnOlxuICAgICAgICBpZiAoZGF0YS5zaXplKSB7XG4gICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbkhlaWdodDogZGF0YS5zaXplLmhlaWdodCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzQ2xvc2VCdXR0b25FbmFibGVkKSB7XG4gICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzQ2xvc2VCdXR0b25FbmFibGVkOiBkYXRhLmlzQ2xvc2VCdXR0b25FbmFibGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdXJ2ZXlDb21wbGV0ZWQnOlxuICAgICAgICBjbG9zZVNwb3RDaGVja0FuZEhhbmRsZVN1cnZleUVuZCgpO1xuICAgICAgICAvLyBzcG90Y2hlY2tzTGlzdGVuZXIuZW1pdFN1cnZleUNvbXBsZXRlZChkYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1cnZleUxvYWRTdGFydGVkJzpcbiAgICAgICAgLy8gc3BvdGNoZWNrc0xpc3RlbmVyLmVtaXRTdXJ2ZXlMb2FkU3RhcnRlZChkYXRhLnN1cnZleURldGFpbHMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsb3NlLXN2ZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHN2Z1xuICAgICAgW2F0dHIud2lkdGhdPVwic2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2l6ZVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDMyIDMyXCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIHhtbG5zPVwiaHR0cHM6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEwLjY2NjUgMTAuNjY3TDIxLjMzMzIgMjEuMzMzN00yMS4zMzMyIDEwLjY2N0wxMC42NjY1IDIxLjMzMzdcIlxuICAgICAgICBbYXR0ci5zdHJva2VdPVwic3Ryb2tlXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDbG9zZVNWR0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNpemU6IG51bWJlciA9IDMyO1xuICBASW5wdXQoKSBzdHJva2U6IHN0cmluZyA9ICcjOTE5MTkxJztcbiAgQElucHV0KCkgc3Ryb2tlV2lkdGg6IG51bWJlciA9IDEuNTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BvdGNoZWNrLWNsb3NlLWJ1dHRvbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0zNnB4OyByaWdodDogMTZweDsgei1pbmRleDogMTAwMDAxOyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA1MHB4O1wiIChjbGljayk9XCJvbkNsaWNrKClcIiAqbmdJZj1cImlzVmlzaWJsZSAmJiBpc01pbmlDYXJkXCI+XG4gICAgICAgIDxjbG9zZS1zdmcgW3NpemVdPVwic2l6ZVwiIFtzdHJva2VdPVwic3Ryb2tlXCIgW3N0cm9rZVdpZHRoXT1cInN0cm9rZVdpZHRoXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIi8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTZweDsgcmlnaHQ6IDE2cHg7IHotaW5kZXg6IDEwMDAwMTsgY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJvbkNsaWNrKClcIiAqbmdJZj1cImlzVmlzaWJsZSAmJiAhaXNNaW5pQ2FyZFwiPlxuICAgICAgICA8Y2xvc2Utc3ZnIFtzaXplXT1cInNpemVcIiBbc3Ryb2tlXT1cInN0cm9rZVwiIFtzdHJva2VXaWR0aF09XCJzdHJva2VXaWR0aFwiLz5cbiAgICAgIDwvZGl2PlxuICBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDbG9zZVNWR0NvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENsb3NlQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2l6ZTogbnVtYmVyID0gMzA7XG4gIEBJbnB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXIgPSAxLjI7XG4gIFxuICBzdGF0ZTogU3BvdGNoZWNrU3RhdGU7XG4gIHByaXZhdGUgc3RhdGVTZXJ2aWNlOiBTcG90Y2hlY2tTdGF0ZVNlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIFxuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNNaW5pQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdHJva2U6IHN0cmluZyA9ICdibGFjayc7XG4gIFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoKTtcblxuICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnN0YXRlU2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgKG5ld1N0YXRlOiBTcG90Y2hlY2tTdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaXNpYmxlID1cbiAgICAgIHRoaXMuc3RhdGUuaXNDbG9zZUJ1dHRvbkVuYWJsZWQgJiZcbiAgICAgICgodGhpcy5zdGF0ZS5jdXJyZW50UXVlc3Rpb25IZWlnaHQgPiAwICYmICF0aGlzLnN0YXRlLmlzRnVsbFNjcmVlbk1vZGUpIHx8XG4gICAgICAgICh0aGlzLnN0YXRlLmlzRnVsbFNjcmVlbk1vZGUgJiZcbiAgICAgICAgICAoKCF0aGlzLnN0YXRlLmlzQ2xhc3NpY0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3BvdENoZWNrVHlwZSA9PT0gJ2NsYXNzaWMnKSB8fFxuICAgICAgICAgICAgKCF0aGlzLnN0YXRlLmlzQ2hhdExvYWRpbmcgJiZcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zcG90Q2hlY2tUeXBlID09PSAnY2hhdCcpKSkpO1xuICAgIHRoaXMuaXNNaW5pQ2FyZCA9IHRoaXMuc3RhdGUuc3BvdENoZWNrc01vZGUgPT09ICdtaW5pQ2FyZCc7XG4gICAgdGhpcy5zdHJva2UgPSB0aGlzLmlzTWluaUNhcmQgPyAnYmxhY2snIDogdGhpcy5zdGF0ZS5jbG9zZUJ1dHRvblN0eWxlPy5bJ2N0YUJ1dHRvbiddIHx8ICdibGFjayc7XG4gIH1cblxuICBvbkNsaWNrID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGNsb3NlU3BvdENoZWNrKCk7XG4gICAgaGFuZGxlU3VydmV5RW5kKCk7XG4gIH07XG59XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU3BvdENoZWNrQ29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL1Nwb3RDaGVja0NvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vU3BvdENoZWNrQ29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXZWJWaWV3Q29tcG9uZW50LCBDbG9zZUJ1dHRvbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNwb3RDaGVja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgc3RhdGU6IFNwb3RjaGVja1N0YXRlO1xuICBwcml2YXRlIHNwb3RjaGVja1N0YXRlU2VydmljZTogU3BvdGNoZWNrU3RhdGVTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGNvbXBvbmVudFN0eWxlczogYW55ID0ge307XG4gIGF2YXRhclVybDogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zcG90Y2hlY2tTdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5zcG90Y2hlY2tTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFN0eWxlcygpO1xuXG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoXG4gICAgICAobmV3U3RhdGU6IFNwb3RjaGVja1N0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdHlsZXMoKTtcbiAgICAgICAgdGhpcy5hdmF0YXJVcmwgPSB0aGlzLnN0YXRlLmF2YXRhclVybCB8fCBcImh0dHBzOi8vc3RhdGljLnN1cnZleXNwYXJyb3cuY29tL2FwcGxpY2F0aW9uL2ltYWdlcy9wcm9maWxlLnBuZ1wiO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb21wb25lbnRTdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRTdHlsZXMgPSBnZXRTcG90Y2hlY2tDb21wb25lbnRDc3NTdHlsZXModGhpcy5zdGF0ZSk7XG4gIH1cblxuICBpbml0aWFsaXplQ29tcG9uZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkb21haW5OYW1lID0gdGhpcy5zdGF0ZS5kb21haW5OYW1lO1xuICAgICAgY29uc3QgdGFyZ2V0VG9rZW4gPSB0aGlzLnN0YXRlLnRhcmdldFRva2VuO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoXG4gICAgICAgIGBodHRwczovLyR7ZG9tYWluTmFtZX0vYXBpL2ludGVybmFsL3Nwb3RjaGVjay93aWRnZXQvJHt0YXJnZXRUb2tlbn0vaW5pdGBcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YTtcblxuICAgICAgaWYgKGRhdGEuZmlsdGVyZWRTcG90Q2hlY2tzICYmIGRhdGEuZmlsdGVyZWRTcG90Q2hlY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGNsYXNzaWNJZnJhbWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNoYXRJZnJhbWUgPSBmYWxzZTtcblxuICAgICAgICBkYXRhLmZpbHRlcmVkU3BvdENoZWNrcy5mb3JFYWNoKChzcG90Y2hlY2s6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNwb3RjaGVjay5hcHBlYXJhbmNlLm1vZGUgPT09ICdmdWxsU2NyZWVuJyAmJlxuICAgICAgICAgICAgaXNjaGF0U3VydmV5KHNwb3RjaGVjaz8uc3VydmV5Py5zdXJ2ZXlUeXBlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY2hhdElmcmFtZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYXNzaWNJZnJhbWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2xhc3NpY1VybCA9IGNsYXNzaWNJZnJhbWVcbiAgICAgICAgICA/IGBodHRwczovLyR7ZG9tYWluTmFtZX0vZXVpLXRlbXBsYXRlL2NsYXNzaWNgXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgY29uc3QgbmV3Q2hhdFVybCA9IGNoYXRJZnJhbWVcbiAgICAgICAgICA/IGBodHRwczovLyR7ZG9tYWluTmFtZX0vZXVpLXRlbXBsYXRlL2NoYXRgXG4gICAgICAgICAgOiAnJztcblxuICAgICAgICB0aGlzLnNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgZmlsdGVyZWRTcG90Q2hlY2tzOiBkYXRhLmZpbHRlcmVkU3BvdENoZWNrcyxcbiAgICAgICAgICBjbGFzc2ljVXJsOiBuZXdDbGFzc2ljVXJsLFxuICAgICAgICAgIGNoYXRVcmw6IG5ld0NoYXRVcmwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW5pdGlhbGl6aW5nIHdpZGdldDonLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn1cbiIsIjxkaXYgW25nU3R5bGVdPVwiY29tcG9uZW50U3R5bGVzLndyYXBwZXJTdHlsZXNcIiBjbGFzcz1cInNhZmUtYXJlYVwiPlxuICA8ZGl2IFtuZ1N0eWxlXT1cImNvbXBvbmVudFN0eWxlcy5zdHlsZXNcIj5cbiAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICA8c3BvdGNoZWNrLWNsb3NlLWJ1dHRvbiAvPlxuICBcbiAgICAgIDxXZWJWaWV3Q29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwic3RhdGUuY2xhc3NpY1VybCAmJiBzdGF0ZS5jbGFzc2ljVXJsLmxlbmd0aCA+IDAgJiYgc3RhdGUuc3BvdGNoZWNrVVJMLmxlbmd0aCA+IDAgJiYgc3RhdGUuc3BvdENoZWNrVHlwZSA9PT0gJ2NsYXNzaWMnXCJcbiAgICAgICAgW3VybF09XCJzdGF0ZS5jbGFzc2ljVXJsXCJcbiAgICAgICAgW3dlYnZpZXdUeXBlXT1cIidjbGFzc2ljJ1wiXG4gICAgICAgIFtpc01pbmlDYXJkXT1cInN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnXCJcbiAgICAgIC8+XG4gIFxuICAgICAgPFdlYlZpZXdDb21wb25lbnRcbiAgICAgICAgKm5nSWY9XCJzdGF0ZS5jaGF0VXJsICYmIHN0YXRlLmNoYXRVcmwubGVuZ3RoID4gMCAmJiBzdGF0ZS5zcG90Y2hlY2tVUkwubGVuZ3RoID4gMCAmJiBzdGF0ZS5zcG90Q2hlY2tUeXBlID09PSAnY2hhdCdcIlxuICAgICAgICBbdXJsXT1cInN0YXRlLmNoYXRVcmxcIlxuICAgICAgICBbd2Vidmlld1R5cGVdPVwiJ2NoYXQnXCJcbiAgICAgICAgW2lzTWluaUNhcmRdPVwic3RhdGUuc3BvdENoZWNrc01vZGUgPT09ICdtaW5pQ2FyZCdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiAqbmdJZj1cInN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnICYmIHN0YXRlLmF2YXRhckVuYWJsZWRcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAtNjZweDsgbGVmdDogMTZweDsgei1pbmRleDogMTAwMDAxO1wiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJhdmF0YXJVcmxcIiBzdHlsZT1cIndpZHRoOiA1NnB4OyBoZWlnaHQ6IDU2cHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
351
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }] });
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BvdENoZWNrQ29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrQ29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvU3BvdENoZWNrQ29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULFlBQVksR0FHYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7Ozs7QUFtQjFCLE1BQU0sT0FBTyxnQkFBZ0I7SUFTakI7SUFDQTtJQUNBO0lBVkQsR0FBRyxHQUFXLEVBQUUsQ0FBQztJQUNqQixXQUFXLEdBQXVCLFNBQVMsQ0FBQztJQUM1QyxVQUFVLEdBQVksS0FBSyxDQUFDO0lBRXJDLE9BQU8sR0FBMkIsSUFBSSxDQUFDO0lBQ2YsTUFBTSxDQUFpQztJQUUvRCxZQUNVLFNBQXVCLEVBQ3ZCLE1BQWMsRUFDZCxHQUFzQjtRQUZ0QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUM3QixDQUFDO0lBQ0osUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9B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Q0FBQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxhQUFhLEdBQUcsYUFBYTtvQkFDakMsQ0FBQyxDQUFDLFdBQVcsVUFBVSx1QkFBdUI7b0JBQzlDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsTUFBTSxVQUFVLEdBQUcsVUFBVTtvQkFDM0IsQ0FBQyxDQUFDLFdBQVcsVUFBVSxvQkFBb0I7b0JBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRVAsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztvQkFDbEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtvQkFDM0MsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLE9BQU8sRUFBRSxVQUFVO2lCQUNwQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO3VHQW5GUyxrQkFBa0I7MkZBQWxCLGtCQUFrQiw4RUNqUC9CLGlwQ0EyQkEsNFBEb05ZLFlBQVksd05BeE1YLGdCQUFnQiwyR0F1SWhCLG9CQUFvQjs7MkZBbUVwQixrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0Usb0JBQW9CLGNBR2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE9uSW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgTmdab25lLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgY2xvc2VTcG90Q2hlY2ssIGNsb3NlU3BvdENoZWNrQW5kSGFuZGxlU3VydmV5RW5kLCBnZXRTcG90Y2hlY2tDb21wb25lbnRDc3NTdHlsZXMsIGhhbmRsZVN1cnZleUVuZCwgaXNjaGF0U3VydmV5IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFNwb3RjaGVja1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgU3BvdGNoZWNrU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9TcG90Y2hlY2tTdGF0ZVNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3BvdENoZWNrRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4vU3BvdENoZWNrRXZlbnRMaXN0ZW5lcic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdXZWJWaWV3Q29tcG9uZW50JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlbjsgaGVpZ2h0OiAxMDAlOyBib3JkZXItcmFkaXVzOiB7e2lzTWluaUNhcmQgPyAxMiA6IDB9fXB4OyBwYWRkaW5nLWxlZnQ6IHt7aXNNaW5pQ2FyZCA/IDEyIDogMH19cHg7IHBhZGRpbmctcmlnaHQ6IHt7aXNNaW5pQ2FyZCA/IDEyIDogMH19cHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCI+XG4gICAgICA8aWZyYW1lXG4gICAgICAgIGFsbG93PVwiY2FtZXJhOyBtaWNyb3Bob25lOyBnZW9sb2NhdGlvbjsgZGlzcGxheS1jYXB0dXJlOyBhdXRvcGxheTsgY2xpcGJvYXJkLXJlYWQ7IGNsaXBib2FyZC13cml0ZTtcIlxuICAgICAgICAjaWZyYW1lUmVmXG4gICAgICAgIFtzcmNdPVwic2FmZVVybFwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgZGlzcGxheTogYmxvY2s7IGJvcmRlci1yYWRpdXM6IHt7aXNNaW5pQ2FyZCA/IDEyIDogMH19cHg7XCJcbiAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgID5cbiAgICAgIDwvaWZyYW1lPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgV2ViVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHVybDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHdlYnZpZXdUeXBlOiAnY2xhc3NpYycgfCAnY2hhdCcgPSAnY2xhc3NpYyc7XG4gIEBJbnB1dCgpIGlzTWluaUNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzYWZlVXJsOiBTYWZlUmVzb3VyY2VVcmwgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgnaWZyYW1lUmVmJykgaWZyYW1lITogRWxlbWVudFJlZjxIVE1MSUZyYW1lRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy51cmwpIHtcbiAgICAgIHRoaXMuc2FmZVVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLnVybCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHN0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIGNvbnN0IHdlYlZpZXdSZWYgPSB0aGlzLmlmcmFtZS5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRoaXMud2Vidmlld1R5cGUgPT09ICdjbGFzc2ljJykge1xuICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgY2xhc3NpY1dlYlZpZXdSZWY6IHdlYlZpZXdSZWYsXG4gICAgICAgIGlzQ2xhc3NpY0xvYWRpbmc6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICAgIGNoYXRXZWJWaWV3UmVmOiB3ZWJWaWV3UmVmLFxuICAgICAgICBpc0NoYXRMb2FkaW5nOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldHVwSWZyYW1lTG9hZExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWZyYW1lTG9hZExpc3RlbmVyKCkge1xuICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICAgICAgaWYgKHRoaXMud2Vidmlld1R5cGUgPT09ICdjbGFzc2ljJykge1xuICAgICAgICAgIHN0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGlzQ2xhc3NpY0xvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGlzQ2hhdExvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcbiAgb25NZXNzYWdlKGV2ZW50OiBNZXNzYWdlRXZlbnQpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVTZXJ2aWNlID0gZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCk7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGV2ZW50O1xuICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2xpZGVJbkZyYW1lJzpcbiAgICAgICAgICBpZiAoZGF0YS5tb3VudGVkKSB7XG4gICAgICAgICAgICBzdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoeyBpc01vdW50ZWQ6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Jlc2l6ZVdpbmRvdyc6XG4gICAgICAgICAgaWYgKGRhdGEuc2l6ZSkge1xuICAgICAgICAgICAgc3RhdGVTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uSGVpZ2h0OiBkYXRhLnNpemUuaGVpZ2h0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzQ2xvc2VCdXR0b25FbmFibGVkKSB7XG4gICAgICAgICAgICBzdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpc0Nsb3NlQnV0dG9uRW5hYmxlZDogZGF0YS5pc0Nsb3NlQnV0dG9uRW5hYmxlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzdXJ2ZXlDb21wbGV0ZWQnOlxuICAgICAgICAgIGNsb3NlU3BvdENoZWNrQW5kSGFuZGxlU3VydmV5RW5kKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBnZXRTcG90Q2hlY2tFdmVudExpc3RlbmVyKCkuZW1pdCgnc3VydmV5Q29tcGxldGVkJywgZGF0YS5yZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3VydmV5TG9hZFN0YXJ0ZWQnOlxuICAgICAgICAgIGdldFNwb3RDaGVja0V2ZW50TGlzdGVuZXIoKS5lbWl0KCdzdXJ2ZXlMb2FkU3RhcnRlZCcsIGRhdGEuc3VydmV5RGV0YWlscyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbG9zZS1zdmcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzdmdcbiAgICAgIFthdHRyLndpZHRoXT1cInNpemVcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInNpemVcIlxuICAgICAgdmlld0JveD1cIjAgMCAzMiAzMlwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICB4bWxucz1cImh0dHBzOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMC42NjY1IDEwLjY2N0wyMS4zMzMyIDIxLjMzMzdNMjEuMzMzMiAxMC42NjdMMTAuNjY2NSAyMS4zMzM3XCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInN0cm9rZVwiXG4gICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xvc2VTVkdDb21wb25lbnQge1xuICBASW5wdXQoKSBzaXplOiBudW1iZXIgPSAzMjtcbiAgQElucHV0KCkgc3Ryb2tlOiBzdHJpbmcgPSAnIzkxOTE5MSc7XG4gIEBJbnB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXIgPSAxLjU7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Nwb3RjaGVjay1jbG9zZS1idXR0b24nLFxuICB0ZW1wbGF0ZTogYFxuICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMzZweDsgcmlnaHQ6IDE2cHg7IHotaW5kZXg6IDEwMDAwMTsgY3Vyc29yOiBwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNTBweDtcIiAoY2xpY2spPVwib25DbGljaygpXCIgKm5nSWY9XCJpc1Zpc2libGUgJiYgaXNNaW5pQ2FyZFwiPlxuICAgICAgICA8Y2xvc2Utc3ZnIFtzaXplXT1cInNpemVcIiBbc3Ryb2tlXT1cInN0cm9rZVwiIFtzdHJva2VXaWR0aF09XCJzdHJva2VXaWR0aFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCIvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE2cHg7IHJpZ2h0OiAxNnB4OyB6LWluZGV4OiAxMDAwMDE7IGN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwib25DbGljaygpXCIgKm5nSWY9XCJpc1Zpc2libGUgJiYgIWlzTWluaUNhcmRcIj5cbiAgICAgICAgPGNsb3NlLXN2ZyBbc2l6ZV09XCJzaXplXCIgW3N0cm9rZV09XCJzdHJva2VcIiBbc3Ryb2tlV2lkdGhdPVwic3Ryb2tlV2lkdGhcIi8+XG4gICAgICA8L2Rpdj5cbiAgYCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2xvc2VTVkdDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBDbG9zZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHNpemU6IG51bWJlciA9IDMwO1xuICBASW5wdXQoKSBzdHJva2VXaWR0aDogbnVtYmVyID0gMS4yO1xuICBcbiAgc3RhdGU6IFNwb3RjaGVja1N0YXRlO1xuICBwcml2YXRlIHN0YXRlU2VydmljZTogU3BvdGNoZWNrU3RhdGVTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBcbiAgaXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTWluaUNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Ryb2tlOiBzdHJpbmcgPSAnYmxhY2snO1xuICBcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlID0gZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGVTZXJ2aWNlLmdldFN0YXRlKCk7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnRTdGF0ZSgpO1xuXG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLnN0YXRlJC5zdWJzY3JpYmUoXG4gICAgICAobmV3U3RhdGU6IFNwb3RjaGVja1N0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29tcG9uZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Zpc2libGUgPVxuICAgICAgdGhpcy5zdGF0ZS5pc0Nsb3NlQnV0dG9uRW5hYmxlZCAmJlxuICAgICAgKCh0aGlzLnN0YXRlLmN1cnJlbnRRdWVzdGlvbkhlaWdodCA+IDAgJiYgIXRoaXMuc3RhdGUuaXNGdWxsU2NyZWVuTW9kZSkgfHxcbiAgICAgICAgKHRoaXMuc3RhdGUuaXNGdWxsU2NyZWVuTW9kZSAmJlxuICAgICAgICAgICgoIXRoaXMuc3RhdGUuaXNDbGFzc2ljTG9hZGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5zcG90Q2hlY2tUeXBlID09PSAnY2xhc3NpYycpIHx8XG4gICAgICAgICAgICAoIXRoaXMuc3RhdGUuaXNDaGF0TG9hZGluZyAmJlxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNwb3RDaGVja1R5cGUgPT09ICdjaGF0JykpKSk7XG4gICAgdGhpcy5pc01pbmlDYXJkID0gdGhpcy5zdGF0ZS5zcG90Q2hlY2tzTW9kZSA9PT0gJ21pbmlDYXJkJztcbiAgICB0aGlzLnN0cm9rZSA9IHRoaXMuaXNNaW5pQ2FyZCA/ICdibGFjaycgOiB0aGlzLnN0YXRlLmNsb3NlQnV0dG9uU3R5bGU/LlsnY3RhQnV0dG9uJ10gfHwgJ2JsYWNrJztcbiAgfVxuXG4gIG9uQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgY2xvc2VTcG90Q2hlY2soKTtcbiAgICBoYW5kbGVTdXJ2ZXlFbmQoKTtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9O1xufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1Nwb3RDaGVja0NvbXBvbmVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9TcG90Q2hlY2tDb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL1Nwb3RDaGVja0NvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV2ViVmlld0NvbXBvbmVudCwgQ2xvc2VCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTcG90Q2hlY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRlOiBTcG90Y2hlY2tTdGF0ZTtcbiAgcHJpdmF0ZSBzcG90Y2hlY2tTdGF0ZVNlcnZpY2U6IFNwb3RjaGVja1N0YXRlU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBjb21wb25lbnRTdHlsZXM6IGFueSA9IHt9O1xuICBhdmF0YXJVcmw6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLnNwb3RjaGVja1N0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnNwb3RjaGVja1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3R5bGVzKCk7XG5cbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5zcG90Y2hlY2tTdGF0ZVNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZShcbiAgICAgIChuZXdTdGF0ZTogU3BvdGNoZWNrU3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdHlsZXMoKTtcbiAgICAgICAgICB0aGlzLmF2YXRhclVybCA9IHRoaXMuc3RhdGUuYXZhdGFyVXJsIHx8IFwiaHR0cHM6Ly9zdGF0aWMuc3VydmV5c3BhcnJvdy5jb20vYXBwbGljYXRpb24vaW1hZ2VzL3Byb2ZpbGUucG5nXCI7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29tcG9uZW50U3R5bGVzKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50U3R5bGVzID0gZ2V0U3BvdGNoZWNrQ29tcG9uZW50Q3NzU3R5bGVzKHRoaXMuc3RhdGUpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUNvbXBvbmVudCA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZG9tYWluTmFtZSA9IHRoaXMuc3RhdGUuZG9tYWluTmFtZTtcbiAgICAgIGNvbnN0IHRhcmdldFRva2VuID0gdGhpcy5zdGF0ZS50YXJnZXRUb2tlbjtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQ8YW55PihcbiAgICAgICAgYGh0dHBzOi8vJHtkb21haW5OYW1lfS9hcGkvaW50ZXJuYWwvc3BvdGNoZWNrL3dpZGdldC8ke3RhcmdldFRva2VufS9pbml0YFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhLmZpbHRlcmVkU3BvdENoZWNrcyAmJiBkYXRhLmZpbHRlcmVkU3BvdENoZWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCBjbGFzc2ljSWZyYW1lID0gZmFsc2U7XG4gICAgICAgIGxldCBjaGF0SWZyYW1lID0gZmFsc2U7XG5cbiAgICAgICAgZGF0YS5maWx0ZXJlZFNwb3RDaGVja3MuZm9yRWFjaCgoc3BvdGNoZWNrOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzcG90Y2hlY2suYXBwZWFyYW5jZS5tb2RlID09PSAnZnVsbFNjcmVlbicgJiZcbiAgICAgICAgICAgIGlzY2hhdFN1cnZleShzcG90Y2hlY2s/LnN1cnZleT8uc3VydmV5VHlwZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNoYXRJZnJhbWUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGFzc2ljSWZyYW1lID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5ld0NsYXNzaWNVcmwgPSBjbGFzc2ljSWZyYW1lXG4gICAgICAgICAgPyBgaHR0cHM6Ly8ke2RvbWFpbk5hbWV9L2V1aS10ZW1wbGF0ZS9jbGFzc2ljYFxuICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IG5ld0NoYXRVcmwgPSBjaGF0SWZyYW1lXG4gICAgICAgICAgPyBgaHR0cHM6Ly8ke2RvbWFpbk5hbWV9L2V1aS10ZW1wbGF0ZS9jaGF0YFxuICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgdGhpcy5zcG90Y2hlY2tTdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoe1xuICAgICAgICAgIGZpbHRlcmVkU3BvdENoZWNrczogZGF0YS5maWx0ZXJlZFNwb3RDaGVja3MsXG4gICAgICAgICAgY2xhc3NpY1VybDogbmV3Q2xhc3NpY1VybCxcbiAgICAgICAgICBjaGF0VXJsOiBuZXdDaGF0VXJsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluaXRpYWxpemluZyB3aWRnZXQ6JywgSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcbiAgICB9XG4gIH07XG59XG4iLCI8ZGl2IFtuZ1N0eWxlXT1cImNvbXBvbmVudFN0eWxlcy53cmFwcGVyU3R5bGVzXCIgY2xhc3M9XCJzYWZlLWFyZWFcIj5cbiAgPGRpdiBbbmdTdHlsZV09XCJjb21wb25lbnRTdHlsZXMuc3R5bGVzXCI+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAxMDAlO1wiPlxuICAgICAgPHNwb3RjaGVjay1jbG9zZS1idXR0b24gLz5cbiAgXG4gICAgICA8V2ViVmlld0NvbXBvbmVudFxuICAgICAgICAqbmdJZj1cInN0YXRlLmNsYXNzaWNVcmwgJiYgc3RhdGUuY2xhc3NpY1VybC5sZW5ndGggPiAwICYmIHN0YXRlLnNwb3RjaGVja1VSTC5sZW5ndGggPiAwICYmIHN0YXRlLnNwb3RDaGVja1R5cGUgPT09ICdjbGFzc2ljJ1wiXG4gICAgICAgIFt1cmxdPVwic3RhdGUuY2xhc3NpY1VybFwiXG4gICAgICAgIFt3ZWJ2aWV3VHlwZV09XCInY2xhc3NpYydcIlxuICAgICAgICBbaXNNaW5pQ2FyZF09XCJzdGF0ZS5zcG90Q2hlY2tzTW9kZSA9PT0gJ21pbmlDYXJkJ1wiXG4gICAgICAvPlxuICBcbiAgICAgIDxXZWJWaWV3Q29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwic3RhdGUuY2hhdFVybCAmJiBzdGF0ZS5jaGF0VXJsLmxlbmd0aCA+IDAgJiYgc3RhdGUuc3BvdGNoZWNrVVJMLmxlbmd0aCA+IDAgJiYgc3RhdGUuc3BvdENoZWNrVHlwZSA9PT0gJ2NoYXQnXCJcbiAgICAgICAgW3VybF09XCJzdGF0ZS5jaGF0VXJsXCJcbiAgICAgICAgW3dlYnZpZXdUeXBlXT1cIidjaGF0J1wiXG4gICAgICAgIFtpc01pbmlDYXJkXT1cInN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnXCJcbiAgICAgIC8+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdGF0ZS5zcG90Q2hlY2tzTW9kZSA9PT0gJ21pbmlDYXJkJyAmJiBzdGF0ZS5hdmF0YXJFbmFibGVkXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogLTY2cHg7IGxlZnQ6IDE2cHg7IHotaW5kZXg6IDEwMDAwMTtcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwiYXZhdGFyVXJsXCIgc3R5bGU9XCJ3aWR0aDogNTZweDsgaGVpZ2h0OiA1NnB4OyBib3JkZXItcmFkaXVzOiA1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
class SpotCheckEventListenerService {
|
|
3
|
+
eventSubject = new Subject();
|
|
4
|
+
event$ = this.eventSubject.asObservable();
|
|
5
|
+
emit(type, data) {
|
|
6
|
+
this.eventSubject.next({ type, data });
|
|
7
|
+
}
|
|
8
|
+
addListener(eventType, callback) {
|
|
9
|
+
return this.event$.subscribe((event) => {
|
|
10
|
+
if (event.type === eventType) {
|
|
11
|
+
callback(event.data);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
let globalInstance;
|
|
17
|
+
export const getSpotCheckEventListener = () => {
|
|
18
|
+
if (!globalInstance) {
|
|
19
|
+
globalInstance = new SpotCheckEventListenerService();
|
|
20
|
+
}
|
|
21
|
+
return globalInstance;
|
|
22
|
+
};
|
|
23
|
+
export const addSpotCheckListener = (eventType, callback) => {
|
|
24
|
+
return getSpotCheckEventListener().addListener(eventType, callback);
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BvdENoZWNrRXZlbnRMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmd1bGFyLXVpL2xpYi9zcG90Y2hlY2tzL1Nwb3RDaGVja0V2ZW50TGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWUvQixNQUFNLDZCQUE2QjtJQUN6QixZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7SUFDN0MsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEQsSUFBSSxDQUFDLElBQXdCLEVBQUUsSUFBVTtRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXLENBQ1QsU0FBNkIsRUFDN0IsUUFBdUI7UUFFdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUNyRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsSUFBSSxjQUE2QyxDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEdBQWtDLEVBQUU7SUFDM0UsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLGNBQWMsR0FBRyxJQUFJLDZCQUE2QixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQ2xDLFNBQTZCLEVBQzdCLFFBQXVCLEVBQ1QsRUFBRTtJQUNoQixPQUFPLHlCQUF5QixFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBTcG90Q2hlY2tFdmVudFR5cGUgPVxuICB8ICdzdXJ2ZXlDb21wbGV0ZWQnXG4gIHwgJ3N1cnZleURpc21pc3NlZCdcbiAgfCAnc3VydmV5TG9hZFN0YXJ0ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwb3RDaGVja0V2ZW50IHtcbiAgdHlwZTogU3BvdENoZWNrRXZlbnRUeXBlO1xuICBkYXRhPzogYW55O1xufVxuXG50eXBlIEV2ZW50Q2FsbGJhY2sgPSAoZGF0YT86IGFueSkgPT4gdm9pZDtcblxuY2xhc3MgU3BvdENoZWNrRXZlbnRMaXN0ZW5lclNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PFNwb3RDaGVja0V2ZW50PigpO1xuICBwcml2YXRlIGV2ZW50JCA9IHRoaXMuZXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGVtaXQodHlwZTogU3BvdENoZWNrRXZlbnRUeXBlLCBkYXRhPzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7IHR5cGUsIGRhdGEgfSk7XG4gIH1cblxuICBhZGRMaXN0ZW5lcihcbiAgICBldmVudFR5cGU6IFNwb3RDaGVja0V2ZW50VHlwZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja1xuICApOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50JC5zdWJzY3JpYmUoKGV2ZW50OiBTcG90Q2hlY2tFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IGV2ZW50VHlwZSkge1xuICAgICAgICBjYWxsYmFjayhldmVudC5kYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5sZXQgZ2xvYmFsSW5zdGFuY2U6IFNwb3RDaGVja0V2ZW50TGlzdGVuZXJTZXJ2aWNlO1xuXG5leHBvcnQgY29uc3QgZ2V0U3BvdENoZWNrRXZlbnRMaXN0ZW5lciA9ICgpOiBTcG90Q2hlY2tFdmVudExpc3RlbmVyU2VydmljZSA9PiB7XG4gIGlmICghZ2xvYmFsSW5zdGFuY2UpIHtcbiAgICBnbG9iYWxJbnN0YW5jZSA9IG5ldyBTcG90Q2hlY2tFdmVudExpc3RlbmVyU2VydmljZSgpO1xuICB9XG4gIHJldHVybiBnbG9iYWxJbnN0YW5jZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTcG90Q2hlY2tMaXN0ZW5lciA9IChcbiAgZXZlbnRUeXBlOiBTcG90Q2hlY2tFdmVudFR5cGUsXG4gIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrXG4pOiBTdWJzY3JpcHRpb24gPT4ge1xuICByZXR1cm4gZ2V0U3BvdENoZWNrRXZlbnRMaXN0ZW5lcigpLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spO1xufTtcbiJdfQ==
|
|
@@ -227,4 +227,4 @@ export const sendTrackEventRequest = async ({ screen, event }) => {
|
|
|
227
227
|
return { valid: false, error: error.message };
|
|
228
228
|
}
|
|
229
229
|
};
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFBRSxFQUMzQyxNQUFNLEVBQ04sT0FBTyxHQUNVLEVBQUUsRUFBRTtJQUNyQixJQUFJLENBQUM7UUFDSCxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixFQUFFLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQWUsQ0FBQztRQUN2RCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLEVBQXNCLENBQUM7UUFDNUUsSUFBSSxXQUFXLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQWlCLENBQUM7UUFFN0QsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1RixnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEYsV0FBVyxHQUFHLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkUsTUFBTSxJQUFJLEdBQUcsYUFBYSxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztRQUVELHFCQUFxQixDQUFDLFFBQVEsQ0FBQztZQUM3QixPQUFPO1lBQ1AscUJBQXFCLEVBQUU7Z0JBQ3JCLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVzthQUN0QjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9DLElBQUksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixlQUFlLEVBQUUsTUFBTSxLQUFLLEVBQUU7Z0JBQzlCLGdCQUFnQixFQUFFO29CQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQzFCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVTtpQkFDekI7Z0JBQ0QsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVE7YUFDM0Q7WUFDRCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO1NBQ25DLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxXQUFXLEtBQUssQ0FBQyxVQUFVLGtDQUFrQyxLQUFLLENBQUMsV0FBVyx3Q0FBd0MsQ0FBQztRQUNuSSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUM5QyxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMzQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBRW5DLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFFRCxJQUFJLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxhQUFhLENBQzdDLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxDQUFDLFVBQVUsRUFDaEIsT0FBTyxFQUNQLFNBQVMsQ0FDVixDQUFDO29CQUNGLElBQUksbUJBQW1CLEVBQUUsQ0FBQzt3QkFDeEIsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDcEIscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQzt3QkFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDekIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUM7b0JBQ25ELHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQy9FLElBQUksY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUMvQixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDO2dCQUVELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxhQUFhLENBQzdDLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxDQUFDLFVBQVUsRUFDaEIsT0FBTyxFQUNQLFNBQVMsQ0FDVixDQUFDO2dCQUNGLElBQUksbUJBQW1CLEVBQUUsQ0FBQztvQkFDeEIsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDdEIscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztvQkFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsY0FBYyxJQUFJLFlBQVksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3hFLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUMzQixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO29CQUU1RixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxRQUFRLEdBQVcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO29CQUVoRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3dCQUN4RCxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQzt3QkFDdkMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDckMsUUFBUSxHQUFHLENBQUMsQ0FBQzs0QkFDYixpQkFBaUIsR0FBRyxTQUFTLENBQUM7d0JBQ2hDLENBQUM7NkJBQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDOzRCQUNyQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUM1QyxJQUFJLFFBQVEsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQ0FDckIsUUFBUSxHQUFHLEtBQUssQ0FBQztnQ0FDakIsaUJBQWlCLEdBQUcsU0FBUyxDQUFDOzRCQUNoQyxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzlDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sYUFBYSxDQUM3QyxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLE9BQU8sRUFDUCxTQUFTLENBQ1YsQ0FBQzt3QkFDRixJQUFJLG1CQUFtQixFQUFFLENBQUM7NEJBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7d0JBQ3pCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUMsQ0FBQztBQUdGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW1CLEVBQUUsRUFBRTtJQUNoRixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwRCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztRQUNqQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3JELE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXRFLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQztvQkFFeEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxtQkFBbUI7NEJBQ2pCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQzt3QkFFNUQsSUFBSSxtQkFBbUIsS0FBSyxNQUFNLEVBQUUsQ0FBQzs0QkFDbkMsTUFBTSxPQUFPLEdBQUc7Z0NBQ2QsVUFBVSxFQUFFLE1BQU07Z0NBQ2xCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQ0FDMUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dDQUN0RCxPQUFPLEVBQUU7b0NBQ1AsVUFBVSxFQUFFLFFBQVE7b0NBQ3BCLGVBQWUsRUFBRSxNQUFNLEtBQUssRUFBRTtvQ0FDOUIsZ0JBQWdCLEVBQUU7d0NBQ2hCLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVzt3Q0FDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO3FDQUN6QjtvQ0FDRCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7b0NBQ3JDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUTtpQ0FDM0Q7Z0NBQ0QsV0FBVyxFQUFFLG1CQUFtQjtnQ0FDaEMsWUFBWSxFQUFFO29DQUNaLFdBQVcsRUFBRSxLQUFLO2lDQUNuQjtnQ0FDRCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0NBQ3RCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7NkJBQ3pDLENBQUM7NEJBRUYsTUFBTSxHQUFHLEdBQUcsV0FBVyxLQUFLLENBQUMsVUFBVSxrQ0FBa0MsS0FBSyxDQUFDLFdBQVcsZ0NBQWdDLENBQUM7NEJBRTNILElBQUksQ0FBQztnQ0FDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRTtvQ0FDOUMsT0FBTyxFQUFFO3dDQUNQLGNBQWMsRUFBRSxrQkFBa0I7cUNBQ25DO2lDQUNGLENBQUMsQ0FBQztnQ0FFSCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0NBQzVCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0NBQ25DLElBQUksWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQzt3Q0FDL0IsSUFBSSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7NENBQ3ZCLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxhQUFhLENBQzdDLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxDQUFDLFVBQVUsRUFDaEIsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsU0FBUyxDQUNoQixDQUFDOzRDQUVGLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnREFDeEIsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnREFDNUQsWUFBWSxHQUFHLElBQUksQ0FBQztnREFDcEIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzs0Q0FDekIsQ0FBQzt3Q0FDSCxDQUFDO29DQUNILENBQUM7b0NBRUQsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUM7d0NBQzdDLElBQUksWUFBWSxFQUFFLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQzs0Q0FDekMsTUFBTSxjQUFjLEdBQUcsWUFBWSxFQUFFLGNBQWMsQ0FBQzs0Q0FDcEQsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0RBQ2xDLFVBQVUsRUFBRSxjQUFjLEVBQUUsVUFBVSxJQUFJLENBQUM7NkNBQzVDLENBQUMsQ0FBQzs0Q0FFSCxJQUFJLGNBQWMsRUFBRSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0RBQ3hDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxDQUFDO29EQUNsQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLElBQUksQ0FBQztpREFDN0QsQ0FBQyxDQUFDOzRDQUNMLENBQUM7d0NBQ0gsQ0FBQzt3Q0FFRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sYUFBYSxDQUM3QyxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLFNBQVMsQ0FDaEIsQ0FBQzt3Q0FFRixJQUFJLG1CQUFtQixFQUFFLENBQUM7NENBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7d0NBQ3pCLENBQUM7b0NBQ0gsQ0FBQztvQ0FFRCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQ0FDbkQsQ0FBQztxQ0FBTSxDQUFDO29DQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dDQUM3RCxDQUFDOzRCQUNILENBQUM7NEJBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztnQ0FDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ2pDLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdlbmVyYXRlVHJhY2VJZCwgZ2V0T1MsIHNldEFwcGVhcmFuY2UgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZ2V0U3RvcmVkVVVJRCwgc2V0VVVJRCB9IGZyb20gJy4vc3RvcmFnZSc7XG5pbXBvcnQgeyBUcmFja1NjcmVlblByb3BzLCBVc2VyRGV0YWlscywgVmFyaWFibGVzLCBDdXN0b21Qcm9wZXJ0aWVzLCBUcmFja0V2ZW50UHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgY29uc3Qgc2VuZFRyYWNrU2NyZWVuUmVxdWVzdCA9IGFzeW5jICh7XG4gIHNjcmVlbixcbiAgb3B0aW9ucyxcbn06IFRyYWNrU2NyZWVuUHJvcHMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzcG90Y2hlY2tTdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHNwb3RjaGVja1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICAgIGxldCB2YXJpYWJsZXMgPSB7IC4uLm9sZFN0YXRlLnZhcmlhYmxlcyB9IGFzIFZhcmlhYmxlcztcbiAgICBsZXQgY3VzdG9tUHJvcGVydGllcyA9IHsgLi4ub2xkU3RhdGUuY3VzdG9tUHJvcGVydGllcyB9IGFzIEN1c3RvbVByb3BlcnRpZXM7XG4gICAgbGV0IHVzZXJEZXRhaWxzID0geyAuLi5vbGRTdGF0ZS51c2VyRGV0YWlscyB9IGFzIFVzZXJEZXRhaWxzOyAgICBcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudmFyaWFibGVzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMudmFyaWFibGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICB2YXJpYWJsZXMgPSB7IC4uLnZhcmlhYmxlcywgLi4ub3B0aW9ucy52YXJpYWJsZXMgfTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jdXN0b21Qcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuY3VzdG9tUHJvcGVydGllcykubGVuZ3RoID4gMCkge1xuICAgICAgY3VzdG9tUHJvcGVydGllcyA9IHsgLi4uY3VzdG9tUHJvcGVydGllcywgLi4ub3B0aW9ucy5jdXN0b21Qcm9wZXJ0aWVzIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudXNlckRldGFpbHMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy51c2VyRGV0YWlscykubGVuZ3RoID4gMCkge1xuICAgICAgdXNlckRldGFpbHMgPSB7IC4uLnVzZXJEZXRhaWxzLCAuLi5vcHRpb25zLnVzZXJEZXRhaWxzIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYWNlSWQgPSBvbGRTdGF0ZS50cmFjZUlkO1xuICAgIGlmICghdHJhY2VJZCkge1xuICAgICAgdHJhY2VJZCA9IGdlbmVyYXRlVHJhY2VJZCgpO1xuICAgIH1cblxuICAgIGlmICghdXNlckRldGFpbHMudXVpZCAmJiAhdXNlckRldGFpbHMuZW1haWwgJiYgIXVzZXJEZXRhaWxzLm1vYmlsZSkge1xuICAgICAgY29uc3QgdXVpZCA9IGdldFN0b3JlZFVVSUQoKTtcbiAgICAgIGlmICh1dWlkKSB7XG4gICAgICAgIHVzZXJEZXRhaWxzLnV1aWQgPSB1dWlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICB0cmFjZUlkLFxuICAgICAgc2NyZWVud2lzZVVzZXJEZXRhaWxzOiB7XG4gICAgICAgIFtzY3JlZW5dOiB1c2VyRGV0YWlsc1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YXRlID0gc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCk7XG4gICAgbGV0IHsgaXNTcG90UGFzc2VkLCBpc0NoZWNrc1Bhc3NlZCB9ID0gc3RhdGU7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIHNjcmVlbk5hbWU6IHNjcmVlbixcbiAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgdXNlckRldGFpbHM6IHVzZXJEZXRhaWxzLFxuICAgICAgdmlzaXRvcjoge1xuICAgICAgICBkZXZpY2VUeXBlOiAnTU9CSUxFJyxcbiAgICAgICAgb3BlcmF0aW5nU3lzdGVtOiBhd2FpdCBnZXRPUygpLFxuICAgICAgICBzY3JlZW5SZXNvbHV0aW9uOiB7XG4gICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50RGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB0aW1lem9uZTogSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lLFxuICAgICAgfSxcbiAgICAgIHRyYWNlSWQ6IHN0YXRlLnRyYWNlSWQsXG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjdXN0b21Qcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly8ke3N0YXRlLmRvbWFpbk5hbWV9L2FwaS9pbnRlcm5hbC9zcG90Y2hlY2svd2lkZ2V0LyR7c3RhdGUudGFyZ2V0VG9rZW59L3Byb3BlcnRpZXM/aXNTcG90Q2hlY2s9dHJ1ZSZzZGs9SU9OSUNgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCh1cmwsIHBheWxvYWQsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZihyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgY29uc3QgcmVzcG9uc2VKc29uID0gcmVzcG9uc2UuZGF0YTtcblxuICAgICAgaWYgKHJlc3BvbnNlSnNvbi51dWlkKSB7XG4gICAgICAgIHNldFVVSUQocmVzcG9uc2VKc29uLnV1aWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2VKc29uPy5zaG93KSB7XG4gICAgICAgIGlmIChyZXNwb25zZUpzb24/LnNob3cpIHtcbiAgICAgICAgICBjb25zdCBhcHBlYXJhbmNlX3Jlc3BvbnNlID0gYXdhaXQgc2V0QXBwZWFyYW5jZShcbiAgICAgICAgICAgIHJlc3BvbnNlSnNvbixcbiAgICAgICAgICAgIHNjcmVlbixcbiAgICAgICAgICAgIHN0YXRlLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgdmFyaWFibGVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoYXBwZWFyYW5jZV9yZXNwb25zZSkge1xuICAgICAgICAgICAgaXNTcG90UGFzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGlzU3BvdFBhc3NlZCB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBcbiAgICAgIGlmICghaXNTcG90UGFzc2VkICYmIHJlc3BvbnNlSnNvbj8uY2hlY2tQYXNzZWQpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlSnNvbi5jaGVja0NvbmRpdGlvbikge1xuICAgICAgICAgIGNvbnN0IGNoZWNrQ29uZGl0aW9uID0gcmVzcG9uc2VKc29uLmNoZWNrQ29uZGl0aW9uO1xuICAgICAgICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGFmdGVyRGVsYXk6IGNoZWNrQ29uZGl0aW9uLmFmdGVyRGVsYXkgfHwgMCB9KTtcbiAgICAgICAgICBpZiAoY2hlY2tDb25kaXRpb24uY3VzdG9tRXZlbnQpIHtcbiAgICAgICAgICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGN1c3RvbUV2ZW50c1Nwb3RDaGVja3M6IFtyZXNwb25zZUpzb25dIH0pO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBlYXJhbmNlX3Jlc3BvbnNlID0gYXdhaXQgc2V0QXBwZWFyYW5jZShcbiAgICAgICAgICByZXNwb25zZUpzb24sXG4gICAgICAgICAgc2NyZWVuLFxuICAgICAgICAgIHN0YXRlLmRvbWFpbk5hbWUsXG4gICAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgICB2YXJpYWJsZXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFwcGVhcmFuY2VfcmVzcG9uc2UpIHtcbiAgICAgICAgICBpc0NoZWNrc1Bhc3NlZCA9IHRydWU7XG4gICAgICAgICAgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgaXNDaGVja3NQYXNzZWQgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU3BvdFBhc3NlZCAmJiAhaXNDaGVja3NQYXNzZWQgJiYgcmVzcG9uc2VKc29uPy5tdWx0aVNob3cgIT0gbnVsbCkge1xuICAgICAgICBpZiAocmVzcG9uc2VKc29uLm11bHRpU2hvdykge1xuICAgICAgICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGN1c3RvbUV2ZW50c1Nwb3RDaGVja3M6IHJlc3BvbnNlSnNvbi5yZXN1bHRhbnRTcG90Q2hlY2sgfSk7XG5cbiAgICAgICAgICBsZXQgc2VsZWN0ZWRTcG90Q2hlY2sgPSB7fTtcbiAgICAgICAgICBsZXQgbWluRGVsYXk6IG51bWJlciA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc3BvdGNoZWNrIG9mIHJlc3BvbnNlSnNvbi5yZXN1bHRhbnRTcG90Q2hlY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrcyA9IHNwb3RjaGVjaz8uY2hlY2tzIHx8IHt9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoZWNrcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIG1pbkRlbGF5ID0gMDtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRTcG90Q2hlY2sgPSBzcG90Y2hlY2s7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoZWNrcy5hZnRlckRlbGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGVsYXkgPSBwYXJzZUZsb2F0KGNoZWNrcy5hZnRlckRlbGF5KTtcbiAgICAgICAgICAgICAgaWYgKG1pbkRlbGF5ID4gZGVsYXkpIHtcbiAgICAgICAgICAgICAgICBtaW5EZWxheSA9IGRlbGF5O1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3BvdENoZWNrID0gc3BvdGNoZWNrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGVjdGVkU3BvdENoZWNrKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzcG90Y2hlY2tTdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoeyBhZnRlckRlbGF5OiBtaW5EZWxheSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGVhcmFuY2VfcmVzcG9uc2UgPSBhd2FpdCBzZXRBcHBlYXJhbmNlKFxuICAgICAgICAgICAgICBzZWxlY3RlZFNwb3RDaGVjayxcbiAgICAgICAgICAgICAgc2NyZWVuLFxuICAgICAgICAgICAgICBzdGF0ZS5kb21haW5OYW1lLFxuICAgICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgICB2YXJpYWJsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYXBwZWFyYW5jZV9yZXNwb25zZSkge1xuICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2VKc29uPy5yZWFzb24udG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICB9XG59O1xuXG5cbmV4cG9ydCBjb25zdCBzZW5kVHJhY2tFdmVudFJlcXVlc3QgPSBhc3luYyAoeyBzY3JlZW4sIGV2ZW50IH06IFRyYWNrRXZlbnRQcm9wcykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludE1heCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpLmdldFN0YXRlKCk7XG4gICAgbGV0IHNlbGVjdGVkU3BvdENoZWNrSUQgPSBpbnRNYXg7XG4gICAgbGV0IHsgaXNTcG90UGFzc2VkIH0gPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUuY3VzdG9tRXZlbnRzU3BvdENoZWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBldmVudEtleXMgPSBPYmplY3Qua2V5cyhldmVudCk7XG4gICAgICBmb3IgKGNvbnN0IHNwb3RDaGVjayBvZiBzdGF0ZS5jdXN0b21FdmVudHNTcG90Q2hlY2tzKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrcyA9IHNwb3RDaGVjaz8uWydjaGVja3MnXSA/PyBzcG90Q2hlY2s/LlsnY2hlY2tDb25kaXRpb24nXTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBjaGVja3M/LmN1c3RvbUV2ZW50O1xuXG4gICAgICAgICAgaWYgKGV2ZW50S2V5cy5pbmNsdWRlcyhjdXN0b21FdmVudD8uZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRTcG90Q2hlY2tJRCA9XG4gICAgICAgICAgICAgIHNwb3RDaGVjaz8uWydpZCddID8/IHNwb3RDaGVjaz8uWydzcG90Q2hlY2tJZCddID8/IGludE1heDtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkU3BvdENoZWNrSUQgIT09IGludE1heCkge1xuICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgIHNjcmVlbk5hbWU6IHNjcmVlbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsczogc3RhdGUuc2NyZWVud2lzZVVzZXJEZXRhaWxzW3NjcmVlbl0gfHwge30sXG4gICAgICAgICAgICAgICAgdmlzaXRvcjoge1xuICAgICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogJ01PQklMRScsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRpbmdTeXN0ZW06IGF3YWl0IGdldE9TKCksXG4gICAgICAgICAgICAgICAgICBzY3JlZW5SZXNvbHV0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY3VycmVudERhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHRpbWV6b25lOiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzcG90Q2hlY2tJZDogc2VsZWN0ZWRTcG90Q2hlY2tJRCxcbiAgICAgICAgICAgICAgICBldmVudFRyaWdnZXI6IHtcbiAgICAgICAgICAgICAgICAgIGN1c3RvbUV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYWNlSWQ6IHN0YXRlLnRyYWNlSWQsXG4gICAgICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllczogc3RhdGUuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly8ke3N0YXRlLmRvbWFpbk5hbWV9L2FwaS9pbnRlcm5hbC9zcG90Y2hlY2svd2lkZ2V0LyR7c3RhdGUudGFyZ2V0VG9rZW59L2V2ZW50VHJpZ2dlcj9pc1Nwb3RDaGVjaz10cnVlYDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCh1cmwsIHBheWxvYWQsIHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlSnNvbiA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VKc29uPy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlSnNvbj8uc2hvdykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcGVhcmFuY2VfcmVzcG9uc2UgPSBhd2FpdCBzZXRBcHBlYXJhbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VKc29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZG9tYWluTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRyYWNlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YXJpYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGVhcmFuY2VfcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpLnNldFN0YXRlKHsgaXNTcG90UGFzc2VkOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNTcG90UGFzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICghaXNTcG90UGFzc2VkICYmIHJlc3BvbnNlSnNvbj8uZXZlbnRTaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUpzb24/LmNoZWNrQ29uZGl0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja0NvbmRpdGlvbiA9IHJlc3BvbnNlSnNvbj8uY2hlY2tDb25kaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCkuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJEZWxheTogY2hlY2tDb25kaXRpb24/LmFmdGVyRGVsYXkgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0NvbmRpdGlvbj8uY3VzdG9tRXZlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCkuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckRlbGF5OiBjaGVja0NvbmRpdGlvbj8uY3VzdG9tRXZlbnQ/LmRlbGF5SW5TZWNvbmRzID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBlYXJhbmNlX3Jlc3BvbnNlID0gYXdhaXQgc2V0QXBwZWFyYW5jZShcbiAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUpzb24sXG4gICAgICAgICAgICAgICAgICAgICAgc2NyZWVuLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUudHJhY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YXJpYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwZWFyYW5jZV9yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlSnNvbj8ucmVhc29uLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY2VpdmVkIHN0YXR1cyBjb2RlICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCcnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBlcnJvci5tZXNzYWdlIH07XG4gIH1cbn07Il19
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXItdWkvbGliL3Nwb3RjaGVja3MvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFBRSxFQUMzQyxNQUFNLEVBQ04sT0FBTyxHQUNVLEVBQUUsRUFBRTtJQUNyQixJQUFJLENBQUM7UUFDSCxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixFQUFFLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQWUsQ0FBQztRQUN2RCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLEVBQXNCLENBQUM7UUFDNUUsSUFBSSxXQUFXLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQWlCLENBQUM7UUFFN0QsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsSUFB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QUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdlbmVyYXRlVHJhY2VJZCwgZ2V0T1MsIHNldEFwcGVhcmFuY2UgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZ2V0U3RvcmVkVVVJRCwgc2V0VVVJRCB9IGZyb20gJy4vc3RvcmFnZSc7XG5pbXBvcnQgeyBUcmFja1NjcmVlblByb3BzLCBVc2VyRGV0YWlscywgVmFyaWFibGVzLCBDdXN0b21Qcm9wZXJ0aWVzLCBUcmFja0V2ZW50UHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgY29uc3Qgc2VuZFRyYWNrU2NyZWVuUmVxdWVzdCA9IGFzeW5jICh7XG4gIHNjcmVlbixcbiAgb3B0aW9ucyxcbn06IFRyYWNrU2NyZWVuUHJvcHMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzcG90Y2hlY2tTdGF0ZVNlcnZpY2UgPSBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKTtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHNwb3RjaGVja1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICAgIGxldCB2YXJpYWJsZXMgPSB7IC4uLm9sZFN0YXRlLnZhcmlhYmxlcyB9IGFzIFZhcmlhYmxlcztcbiAgICBsZXQgY3VzdG9tUHJvcGVydGllcyA9IHsgLi4ub2xkU3RhdGUuY3VzdG9tUHJvcGVydGllcyB9IGFzIEN1c3RvbVByb3BlcnRpZXM7XG4gICAgbGV0IHVzZXJEZXRhaWxzID0geyAuLi5vbGRTdGF0ZS51c2VyRGV0YWlscyB9IGFzIFVzZXJEZXRhaWxzOyAgICBcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudmFyaWFibGVzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMudmFyaWFibGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICB2YXJpYWJsZXMgPSB7IC4uLnZhcmlhYmxlcywgLi4ub3B0aW9ucy52YXJpYWJsZXMgfTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jdXN0b21Qcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuY3VzdG9tUHJvcGVydGllcykubGVuZ3RoID4gMCkge1xuICAgICAgY3VzdG9tUHJvcGVydGllcyA9IHsgLi4uY3VzdG9tUHJvcGVydGllcywgLi4ub3B0aW9ucy5jdXN0b21Qcm9wZXJ0aWVzIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudXNlckRldGFpbHMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy51c2VyRGV0YWlscykubGVuZ3RoID4gMCkge1xuICAgICAgdXNlckRldGFpbHMgPSB7IC4uLnVzZXJEZXRhaWxzLCAuLi5vcHRpb25zLnVzZXJEZXRhaWxzIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYWNlSWQgPSBvbGRTdGF0ZS50cmFjZUlkO1xuICAgIGlmICghdHJhY2VJZCkge1xuICAgICAgdHJhY2VJZCA9IGdlbmVyYXRlVHJhY2VJZCgpO1xuICAgIH1cblxuICAgIGlmICghdXNlckRldGFpbHMudXVpZCAmJiAhdXNlckRldGFpbHMuZW1haWwgJiYgIXVzZXJEZXRhaWxzLm1vYmlsZSkge1xuICAgICAgY29uc3QgdXVpZCA9IGdldFN0b3JlZFVVSUQoKTtcbiAgICAgIGlmICh1dWlkKSB7XG4gICAgICAgIHVzZXJEZXRhaWxzLnV1aWQgPSB1dWlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7XG4gICAgICB0cmFjZUlkLFxuICAgICAgc2NyZWVud2lzZVVzZXJEZXRhaWxzOiB7XG4gICAgICAgIFtzY3JlZW5dOiB1c2VyRGV0YWlsc1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YXRlID0gc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCk7XG4gICAgbGV0IHsgaXNTcG90UGFzc2VkLCBpc0NoZWNrc1Bhc3NlZCB9ID0gc3RhdGU7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIHNjcmVlbk5hbWU6IHNjcmVlbixcbiAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgdXNlckRldGFpbHM6IHVzZXJEZXRhaWxzLFxuICAgICAgdmlzaXRvcjoge1xuICAgICAgICBkZXZpY2VUeXBlOiAnTU9CSUxFJyxcbiAgICAgICAgb3BlcmF0aW5nU3lzdGVtOiBhd2FpdCBnZXRPUygpLFxuICAgICAgICBzY3JlZW5SZXNvbHV0aW9uOiB7XG4gICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50RGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB0aW1lem9uZTogSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lLFxuICAgICAgfSxcbiAgICAgIHRyYWNlSWQ6IHN0YXRlLnRyYWNlSWQsXG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjdXN0b21Qcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly8ke3N0YXRlLmRvbWFpbk5hbWV9L2FwaS9pbnRlcm5hbC9zcG90Y2hlY2svd2lkZ2V0LyR7c3RhdGUudGFyZ2V0VG9rZW59L3Byb3BlcnRpZXM/aXNTcG90Q2hlY2s9dHJ1ZSZzZGs9SU9OSUNgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxhbnk+KHVybCwgcGF5bG9hZCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICBjb25zdCByZXNwb25zZUpzb24gPSByZXNwb25zZS5kYXRhO1xuXG4gICAgICBpZiAocmVzcG9uc2VKc29uLnV1aWQpIHtcbiAgICAgICAgc2V0VVVJRChyZXNwb25zZUpzb24udXVpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZUpzb24/LnNob3cpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlSnNvbj8uc2hvdykge1xuICAgICAgICAgIGNvbnN0IGFwcGVhcmFuY2VfcmVzcG9uc2UgPSBhd2FpdCBzZXRBcHBlYXJhbmNlKFxuICAgICAgICAgICAgcmVzcG9uc2VKc29uLFxuICAgICAgICAgICAgc2NyZWVuLFxuICAgICAgICAgICAgc3RhdGUuZG9tYWluTmFtZSxcbiAgICAgICAgICAgIHRyYWNlSWQsXG4gICAgICAgICAgICB2YXJpYWJsZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhcHBlYXJhbmNlX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgICBpc1Nwb3RQYXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgaXNTcG90UGFzc2VkIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIFxuICAgICAgaWYgKCFpc1Nwb3RQYXNzZWQgJiYgcmVzcG9uc2VKc29uPy5jaGVja1Bhc3NlZCkge1xuICAgICAgICBpZiAocmVzcG9uc2VKc29uLmNoZWNrQ29uZGl0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tDb25kaXRpb24gPSByZXNwb25zZUpzb24uY2hlY2tDb25kaXRpb247XG4gICAgICAgICAgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgYWZ0ZXJEZWxheTogY2hlY2tDb25kaXRpb24uYWZ0ZXJEZWxheSB8fCAwIH0pO1xuICAgICAgICAgIGlmIChjaGVja0NvbmRpdGlvbi5jdXN0b21FdmVudCkge1xuICAgICAgICAgICAgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgY3VzdG9tRXZlbnRzU3BvdENoZWNrczogW3Jlc3BvbnNlSnNvbl0gfSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGVhcmFuY2VfcmVzcG9uc2UgPSBhd2FpdCBzZXRBcHBlYXJhbmNlKFxuICAgICAgICAgIHJlc3BvbnNlSnNvbixcbiAgICAgICAgICBzY3JlZW4sXG4gICAgICAgICAgc3RhdGUuZG9tYWluTmFtZSxcbiAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgIHZhcmlhYmxlc1xuICAgICAgICApO1xuICAgICAgICBpZiAoYXBwZWFyYW5jZV9yZXNwb25zZSkge1xuICAgICAgICAgIGlzQ2hlY2tzUGFzc2VkID0gdHJ1ZTtcbiAgICAgICAgICBzcG90Y2hlY2tTdGF0ZVNlcnZpY2Uuc2V0U3RhdGUoeyBpc0NoZWNrc1Bhc3NlZCB9KTtcbiAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTcG90UGFzc2VkICYmICFpc0NoZWNrc1Bhc3NlZCAmJiByZXNwb25zZUpzb24/Lm11bHRpU2hvdyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChyZXNwb25zZUpzb24ubXVsdGlTaG93KSB7XG4gICAgICAgICAgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnNldFN0YXRlKHsgY3VzdG9tRXZlbnRzU3BvdENoZWNrczogcmVzcG9uc2VKc29uLnJlc3VsdGFudFNwb3RDaGVjayB9KTtcblxuICAgICAgICAgIGxldCBzZWxlY3RlZFNwb3RDaGVjayA9IHt9O1xuICAgICAgICAgIGxldCBtaW5EZWxheTogbnVtYmVyID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBzcG90Y2hlY2sgb2YgcmVzcG9uc2VKc29uLnJlc3VsdGFudFNwb3RDaGVjaykge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tzID0gc3BvdGNoZWNrPy5jaGVja3MgfHwge307XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2hlY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbWluRGVsYXkgPSAwO1xuICAgICAgICAgICAgICBzZWxlY3RlZFNwb3RDaGVjayA9IHNwb3RjaGVjaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hlY2tzLmFmdGVyRGVsYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBkZWxheSA9IHBhcnNlRmxvYXQoY2hlY2tzLmFmdGVyRGVsYXkpO1xuICAgICAgICAgICAgICBpZiAobWluRGVsYXkgPiBkZWxheSkge1xuICAgICAgICAgICAgICAgIG1pbkRlbGF5ID0gZGVsYXk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTcG90Q2hlY2sgPSBzcG90Y2hlY2s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZWN0ZWRTcG90Q2hlY2spLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwb3RjaGVja1N0YXRlU2VydmljZS5zZXRTdGF0ZSh7IGFmdGVyRGVsYXk6IG1pbkRlbGF5IH0pO1xuICAgICAgICAgICAgY29uc3QgYXBwZWFyYW5jZV9yZXNwb25zZSA9IGF3YWl0IHNldEFwcGVhcmFuY2UoXG4gICAgICAgICAgICAgIHNlbGVjdGVkU3BvdENoZWNrLFxuICAgICAgICAgICAgICBzY3JlZW4sXG4gICAgICAgICAgICAgIHN0YXRlLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICAgIHRyYWNlSWQsXG4gICAgICAgICAgICAgIHZhcmlhYmxlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhcHBlYXJhbmNlX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZUpzb24/LnJlYXNvbi50b1N0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNlaXZlZCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBlcnJvci5tZXNzYWdlIH07XG4gIH1cbn07XG5cblxuZXhwb3J0IGNvbnN0IHNlbmRUcmFja0V2ZW50UmVxdWVzdCA9IGFzeW5jICh7IHNjcmVlbiwgZXZlbnQgfTogVHJhY2tFdmVudFByb3BzKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaW50TWF4ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCkuZ2V0U3RhdGUoKTtcbiAgICBsZXQgc2VsZWN0ZWRTcG90Q2hlY2tJRCA9IGludE1heDtcbiAgICBsZXQgeyBpc1Nwb3RQYXNzZWQgfSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZS5jdXN0b21FdmVudHNTcG90Q2hlY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV2ZW50S2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50KTtcbiAgICAgIGZvciAoY29uc3Qgc3BvdENoZWNrIG9mIHN0YXRlLmN1c3RvbUV2ZW50c1Nwb3RDaGVja3MpIHtcbiAgICAgICAgY29uc3QgY2hlY2tzID0gc3BvdENoZWNrPy5bJ2NoZWNrcyddID8/IHNwb3RDaGVjaz8uWydjaGVja0NvbmRpdGlvbiddO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IGNoZWNrcz8uY3VzdG9tRXZlbnQ7XG5cbiAgICAgICAgICBpZiAoZXZlbnRLZXlzLmluY2x1ZGVzKGN1c3RvbUV2ZW50Py5ldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFNwb3RDaGVja0lEID1cbiAgICAgICAgICAgICAgc3BvdENoZWNrPy5bJ2lkJ10gPz8gc3BvdENoZWNrPy5bJ3Nwb3RDaGVja0lkJ10gPz8gaW50TWF4O1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRTcG90Q2hlY2tJRCAhPT0gaW50TWF4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuTmFtZTogc2NyZWVuLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzOiBzdGF0ZS5zY3JlZW53aXNlVXNlckRldGFpbHNbc2NyZWVuXSB8fCB7fSxcbiAgICAgICAgICAgICAgICB2aXNpdG9yOiB7XG4gICAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiAnTU9CSUxFJyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdGluZ1N5c3RlbTogYXdhaXQgZ2V0T1MoKSxcbiAgICAgICAgICAgICAgICAgIHNjcmVlblJlc29sdXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgdGltZXpvbmU6IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwb3RDaGVja0lkOiBzZWxlY3RlZFNwb3RDaGVja0lELFxuICAgICAgICAgICAgICAgIGV2ZW50VHJpZ2dlcjoge1xuICAgICAgICAgICAgICAgICAgY3VzdG9tRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJhY2VJZDogc3RhdGUudHJhY2VJZCxcbiAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBzdGF0ZS5jdXN0b21Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHVybCA9IGBodHRwczovLyR7c3RhdGUuZG9tYWluTmFtZX0vYXBpL2ludGVybmFsL3Nwb3RjaGVjay93aWRnZXQvJHtzdGF0ZS50YXJnZXRUb2tlbn0vZXZlbnRUcmlnZ2VyP2lzU3BvdENoZWNrPXRydWVgO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PGFueT4odXJsLCBwYXlsb2FkLCB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUpzb24gPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlSnNvbj8uc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUpzb24/LnNob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBlYXJhbmNlX3Jlc3BvbnNlID0gYXdhaXQgc2V0QXBwZWFyYW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSnNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50cmFjZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBlYXJhbmNlX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UoKS5zZXRTdGF0ZSh7IGlzU3BvdFBhc3NlZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU3BvdFBhc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWlzU3BvdFBhc3NlZCAmJiByZXNwb25zZUpzb24/LmV2ZW50U2hvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VKc29uPy5jaGVja0NvbmRpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tDb25kaXRpb24gPSByZXNwb25zZUpzb24/LmNoZWNrQ29uZGl0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgIGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyRGVsYXk6IGNoZWNrQ29uZGl0aW9uPy5hZnRlckRlbGF5ID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tDb25kaXRpb24/LmN1c3RvbUV2ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJEZWxheTogY2hlY2tDb25kaXRpb24/LmN1c3RvbUV2ZW50Py5kZWxheUluU2Vjb25kcyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwZWFyYW5jZV9yZXNwb25zZSA9IGF3YWl0IHNldEFwcGVhcmFuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VKc29uLFxuICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5kb21haW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRyYWNlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGVhcmFuY2VfcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZUpzb24/LnJlYXNvbi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNlaXZlZCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICB9XG59OyJdfQ==
|