tnx-shared 5.1.417 → 5.1.418

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.
@@ -7,6 +7,7 @@ import { FileTypeFlag } from '../../../models/file-type';
7
7
  export declare class FileObjectService extends BaseService {
8
8
  private _moduleConfigService;
9
9
  thumborEndpoint: string;
10
+ fileWithThumborEndpoint: string;
10
11
  constructor(http: HttpClient, injector: Injector, _moduleConfigService: ModuleConfigService);
11
12
  getFileUrlWithThumbor(fileId: any, width?: number, height?: number): string;
12
13
  getUrlImage(fileId: string): string;
@@ -27,5 +28,6 @@ export declare class FileObjectService extends BaseService {
27
28
  getScanFileUploadEndpoint(correlationId: string): string;
28
29
  getAcceptedExtensions(acceptFileTypes: FileTypeFlag): string;
29
30
  getAcceptedExtensionsArray(acceptFileTypes: FileTypeFlag): any[];
31
+ uploadWithByteArray(file: any): Promise<string>;
30
32
  }
31
33
  //# sourceMappingURL=file-object.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-object.service.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/file-explorer/services/file-object.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAmC,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE1F,qBAGa,iBAAkB,SAAQ,WAAW;IAG1C,OAAO,CAAC,oBAAoB;IAFhC,eAAe,SAAM;gBACT,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EACpC,oBAAoB,EAAE,mBAAmB;IAMrD,qBAAqB,CAAC,MAAM,KAAA,EAAE,KAAK,SAAI,EAAE,MAAM,SAAI;IAKnD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAInC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM;IAKvD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAKnD,YAAY;IAIZ,4BAA4B;IAI5B,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IA6BhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAcjC,WAAW,CAAC,aAAa,EAAE,MAAM;IAgCjC,cAAc,CAAC,QAAQ,EAAE,MAAM;IAe/B,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,KAAA;IAItC,0BAA0B,CAAC,QAAQ,KAAA;IAMnC,qBAAqB,CAAC,KAAK,KAAA;IAM3B,0BAA0B,CAAC,KAAK,KAAA;IAMhC,iBAAiB,CAAC,oBAAoB,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAM1E,oBAAoB,CAAC,mBAAmB,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;IAMvE,yBAAyB,CAAC,aAAa,EAAE,MAAM;IAK/C,qBAAqB,CAAC,eAAe,EAAE,YAAY;IAoBnD,0BAA0B,CAAC,eAAe,EAAE,YAAY;CAmB3D"}
1
+ {"version":3,"file":"file-object.service.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/file-explorer/services/file-object.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAmC,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE1F,qBAGa,iBAAkB,SAAQ,WAAW;IAI1C,OAAO,CAAC,oBAAoB;IAHhC,eAAe,SAAM;IACrB,uBAAuB,SAAM;gBACjB,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EACpC,oBAAoB,EAAE,mBAAmB;IAOrD,qBAAqB,CAAC,MAAM,KAAA,EAAE,KAAK,SAAI,EAAE,MAAM,SAAI;IAKnD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAInC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM;IAKvD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAKnD,YAAY;IAIZ,4BAA4B;IAI5B,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IA6BhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAcjC,WAAW,CAAC,aAAa,EAAE,MAAM;IAgCjC,cAAc,CAAC,QAAQ,EAAE,MAAM;IAe/B,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,KAAA;IAItC,0BAA0B,CAAC,QAAQ,KAAA;IAMnC,qBAAqB,CAAC,KAAK,KAAA;IAM3B,0BAA0B,CAAC,KAAK,KAAA;IAMhC,iBAAiB,CAAC,oBAAoB,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAM1E,oBAAoB,CAAC,mBAAmB,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;IAMvE,yBAAyB,CAAC,aAAa,EAAE,MAAM;IAK/C,qBAAqB,CAAC,eAAe,EAAE,YAAY;IAoBnD,0BAA0B,CAAC,eAAe,EAAE,YAAY;IAoBxD,mBAAmB,CAAC,IAAI,KAAA;CAM3B"}
@@ -3,6 +3,7 @@ import { ControlValueAccessor } from '@angular/forms';
3
3
  import { DeviceDetectorService } from 'ngx-device-detector';
4
4
  import { ComponentBase } from '../../classes/base/component-base';
5
5
  import { PopupSize } from '../../classes/form-schema';
6
+ import { FileObjectService } from '../file-explorer/services/file-object.service';
6
7
  import { NotifierService } from '../../services/notifier.service';
7
8
  import { EquationEditorComponent } from '../equation-editor/equation-editor.component';
8
9
  import { FileExplorerService } from '../file-explorer/services/file-explorer.service';
@@ -10,6 +11,7 @@ export declare class TnTinymceComponent extends ComponentBase implements OnInit,
10
11
  _deviceDetectorService: DeviceDetectorService;
11
12
  protected _notifierService: NotifierService;
12
13
  protected _fileService: FileExplorerService;
14
+ protected _fileObjectService: FileObjectService;
13
15
  equationForm: EquationEditorComponent;
14
16
  mode?: 'basic' | 'medium' | 'full' | 'simple';
15
17
  disabled: boolean;
@@ -37,7 +39,7 @@ export declare class TnTinymceComponent extends ComponentBase implements OnInit,
37
39
  equationFormModel: any;
38
40
  popupSize: PopupSize;
39
41
  showTemplate: boolean;
40
- constructor(injector: Injector, _deviceDetectorService: DeviceDetectorService, _notifierService: NotifierService, _fileService: FileExplorerService);
42
+ constructor(injector: Injector, _deviceDetectorService: DeviceDetectorService, _notifierService: NotifierService, _fileService: FileExplorerService, _fileObjectService: FileObjectService);
41
43
  ngOnInit(): void;
42
44
  ngAfterViewInit(): void;
43
45
  writeValue(obj: any): void;
@@ -51,12 +53,13 @@ export declare class TnTinymceComponent extends ComponentBase implements OnInit,
51
53
  onKeyDown(e: any, topic: string): void;
52
54
  handleOk(evt: any): void;
53
55
  focusTrap(event: any): void;
54
- handlePaste(e: any): Promise<unknown>;
56
+ handlePaste(types: any, pastedData: any, pastedRtfData: any, files: any): Promise<unknown>;
55
57
  openFileManager(): void;
56
58
  subscribeContentInsert(): void;
57
59
  ngOnDestroy(): void;
58
60
  handleRFCancel(evt: any): void;
59
61
  showChanged(evt: any): void;
60
62
  addTemplate(evt: any): void;
63
+ dataURItoBlob(dataURI: any, fileType: any): Blob;
61
64
  }
62
65
  //# sourceMappingURL=tn-tinymce.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tn-tinymce.component.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/tn-tinymce/tn-tinymce.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,YAAY,EAAc,QAAQ,EAAS,SAAS,EAAE,MAAM,EAAqB,MAAM,eAAe,CAAC;AAC1I,OAAO,EAAE,oBAAoB,EAAqB,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAItF,qBAaa,kBAAmB,SAAQ,aAAc,YAAW,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS;IAuCxG,sBAAsB,EAAE,qBAAqB;IACpD,SAAS,CAAC,gBAAgB,EAAE,eAAe;IAC3C,SAAS,CAAC,YAAY,EAAE,mBAAmB;IAvCX,YAAY,EAAE,uBAAuB,CAAC;IAEjE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAW;IACxD,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,MAAM,SAAO;IACb,KAAK,SAAM;IACX,WAAW,EAAE,MAAM,CAAM;IACzB,YAAY,MAAC;IAEZ,MAAM,oBAA2B;IACjC,OAAO,oBAA2B;IAClC,MAAM,oBAA2B;IACjC,SAAS,oBAA2B;IAE9C,KAAK,EAAE,GAAG,CAAM;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;IACpB,EAAE,SAAa;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,GAAG,CAAM;IAEvB,MAAM,UAAS;IACf,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAM;IACnB,SAAS,UAAS;IAClB,EAAE,UAAS;IACX,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,GAAG,CAAmB;IACzC,SAAS,YAGN;IACH,YAAY,EAAE,OAAO,CAAS;gBAG1B,QAAQ,EAAE,QAAQ,EACX,sBAAsB,EAAE,qBAAqB,EAC1C,gBAAgB,EAAE,eAAe,EACjC,YAAY,EAAE,mBAAmB;IAc/C,QAAQ;IAKR,eAAe,IAAI,IAAI;IAevB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAQ1B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAG/B,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAGhC,gBAAgB,CAAC,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAI5C,UAAU,CAAC,IAAI,KAAK;IAKpB,sBAAsB,CAAC,IAAI,KAAA;IA2L3B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAclE,UAAU;IAIV,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM;IAI/B,QAAQ,CAAC,GAAG,KAAA;IAKZ,SAAS,CAAC,KAAK,KAAA;IAMT,WAAW,CAAC,CAAC,KAAA;IAoEnB,eAAe;IAGf,sBAAsB;IAMtB,WAAW,IAAI,IAAI;IAInB,cAAc,CAAC,GAAG,KAAA;IAIlB,WAAW,CAAC,GAAG,KAAA;IAMf,WAAW,CAAC,GAAG,KAAA;CAIlB"}
1
+ {"version":3,"file":"tn-tinymce.component.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/tn-tinymce/tn-tinymce.component.ts"],"names":[],"mappings":"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"}
@@ -12,11 +12,13 @@ export class FileObjectService extends BaseService {
12
12
  super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.fileEndpoint}/${_moduleConfigService.getConfig().environment.apiVersion}/FileObject`);
13
13
  this._moduleConfigService = _moduleConfigService;
14
14
  this.thumborEndpoint = '';
15
+ this.fileWithThumborEndpoint = '';
15
16
  this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.fileEndpoint;
17
+ this.fileWithThumborEndpoint = _moduleConfigService.getConfig().environment.apiDomain.fileWithThumborEndpoint;
16
18
  this.thumborEndpoint = _moduleConfigService.getConfig().environment.apiDomain.thumbor;
17
19
  }
18
20
  getFileUrlWithThumbor(fileId, width = 0, height = 0) {
19
- const url = `${this.thumborEndpoint}/unsafe/${width}x${height}/smart/${this.endPoint}/v5/FileObject/public/${fileId}/download`;
21
+ const url = `${this.thumborEndpoint}/unsafe/${width}x${height}/smart/${this.fileWithThumborEndpoint}/v5/FileObject/public/${fileId}/download`;
20
22
  return url;
21
23
  }
22
24
  getUrlImage(fileId) {
@@ -183,6 +185,12 @@ export class FileObjectService extends BaseService {
183
185
  }
184
186
  return result;
185
187
  }
188
+ uploadWithByteArray(file) {
189
+ const formData = new FormData();
190
+ formData.append('files', file);
191
+ const url = `${this.serviceUri}/UploadWithByteArray`;
192
+ return this._http.post(url, formData, { responseType: 'text' }).toPromise();
193
+ }
186
194
  }
187
195
  FileObjectService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileObjectService_Factory() { return new FileObjectService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.ModuleConfigService)); }, token: FileObjectService, providedIn: "root" });
188
196
  FileObjectService.decorators = [
@@ -195,4 +203,4 @@ FileObjectService.ctorParameters = () => [
195
203
  { type: Injector },
196
204
  { type: ModuleConfigService }
197
205
  ];
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vYmplY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUsxRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQUU5QyxZQUFZLElBQWdCLEVBQUUsUUFBa0IsRUFDcEMsb0JBQXlDO1FBQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFEOUoseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUZyRCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUlqQixJQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxF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Q25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Ozs7WUE5TUosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFWUSxVQUFVO1lBQ0UsUUFBUTtZQUlwQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGSUxFX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25zQ29uc3QsIEZpbGVFeHRlbnNpb25zLCBGaWxlVHlwZUZsYWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsZS10eXBlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZU9iamVjdFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcbiAgICB0aHVtYm9yRW5kcG9pbnQgPSAnJztcclxuICAgIGNvbnN0cnVjdG9yKGh0dHA6IEh0dHBDbGllbnQsIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vRmlsZU9iamVjdGApO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50O1xyXG4gICAgICAgIHRoaXMudGh1bWJvckVuZHBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnRodW1ib3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZVVybFdpdGhUaHVtYm9yKGZpbGVJZCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy50aHVtYm9yRW5kcG9pbnR9L3Vuc2FmZS8ke3dpZHRofXgke2hlaWdodH0vc21hcnQvJHt0aGlzLmVuZFBvaW50fS92NS9GaWxlT2JqZWN0L3B1YmxpYy8ke2ZpbGVJZH0vZG93bmxvYWRgO1xyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXJsSW1hZ2UoZmlsZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9L3B1YmxpYy8ke2ZpbGVJZH0vRG93bmxvYWRgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlNdWx0aXBsZUZpbGUoaWRzRmlsZTogc3RyaW5nW10sIGlkRGVzRm9sZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NvcHlNdWx0aXBsZUZpbGU/cGFyZW50Rm9sZGVySWQ9JHtpZERlc0ZvbGRlcn1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgaWRzRmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29weUZpbGVCeUhhc2goaGFzaDogc3RyaW5nLCBwYXJlbnRGb2xkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Db3B5RmlsZUZyb21IYXNoP2hhc2g9JHtoYXNofSZwYXJlbnRGb2xkZXJJZD0ke3BhcmVudEZvbGRlcklkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVwbG9hZFVybCgpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRGaWxlSW50b0ZvbGRlcmA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXBsb2FkSW50b1NoYXJlZEZvbGRlclVybCgpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRGaWxlSW50b1NoYXJlZEZvbGRlcmA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTdXBwb3J0ZWRWaWV3T25saW5lKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xyXG5cclxuICAgICAgICBpZiAoKC8oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKGRvY3xkb2NtfGRvY3h8ZG90fGRvdG18ZG90eHxlcHVifGZvZHR8aHRtfGh0bWx8bWh0fG9kdHxvdHR8cGRmfHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKC8oY3N2fGZvZHN8b2RzfG90c3x4bHN8eGxzbXx4bHN4fHhsdHx4bHRtfHhsdHgpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKC8oZm9kcHxvZHB8b3RwfHBvdHxwb3RtfHBvdHh8cHBzfHBwc218cHBzeHxwcHR8cHB0bXxwcHR4KSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKG1wNHxtb3Z8YXZpfHdtdnx2b2J8cm18YXNmfDNncCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBhcnIgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZVR5cGUoZmlsZUV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24uaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5JTUFHRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhkb2N8ZG9jbXxkb2N4fGRvdHxkb3RtfGRvdHh8ZXB1Ynxmb2R0fGh0bXxodG1sfG1odHxvZHR8b3R0fHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5URVhUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKHBkZikkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLlBERjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhjc3Z8Zm9kc3xvZHN8b3RzfHhsc3x4bHNtfHhsc3h8eGx0fHhsdG18eGx0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLlNQUkVBRFNIRUVUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLlBSRVNFTlRBVElPTjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDR8bW92fGF2aXx3bXZ8dm9ifHJtfGFzZnwzZ3ApJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5WSURFTztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuQVVESU87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVHlwZUZpbGVLeVNvKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZmlsZUV4dGVuc2lvbiA9IHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSk7XHJcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24uaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoLyhwZGZ8ZG9jfGRvY3gpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNGaWxlVHlwZShmaWxlRXh0ZW5zaW9uOiBzdHJpbmcsIHR5cGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlVHlwZShmaWxlRXh0ZW5zaW9uKSA9PT0gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGaWxlSW50b1NoYXJlZEZvbGRlcihmb3JtRGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGZvcm1EYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlSW5TaGFyZWRGb2xkZXIobW9kZWwpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEZpbGVJblNoYXJlZEZvbGRlcmA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUZpbGVGcm9tU2hhcmVkRm9sZGVyKG1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVGaWxlRnJvbVNoYXJlZEZvbGRlcmA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNlcnZpY2VGaWxlKHNlcnZpY2VGaWxlT2JqZWN0RFRPOiBGb3JtRGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NyZWF0ZVNlcnZpY2VGaWxlYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBzZXJ2aWNlRmlsZU9iamVjdERUTyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2luZ2xlU2VydmljZUZpbGUoc2VydmljZVJlcXVlc3RNb2RlbDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2luZ2xlU2VydmljZUZpbGVgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHNlcnZpY2VSZXF1ZXN0TW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjYW5GaWxlVXBsb2FkRW5kcG9pbnQoY29ycmVsYXRpb25JZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZUNvZGV9L0NyZWF0ZVNjYW5uZWRGaWxlLyR7Y29ycmVsYXRpb25JZH1gO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRBY2NlcHRlZEV4dGVuc2lvbnMoYWNjZXB0RmlsZVR5cGVzOiBGaWxlVHlwZUZsYWcpIHtcclxuICAgICAgICBsZXQgYWNjZXB0ID0gJyc7XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuVklERU8pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5WSURFTyArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuSU1BR0UpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5JTUFHRSArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuRE9DKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuRE9DICsgJywnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5BVURJTykgIT09IDApIHtcclxuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkFVRElPICsgJywnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5DT01QUkVTU0VEKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuQ09NUFJFU1NFRCArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY2VwdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY2NlcHRlZEV4dGVuc2lvbnNBcnJheShhY2NlcHRGaWxlVHlwZXM6IEZpbGVUeXBlRmxhZykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLlZJREVPKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuVmlkZW9FeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuSU1BR0UpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5JbWFnZUV4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5ET0MpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5Eb2NFeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQVVESU8pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5BdWRpb0V4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5DT01QUkVTU0VEKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuQ29tcHJlc3NlZEV4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vYmplY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUsxRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQUc5QyxZQUFZLElBQWdCLEVBQUUsUUFBa0IsRUFDcEMsb0JBQXlDO1FBQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFEOUoseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUhyRCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFJekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUNwRixJQUFJLENBQUMs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QUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFJO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxzQkFBc0IsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoRixDQUFDOzs7O1lBdk5KLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBVlEsVUFBVTtZQUNFLFFBQVE7WUFJcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRklMRV9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXh0ZW5zaW9uc0NvbnN0LCBGaWxlRXh0ZW5zaW9ucywgRmlsZVR5cGVGbGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbGUtdHlwZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVPYmplY3RTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG4gICAgdGh1bWJvckVuZHBvaW50ID0gJyc7XHJcbiAgICBmaWxlV2l0aFRodW1ib3JFbmRwb2ludCA9ICcnO1xyXG4gICAgY29uc3RydWN0b3IoaHR0cDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9GaWxlT2JqZWN0YCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XHJcbiAgICAgICAgdGhpcy5maWxlV2l0aFRodW1ib3JFbmRwb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlV2l0aFRodW1ib3JFbmRwb2ludDtcclxuICAgICAgICB0aGlzLnRodW1ib3JFbmRwb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi50aHVtYm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVVcmxXaXRoVGh1bWJvcihmaWxlSWQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudGh1bWJvckVuZHBvaW50fS91bnNhZmUvJHt3aWR0aH14JHtoZWlnaHR9L3NtYXJ0LyR7dGhpcy5maWxlV2l0aFRodW1ib3JFbmRwb2ludH0vdjUvRmlsZU9iamVjdC9wdWJsaWMvJHtmaWxlSWR9L2Rvd25sb2FkYDtcclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVybEltYWdlKGZpbGVJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9wdWJsaWMvJHtmaWxlSWR9L0Rvd25sb2FkYDtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5TXVsdGlwbGVGaWxlKGlkc0ZpbGU6IHN0cmluZ1tdLCBpZERlc0ZvbGRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Db3B5TXVsdGlwbGVGaWxlP3BhcmVudEZvbGRlcklkPSR7aWREZXNGb2xkZXJ9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGlkc0ZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlQnlIYXNoKGhhc2g6IHN0cmluZywgcGFyZW50Rm9sZGVySWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weUZpbGVGcm9tSGFzaD9oYXNoPSR7aGFzaH0mcGFyZW50Rm9sZGVySWQ9JHtwYXJlbnRGb2xkZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcGxvYWRVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9Gb2xkZXJgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVwbG9hZEludG9TaGFyZWRGb2xkZXJVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU3VwcG9ydGVkVmlld09ubGluZShmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcclxuXHJcbiAgICAgICAgaWYgKCgvKGdpZnxqcGd8anBlZ3x0aWZmfHBuZykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoLyhkb2N8ZG9jbXxkb2N4fGRvdHxkb3RtfGRvdHh8ZXB1Ynxmb2R0fGh0bXxodG1sfG1odHxvZHR8b3R0fHBkZnxydGZ8dHh0fGRqdnV8eHBzKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKGNzdnxmb2RzfG9kc3xvdHN8eGxzfHhsc218eGxzeHx4bHR8eGx0bXx4bHR4KSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoLyhtcDR8bW92fGF2aXx3bXZ8dm9ifHJtfGFzZnwzZ3ApJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKC8obXAzfHdtYXx3YXZ8d212fG9nZykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgYXJyID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVUeXBlKGZpbGVFeHRlbnNpb246IHN0cmluZykge1xyXG4gICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBmaWxlRXh0ZW5zaW9uLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKC8oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuSU1BR0U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8oZG9jfGRvY218ZG9jeHxkb3R8ZG90bXxkb3R4fGVwdWJ8Zm9kdHxodG18aHRtbHxtaHR8b2R0fG90dHxydGZ8dHh0fGRqdnV8eHBzKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVEVYVDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhwZGYpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QREY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8oY3N2fGZvZHN8b2RzfG90c3x4bHN8eGxzbXx4bHN4fHhsdHx4bHRtfHhsdHgpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5TUFJFQURTSEVFVDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhmb2RwfG9kcHxvdHB8cG90fHBvdG18cG90eHxwcHN8cHBzbXxwcHN4fHBwdHxwcHRtfHBwdHgpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QUkVTRU5UQVRJT047XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8obXA0fG1vdnxhdml8d212fHZvYnxybXxhc2Z8M2dwKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVklERU87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8obXAzfHdtYXx3YXZ8d212fG9nZykkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLkFVRElPO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpc1R5cGVGaWxlS3lTbyhmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xyXG4gICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBmaWxlRXh0ZW5zaW9uLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKC8ocGRmfGRvY3xkb2N4KSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRmlsZVR5cGUoZmlsZUV4dGVuc2lvbjogc3RyaW5nLCB0eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZVR5cGUoZmlsZUV4dGVuc2lvbikgPT09IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRmlsZUludG9TaGFyZWRGb2xkZXIoZm9ybURhdGEpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZEZpbGVJbnRvU2hhcmVkRm9sZGVyYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBmb3JtRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZUluU2hhcmVkRm9sZGVyKG1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRGaWxlSW5TaGFyZWRGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlRnJvbVNoYXJlZEZvbGRlcihtb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlRmlsZUZyb21TaGFyZWRGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTZXJ2aWNlRmlsZShzZXJ2aWNlRmlsZU9iamVjdERUTzogRm9ybURhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DcmVhdGVTZXJ2aWNlRmlsZWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgc2VydmljZUZpbGVPYmplY3REVE8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpbmdsZVNlcnZpY2VGaWxlKHNlcnZpY2VSZXF1ZXN0TW9kZWw6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFNpbmdsZVNlcnZpY2VGaWxlYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBzZXJ2aWNlUmVxdWVzdE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY2FuRmlsZVVwbG9hZEVuZHBvaW50KGNvcnJlbGF0aW9uSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VDb2RlfS9DcmVhdGVTY2FubmVkRmlsZS8ke2NvcnJlbGF0aW9uSWR9YDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0QWNjZXB0ZWRFeHRlbnNpb25zKGFjY2VwdEZpbGVUeXBlczogRmlsZVR5cGVGbGFnKSB7XHJcbiAgICAgICAgbGV0IGFjY2VwdCA9ICcnO1xyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLlZJREVPKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuVklERU8gKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLklNQUdFKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuSU1BR0UgKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkRPQykgIT09IDApIHtcclxuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkRPQyArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQVVESU8pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5BVURJTyArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQ09NUFJFU1NFRCkgIT09IDApIHtcclxuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkNPTVBSRVNTRUQgKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2NlcHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWNjZXB0ZWRFeHRlbnNpb25zQXJyYXkoYWNjZXB0RmlsZVR5cGVzOiBGaWxlVHlwZUZsYWcpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5WSURFTykgIT09IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uRXh0ZW5zaW9uc0NvbnN0LlZpZGVvRXh0ZW5zaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLklNQUdFKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuSW1hZ2VFeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuRE9DKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuRG9jRXh0ZW5zaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkFVRElPKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuQXVkaW9FeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQ09NUFJFU1NFRCkgIT09IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uRXh0ZW5zaW9uc0NvbnN0LkNvbXByZXNzZWRFeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cGxvYWRXaXRoQnl0ZUFycmF5KGZpbGUpIHtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZXMnLCBmaWxlKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZFdpdGhCeXRlQXJyYXlgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBmb3JtRGF0YSwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxufVxyXG4iXX0=