tnx-shared 5.8.1 → 5.8.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/assets/gulpfile.js +39 -39
- package/bundles/tnx-shared.umd.js +158 -94
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/components/file-explorer/services/file-object.service.d.ts +1 -0
- package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/esm2015/components/file-explorer/services/file-object.service.js +12 -2
- package/esm2015/components/tn-tinymce/tn-tinymce.component.js +44 -2
- package/fesm2015/tnx-shared.js +53 -1
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -30,5 +30,6 @@ export declare class FileObjectService extends BaseService {
|
|
|
30
30
|
getAcceptedExtensions(acceptFileTypes: FileTypeFlag): string;
|
|
31
31
|
getAcceptedExtensionsArray(acceptFileTypes: FileTypeFlag): any[];
|
|
32
32
|
uploadWithByteArray(file: any): Promise<string>;
|
|
33
|
+
UploadExternalImage(url: any): Promise<string>;
|
|
33
34
|
}
|
|
34
35
|
//# 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,
|
|
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,EAAkC,MAAM,sBAAsB,CAAC;AAClF,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;AAG1F,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,oBAAoB;IAIpB,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;IAOxB,mBAAmB,CAAC,GAAG,KAAA;CAW1B"}
|
|
@@ -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,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAGtF,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;IAC3C,SAAS,CAAC,kBAAkB,EAAE,iBAAiB;IAxCf,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,EACjC,kBAAkB,EAAE,iBAAiB;IAcnD,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;
|
|
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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
1
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
2
2
|
import { Injectable, Injector } from '@angular/core';
|
|
3
3
|
import { FILE_TYPES } from '../../../classes/constants';
|
|
4
4
|
import { BaseService } from '../../../services/base.service';
|
|
@@ -194,6 +194,16 @@ export class FileObjectService extends BaseService {
|
|
|
194
194
|
const url = `${this.serviceUri}/UploadWithByteArray`;
|
|
195
195
|
return this._http.post(url, formData, { responseType: 'text' }).toPromise();
|
|
196
196
|
}
|
|
197
|
+
UploadExternalImage(url) {
|
|
198
|
+
const options = {
|
|
199
|
+
headers: new HttpHeaders({
|
|
200
|
+
'Content-Type': 'application/json-patch+json',
|
|
201
|
+
}),
|
|
202
|
+
responseType: 'text',
|
|
203
|
+
};
|
|
204
|
+
const apiUrl = `${this.serviceUri}/UploadExternalImage`;
|
|
205
|
+
return this._http.post(apiUrl, { url: url }, options).toPromise();
|
|
206
|
+
}
|
|
197
207
|
}
|
|
198
208
|
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" });
|
|
199
209
|
FileObjectService.decorators = [
|
|
@@ -206,4 +216,4 @@ FileObjectService.ctorParameters = () => [
|
|
|
206
216
|
{ type: Injector },
|
|
207
217
|
{ type: ModuleConfigService }
|
|
208
218
|
];
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vYmplY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUsxRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQUc5QyxZQUFZLElBQWdCLEVBQUUsUUFBa0IsRUFDcEMsb0JBQXlDO1FBQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFEOUoseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUhyRCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFJekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUNwRixJQUFJLENBQUMs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QUNELElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFJO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxzQkFBc0IsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoRixDQUFDOzs7O1lBM05KLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBVlEsVUFBVTtZQUNFLFFBQVE7WUFJcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRklMRV9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXh0ZW5zaW9uc0NvbnN0LCBGaWxlRXh0ZW5zaW9ucywgRmlsZVR5cGVGbGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbGUtdHlwZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVPYmplY3RTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG4gICAgdGh1bWJvckVuZHBvaW50ID0gJyc7XHJcbiAgICBmaWxlV2l0aFRodW1ib3JFbmRwb2ludCA9ICcnO1xyXG4gICAgY29uc3RydWN0b3IoaHR0cDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9GaWxlT2JqZWN0YCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XHJcbiAgICAgICAgdGhpcy5maWxlV2l0aFRodW1ib3JFbmRwb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlV2l0aFRodW1ib3JFbmRwb2ludDtcclxuICAgICAgICB0aGlzLnRodW1ib3JFbmRwb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi50aHVtYm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVVcmxXaXRoVGh1bWJvcihmaWxlSWQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudGh1bWJvckVuZHBvaW50fS91bnNhZmUvJHt3aWR0aH14JHtoZWlnaHR9L3NtYXJ0LyR7dGhpcy5maWxlV2l0aFRodW1ib3JFbmRwb2ludH0vdjUvRmlsZU9iamVjdC9wdWJsaWMvJHtmaWxlSWR9L2Rvd25sb2FkYDtcclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVybEltYWdlKGZpbGVJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9wdWJsaWMvJHtmaWxlSWR9L0Rvd25sb2FkYDtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5TXVsdGlwbGVGaWxlKGlkc0ZpbGU6IHN0cmluZ1tdLCBpZERlc0ZvbGRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Db3B5TXVsdGlwbGVGaWxlP3BhcmVudEZvbGRlcklkPSR7aWREZXNGb2xkZXJ9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGlkc0ZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlQnlIYXNoKGhhc2g6IHN0cmluZywgcGFyZW50Rm9sZGVySWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weUZpbGVGcm9tSGFzaD9oYXNoPSR7aGFzaH0mcGFyZW50Rm9sZGVySWQ9JHtwYXJlbnRGb2xkZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcGxvYWRVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9Gb2xkZXJgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVwbG9hZE11bHRpcGxlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZEZpbGVzSW50b0ZvbGRlcmA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXBsb2FkSW50b1NoYXJlZEZvbGRlclVybCgpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRGaWxlSW50b1NoYXJlZEZvbGRlcmA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTdXBwb3J0ZWRWaWV3T25saW5lKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xyXG5cclxuICAgICAgICBpZiAoKC8oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKGRvY3xkb2NtfGRvY3h8ZG90fGRvdG18ZG90eHxlcHVifGZvZHR8aHRtfGh0bWx8bWh0fG9kdHxvdHR8cGRmfHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKC8oY3N2fGZvZHN8b2RzfG90c3x4bHN8eGxzbXx4bHN4fHhsdHx4bHRtfHhsdHgpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKC8oZm9kcHxvZHB8b3RwfHBvdHxwb3RtfHBvdHh8cHBzfHBwc218cHBzeHxwcHR8cHB0bXxwcHR4KSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKG1wNHxtb3Z8YXZpfHdtdnx2b2J8cm18YXNmfDNncCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBhcnIgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZVR5cGUoZmlsZUV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24uaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5JTUFHRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhkb2N8ZG9jbXxkb2N4fGRvdHxkb3RtfGRvdHh8ZXB1Ynxmb2R0fGh0bXxodG1sfG1odHxvZHR8b3R0fHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5URVhUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKHBkZikkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLlBERjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhjc3Z8Zm9kc3xvZHN8b3RzfHhsc3x4bHNtfHhsc3h8eGx0fHhsdG18eGx0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLlNQUkVBRFNIRUVUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLlBSRVNFTlRBVElPTjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDR8bW92fGF2aXx3bXZ8dm9ifHJtfGFzZnwzZ3ApJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5WSURFTztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuQVVESU87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVHlwZUZpbGVLeVNvKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZmlsZUV4dGVuc2lvbiA9IHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSk7XHJcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24uaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoLyhwZGZ8ZG9jfGRvY3gpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNGaWxlVHlwZShmaWxlRXh0ZW5zaW9uOiBzdHJpbmcsIHR5cGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlVHlwZShmaWxlRXh0ZW5zaW9uKSA9PT0gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGaWxlSW50b1NoYXJlZEZvbGRlcihmb3JtRGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGZvcm1EYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlSW5TaGFyZWRGb2xkZXIobW9kZWwpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEZpbGVJblNoYXJlZEZvbGRlcmA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUZpbGVGcm9tU2hhcmVkRm9sZGVyKG1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVGaWxlRnJvbVNoYXJlZEZvbGRlcmA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNlcnZpY2VGaWxlKHNlcnZpY2VGaWxlT2JqZWN0RFRPOiBGb3JtRGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NyZWF0ZVNlcnZpY2VGaWxlYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBzZXJ2aWNlRmlsZU9iamVjdERUTyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2luZ2xlU2VydmljZUZpbGUoc2VydmljZVJlcXVlc3RNb2RlbDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2luZ2xlU2VydmljZUZpbGVgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHNlcnZpY2VSZXF1ZXN0TW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjYW5GaWxlVXBsb2FkRW5kcG9pbnQoY29ycmVsYXRpb25JZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZUNvZGV9L0NyZWF0ZVNjYW5uZWRGaWxlLyR7Y29ycmVsYXRpb25JZH1gO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRBY2NlcHRlZEV4dGVuc2lvbnMoYWNjZXB0RmlsZVR5cGVzOiBGaWxlVHlwZUZsYWcpIHtcclxuICAgICAgICBsZXQgYWNjZXB0ID0gJyc7XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuVklERU8pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5WSURFTyArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuSU1BR0UpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5JTUFHRSArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuRE9DKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuRE9DICsgJywnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5BVURJTykgIT09IDApIHtcclxuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkFVRElPICsgJywnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5DT01QUkVTU0VEKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuQ09NUFJFU1NFRCArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjY2VwdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY2NlcHRlZEV4dGVuc2lvbnNBcnJheShhY2NlcHRGaWxlVHlwZXM6IEZpbGVUeXBlRmxhZykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLlZJREVPKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuVmlkZW9FeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuSU1BR0UpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5JbWFnZUV4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5ET0MpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5Eb2NFeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQVVESU8pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5BdWRpb0V4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5DT01QUkVTU0VEKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuQ29tcHJlc3NlZEV4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZFdpdGhCeXRlQXJyYXkoZmlsZSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlcycsIGZpbGUpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkV2l0aEJ5dGVBcnJheWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdCh1cmwsIGZvcm1EYXRhLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vYmplY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBTTFGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBRzlDLFlBQVksSUFBZ0IsRUFBRSxRQUFrQixFQUNwQyxvQkFBeUM7UUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxhQUFhLENBQUMsQ0FBQztRQUQ5Six5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBSHJELG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUl6QixJQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3BG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QVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBWFEsVUFBVTtZQUNFLFFBQVE7WUFJcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGSUxFX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25zQ29uc3QsIEZpbGVFeHRlbnNpb25zLCBGaWxlVHlwZUZsYWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsZS10eXBlJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlT2JqZWN0U2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuICAgIHRodW1ib3JFbmRwb2ludCA9ICcnO1xyXG4gICAgZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQgPSAnJztcclxuICAgIGNvbnN0cnVjdG9yKGh0dHA6IEh0dHBDbGllbnQsIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vRmlsZU9iamVjdGApO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50O1xyXG4gICAgICAgIHRoaXMuZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQ7XHJcbiAgICAgICAgdGhpcy50aHVtYm9yRW5kcG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4udGh1bWJvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlVXJsV2l0aFRodW1ib3IoZmlsZUlkLCB3aWR0aCA9IDAsIGhlaWdodCA9IDApIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnRodW1ib3JFbmRwb2ludH0vdW5zYWZlLyR7d2lkdGh9eCR7aGVpZ2h0fS9zbWFydC8ke3RoaXMuZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnR9L3Y1L0ZpbGVPYmplY3QvcHVibGljLyR7ZmlsZUlkfS9kb3dubG9hZGA7XHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcmxJbWFnZShmaWxlSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vcHVibGljLyR7ZmlsZUlkfS9Eb3dubG9hZGA7XHJcbiAgICB9XHJcblxyXG4gICAgY29weU11bHRpcGxlRmlsZShpZHNGaWxlOiBzdHJpbmdbXSwgaWREZXNGb2xkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weU11bHRpcGxlRmlsZT9wYXJlbnRGb2xkZXJJZD0ke2lkRGVzRm9sZGVyfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBpZHNGaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5RmlsZUJ5SGFzaChoYXNoOiBzdHJpbmcsIHBhcmVudEZvbGRlcklkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NvcHlGaWxlRnJvbUhhc2g/aGFzaD0ke2hhc2h9JnBhcmVudEZvbGRlcklkPSR7cGFyZW50Rm9sZGVySWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXBsb2FkVXJsKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZEZpbGVJbnRvRm9sZGVyYDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcGxvYWRNdWx0aXBsZVVybCgpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRGaWxlc0ludG9Gb2xkZXJgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVwbG9hZEludG9TaGFyZWRGb2xkZXJVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU3VwcG9ydGVkVmlld09ubGluZShmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcclxuXHJcbiAgICAgICAgaWYgKCgvKGdpZnxqcGd8anBlZ3x0aWZmfHBuZykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoLyhkb2N8ZG9jbXxkb2N4fGRvdHxkb3RtfGRvdHh8ZXB1Ynxmb2R0fGh0bXxodG1sfG1odHxvZHR8b3R0fHBkZnxydGZ8dHh0fGRqdnV8eHBzKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKGNzdnxmb2RzfG9kc3xvdHN8eGxzfHhsc218eGxzeHx4bHR8eGx0bXx4bHR4KSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoLyhtcDR8bW92fGF2aXx3bXZ8dm9ifHJtfGFzZnwzZ3ApJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKC8obXAzfHdtYXx3YXZ8d212fG9nZykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgYXJyID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVUeXBlKGZpbGVFeHRlbnNpb246IHN0cmluZykge1xyXG4gICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBmaWxlRXh0ZW5zaW9uLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKC8oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuSU1BR0U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8oZG9jfGRvY218ZG9jeHxkb3R8ZG90bXxkb3R4fGVwdWJ8Zm9kdHxodG18aHRtbHxtaHR8b2R0fG90dHxydGZ8dHh0fGRqdnV8eHBzKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVEVYVDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhwZGYpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QREY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8oY3N2fGZvZHN8b2RzfG90c3x4bHN8eGxzbXx4bHN4fHhsdHx4bHRtfHhsdHgpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5TUFJFQURTSEVFVDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgoLyhmb2RwfG9kcHxvdHB8cG90fHBvdG18cG90eHxwcHN8cHBzbXxwcHN4fHBwdHxwcHRtfHBwdHgpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QUkVTRU5UQVRJT047XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8obXA0fG1vdnxhdml8d212fHZvYnxybXxhc2Z8M2dwKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVklERU87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKC8obXAzfHdtYXx3YXZ8d212fG9nZykkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLkFVRElPO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpc1R5cGVGaWxlS3lTbyhmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xyXG4gICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlRXh0ZW5zaW9uLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBmaWxlRXh0ZW5zaW9uLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKC8ocGRmfGRvY3xkb2N4KSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRmlsZVR5cGUoZmlsZUV4dGVuc2lvbjogc3RyaW5nLCB0eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZVR5cGUoZmlsZUV4dGVuc2lvbikgPT09IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRmlsZUludG9TaGFyZWRGb2xkZXIoZm9ybURhdGEpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZEZpbGVJbnRvU2hhcmVkRm9sZGVyYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBmb3JtRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZUluU2hhcmVkRm9sZGVyKG1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRGaWxlSW5TaGFyZWRGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlRnJvbVNoYXJlZEZvbGRlcihtb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlRmlsZUZyb21TaGFyZWRGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTZXJ2aWNlRmlsZShzZXJ2aWNlRmlsZU9iamVjdERUTzogRm9ybURhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DcmVhdGVTZXJ2aWNlRmlsZWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgc2VydmljZUZpbGVPYmplY3REVE8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpbmdsZVNlcnZpY2VGaWxlKHNlcnZpY2VSZXF1ZXN0TW9kZWw6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFNpbmdsZVNlcnZpY2VGaWxlYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBzZXJ2aWNlUmVxdWVzdE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY2FuRmlsZVVwbG9hZEVuZHBvaW50KGNvcnJlbGF0aW9uSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VDb2RlfS9DcmVhdGVTY2FubmVkRmlsZS8ke2NvcnJlbGF0aW9uSWR9YDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0QWNjZXB0ZWRFeHRlbnNpb25zKGFjY2VwdEZpbGVUeXBlczogRmlsZVR5cGVGbGFnKSB7XHJcbiAgICAgICAgbGV0IGFjY2VwdCA9ICcnO1xyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLlZJREVPKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuVklERU8gKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLklNQUdFKSAhPT0gMCkge1xyXG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuSU1BR0UgKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkRPQykgIT09IDApIHtcclxuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkRPQyArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQVVESU8pICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5BVURJTyArICcsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQ09NUFJFU1NFRCkgIT09IDApIHtcclxuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkNPTVBSRVNTRUQgKyAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2NlcHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWNjZXB0ZWRFeHRlbnNpb25zQXJyYXkoYWNjZXB0RmlsZVR5cGVzOiBGaWxlVHlwZUZsYWcpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5WSURFTykgIT09IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uRXh0ZW5zaW9uc0NvbnN0LlZpZGVvRXh0ZW5zaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLklNQUdFKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuSW1hZ2VFeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuRE9DKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuRG9jRXh0ZW5zaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkFVRElPKSAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuQXVkaW9FeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuQ09NUFJFU1NFRCkgIT09IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uRXh0ZW5zaW9uc0NvbnN0LkNvbXByZXNzZWRFeHRlbnNpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cGxvYWRXaXRoQnl0ZUFycmF5KGZpbGUpIHtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZXMnLCBmaWxlKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZFdpdGhCeXRlQXJyYXlgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBmb3JtRGF0YSwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBVcGxvYWRFeHRlcm5hbEltYWdlKHVybCkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyBhcyBjb25zdCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRXh0ZXJuYWxJbWFnZWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QoYXBpVXJsLCB7IHVybDogdXJsIH0sIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -218,6 +218,7 @@ export class TnTinymceComponent extends ComponentBase {
|
|
|
218
218
|
'/assets/vendor/tinymce/custom.css'
|
|
219
219
|
],
|
|
220
220
|
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
|
|
221
|
+
contextmenu: 'link image imagetools table',
|
|
221
222
|
language: 'vi_VN',
|
|
222
223
|
statusbar: false,
|
|
223
224
|
relative_urls: false,
|
|
@@ -331,7 +332,48 @@ export class TnTinymceComponent extends ComponentBase {
|
|
|
331
332
|
};
|
|
332
333
|
if (types.indexOf('text/html') !== -1) {
|
|
333
334
|
if (pastedData.indexOf('<v:imagedata ') == -1) {
|
|
334
|
-
|
|
335
|
+
// Parse HTML
|
|
336
|
+
let docm = new DOMParser().parseFromString(pastedData, 'text/html');
|
|
337
|
+
let imgTags = docm.getElementsByTagName('img');
|
|
338
|
+
const imageUploaded = [];
|
|
339
|
+
for (let i = 0; i < imgTags.length; i++) {
|
|
340
|
+
let src = imgTags[i].src;
|
|
341
|
+
try {
|
|
342
|
+
if (src.startsWith('data:image/')) {
|
|
343
|
+
// Case base64
|
|
344
|
+
const imageType = src.substring(5, src.indexOf(';'));
|
|
345
|
+
const base64 = src.substring(src.indexOf('base64,') + 7);
|
|
346
|
+
const imageBlob = this.dataURItoBlob(base64, imageType);
|
|
347
|
+
const file = new File([imageBlob], `paste_${Date.now()}_${i}.png`, { type: imageType });
|
|
348
|
+
const uploadImage = yield this._fileObjectService.uploadWithByteArray(file);
|
|
349
|
+
if (typeof uploadImage == 'string') {
|
|
350
|
+
imgTags[i].src = this._fileObjectService.getUrlImage(uploadImage);
|
|
351
|
+
imageUploaded.push(imgTags[i].src);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
else if (src.startsWith('http')) {
|
|
355
|
+
// Case link ảnh từ web khác
|
|
356
|
+
try {
|
|
357
|
+
const uploadImage = yield this._fileObjectService.UploadExternalImage(src);
|
|
358
|
+
if (typeof uploadImage == 'string') {
|
|
359
|
+
imgTags[i].src = this._fileObjectService.getUrlImage(uploadImage);
|
|
360
|
+
imageUploaded.push(imgTags[i].src);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
console.error('Skip external image:', err);
|
|
365
|
+
imageUploaded.push(src);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
console.error('Paste image error:', err);
|
|
371
|
+
this._notifierService.showWarning('Upload ảnh khi dán nội dung thất bại');
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// Serialize lại HTML sau khi thay link ảnh
|
|
375
|
+
const result = new XMLSerializer().serializeToString(docm);
|
|
376
|
+
resolve(result);
|
|
335
377
|
}
|
|
336
378
|
else {
|
|
337
379
|
if (types.indexOf('text/rtf') !== -1) {
|
|
@@ -483,4 +525,4 @@ TnTinymceComponent.propDecorators = {
|
|
|
483
525
|
onBlur: [{ type: Output }],
|
|
484
526
|
onChanged: [{ type: Output }]
|
|
485
527
|
};
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tdGlueW1jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90bi10aW55bWNlL3RuLXRpbnltY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCdEYsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGFBQWE7SUFxQ2pELFlBQ0ksUUFBa0IsRUFDWCxzQkFBNkMsRUFD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aUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUEzQjRELFFBQVE7WUFHNUQscUJBQXFCO1lBT3JCLGVBQWU7WUFFZixtQkFBbUI7WUFIbkIsaUJBQWlCOzs7MkJBcUJyQixTQUFTLFNBQUMsdUJBQXVCO21CQUVqQyxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO29CQUNMLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLO3FCQUVMLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3dCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgRU1GSlMsIFJURkpTLCBXTUZKUyB9IGZyb20gJ3J0Zi5qcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVxdWF0aW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZXF1YXRpb24tZWRpdG9yL2VxdWF0aW9uLWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5kZWNsYXJlIGxldCB0aW55bWNlOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndG4tdGlueW1jZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG4tdGlueW1jZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90bi10aW55bWNlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUblRpbnltY2VDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRuVGlueW1jZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoRXF1YXRpb25FZGl0b3JDb21wb25lbnQpIGVxdWF0aW9uRm9ybTogRXF1YXRpb25FZGl0b3JDb21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KCkgbW9kZT86ICdiYXNpYycgfCAnbWVkaXVtJyB8ICdmdWxsJyB8ICdzaW1wbGUnID0gJ2Jhc2ljJztcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgaGVpZ2h0ID0gMjAwO1xyXG4gICAgQElucHV0KCkgZmllbGQgPSAnJztcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIGxhbmd1YWdlQ29kZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkga2V5ZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIG1vZGVsOiBhbnkgPSAnJztcclxuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcbiAgICBpZCA9IG5hbm9pZCg4KTtcclxuICAgIGVkaXRvcjogYW55O1xyXG4gICAgZGF0YUVxdWF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlzQWRkTmV3czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBtb2RlcyA9IHt9O1xyXG4gICAgaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICBpcyA9IGZhbHNlO1xyXG4gICAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgICBlcXVhdGlvbkZvcm1Nb2RlbDogYW55ID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgcG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgd2lkdGg6IDExMDAsXHJcbiAgICAgICAgaGVpZ2h0OiA2NTBcclxuICAgIH0pO1xyXG4gICAgc2hvd1RlbXBsYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgICAgIFJURkpTLmxvZ2dpbmdFbmFibGVkKGZhbHNlKTtcclxuICAgICAgICBXTUZKUy5sb2dnaW5nRW5hYmxlZChmYWxzZSk7XHJcbiAgICAgICAgRU1GSlMubG9nZ2luZ0VuYWJsZWQoZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBtID0gWydiYXNpYycsICdtZWRpdW0nLCAnZnVsbCcsICdzaW1wbGUnXTtcclxuICAgICAgICBtLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZXNbeF0gPSB0aGlzLmdldFRpbnlNY2VDb25maWdCeU1vZGUoeCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDb250ZW50SW5zZXJ0KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IG1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgbW9kZSA9ICdzaW1wbGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1vZGVzW21vZGVdO1xyXG4gICAgICAgIGNvbmZpZy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICBjb25maWcucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGlueW1jZS5pbml0KGNvbmZpZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG9iajtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRpYWxvZyhkYXRhID0ge30pIHtcclxuICAgICAgICB0aGlzLmVxdWF0aW9uRm9ybU1vZGVsLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXF1YXRpb25Gb3JtTW9kZWwuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGlueU1jZUNvbmZpZ0J5TW9kZShtb2RlKSB7XHJcbiAgICAgICAgY29uc3QgJHRoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdhZGROZXdzJywgZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBvcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuZWRpdG9yID0gZWRpdG9yO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaGVhZGVyID0gJ1Row6ptL0No4buNbiB0aW4gYsOgaSc7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignYWRkTmV3cycsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUaMOqbS9DaMOobiB0aW4gYsOgaSB2w6BvIG7hu5lpIGR1bmcnLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogJ25vbi1icmVha2luZycsXHJcbiAgICAgICAgICAgICAgICBvbkFjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCd0ZW1wbGF0ZScsIGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICR0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICAgICAgICAgICR0aGlzLmhlYWRlciA9ICdUaMOqbS9DaOG7jW4gdGVtcGxhdGUnO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuc2hvd1RlbXBsYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd0ZW1wbGF0ZScsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUZW1wbGF0ZScsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnbm9uLWJyZWFraW5nJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGlueW1jZS5QbHVnaW5NYW5hZ2VyLmFkZCgnZWRpdEZpbGVOZXcnLCBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EaWFsb2cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5lZGl0b3IgPSBlZGl0b3I7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnVGjDqm0vQ2jhu4luaCBz4butYSBmaWxlIGPDoSBuaMOibic7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignZWRpdEZpbGVOZXcnLCB7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnVGjDqm0vQ2jDqG4g4bqjbmgsIHZpZGVvLCBmaWxlIHbDoG8gbuG7mWkgZHVuZycsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnZHVwbGljYXRlJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tGdW5jID0gZWRpdG9yID0+IHtcclxuICAgICAgICAgICAgJHRoaXMuZWRpdG9yID0gZWRpdG9yO1xyXG4gICAgICAgICAgICBpZiAoJHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRNb2RlKCdyZWFkb25seScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVkQm9keSA9IGpRdWVyeShlZGl0b3IuaWZyYW1lRWxlbWVudCkuY29udGVudHMoKS5maW5kKCdib2R5Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckhvbGRlciA9IGVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghJHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgZWRCb2R5LmFkZENsYXNzKCdtb2JpbGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWRCb2R5Lm9uKCdibHVyJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JIb2xkZXIuY2xhc3NMaXN0LnJlbW92ZSgndGlueW1jZS1mb2N1cycpO1xyXG4gICAgICAgICAgICB9KS5vbignZm9jdXMnLCBlID0+IHtcclxuICAgICAgICAgICAgICAgIGVkaXRvckhvbGRlci5jbGFzc0xpc3QuYWRkKCd0aW55bWNlLWZvY3VzJyk7XHJcbiAgICAgICAgICAgIH0pLm9uKCdwYXN0ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoKCh0eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QpICYmIHR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKHR5cGVzLmluZGV4T2YgJiYgKHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpICE9PSAtMSkgfHwgdHlwZXMuaW5kZXhPZignRmlsZXMnKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcgdGnhur9uIGjDoG5oIHjhu60gbMO9IG7hu5lpIGR1bmcsIHZ1aSBsw7JuZyBjaOG7nSB0cm9uZyBnacOieSBsw6F0IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZmlsZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhc3RlZERhdGEgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFzdGVkUnRmRGF0YSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0ICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzIGluc3RhbmNlb2YgRE9NU3RyaW5nTGlzdCkgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuY29udGFpbnMoJ3RleHQvcnRmJykpIHx8IChlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5pbmRleE9mICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YoJ3RleHQvcnRmJykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkUnRmRGF0YSA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcnRmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmhhbmRsZVBhc3RlKHR5cGVzLCBwYXN0ZWREYXRhLCBwYXN0ZWRSdGZEYXRhLCBmaWxlcykudGhlbigoY29udGVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RpbWUgdG8gcnVuIGhhbmRsZVBhc3RlIGlzICcgKyAoZW5kLmdldFRpbWUoKSAtIGJlZ2luLmdldFRpbWUoKSkgKyAnbXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvPCFcXFtpZltcXHNcXFNdKj8+L2dtLCAnJykucmVwbGFjZSgvPCFcXFtlbmRpZltcXHNcXFNdKj8+L2dtLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9ICR0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFzdXBwb3J0TGlzdHNdPicsICc8IVtlbmRpZl0+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9ICR0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFtc0VxdWF0aW9uXT4nLCAnPCFbZW5kaWZdPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5vbigna2V5ZG93bicsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMub25LZXlEb3duKGUsIENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0NUUkxfUyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLndoaWNoID09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub25LZXlEb3duKGUsIENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5vbignZGJsY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2ltZycgJiYgZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsYXRleCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub3BlbkRpYWxvZyh7IGNvbnRlbnQ6IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0JyksIHN0eWxlOiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyksIGhlaWdodDogZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlZGl0b3Iub24oJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaGFuZGxlQmx1cigpO1xyXG4gICAgICAgICAgICB9KS5vbignY2hhbmdlJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuZ2V0Q29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMub25DaGFuZ2UoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5vbkNoYW5nZWQuZW1pdChjb250ZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgkdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnIycgKyAkdGhpcy5pZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAkdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgIGNvbnRlbnRfY3NzOiBbXHJcbiAgICAgICAgICAgICAgICAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZS9jdXN0b20uY3NzJ1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBpbWFnZXRvb2xzX3Rvb2xiYXI6ICdyb3RhdGVsZWZ0IHJvdGF0ZXJpZ2h0IHwgZmxpcHYgZmxpcGggfCBlZGl0aW1hZ2UgaW1hZ2VvcHRpb25zJyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICd2aV9WTicsXHJcbiAgICAgICAgICAgIHN0YXR1c2JhcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbGF0aXZlX3VybHM6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb252ZXJ0X3VybHM6IGZhbHNlLFxyXG4gICAgICAgICAgICB0YWJmb2N1c19lbGVtZW50czogJzpwcmV2LDpuZXh0JyxcclxuICAgICAgICAgICAgaW5pdF9pbnN0YW5jZV9jYWxsYmFjazogY2FsbGJhY2tGdW5jLFxyXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK0UnLCAnQ2FuR2l1YScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlDZW50ZXInLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnY3RybCtMJywgJ0NhblRyYWknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5TGVmdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK1InLCAnQ2FuUGhhaScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlSaWdodCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK0onLCAnQ2FuRGV1JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeUZ1bGwnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnQWx0K00nLCAnTHVpVmFvJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnaW5kZW50JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ0FsdCtOJywgJ0x1aVJhJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnb3V0ZGVudCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtb2JpbGU6IHtcclxuICAgICAgICAgICAgICAgIHRoZW1lOiAnc2lsdmVyJyxcclxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yJ10sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChtb2RlID09ICdmdWxsJykge1xyXG4gICAgICAgICAgICBjb25maWcucGx1Z2lucyA9IFtcclxuICAgICAgICAgICAgICAgICdhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyBlZGl0RmlsZU5ldyBhZGROZXdzJ1xyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCBhbGlnbmp1c3RpZnkgfCBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgfCB0YWJsZSBsaW5rIGVkaXRGaWxlTmV3IGFkZE5ld3MgfCBwcmludCByZW1vdmVmb3JtYXQgdW5kbyByZWRvIHwgZnVsbHNjcmVlbiAnO1xyXG4gICAgICAgICAgICBjb25maWcubW9iaWxlLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wYXN0ZV9kYXRhX2ltYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gJ21lZGl1bScpIHtcclxuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciddO1xyXG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCBhbGlnbmp1c3RpZnkgfCBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgfCB0YWJsZSBsaW5rICB8IHByaW50IHJlbW92ZWZvcm1hdCB1bmRvIHJlZG8gfCBmdWxsc2NyZWVuJztcclxuICAgICAgICAgICAgY29uZmlnLm1vYmlsZS50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xyXG4gICAgICAgICAgICBjb25maWcucGFzdGVfZGF0YV9pbWFnZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChtb2RlID09ICdzaW1wbGUnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcclxuICAgICAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUudG9vbGJhciA9ICdmdWxsc2NyZWVuIHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcclxuICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3J8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCc7XHJcbiAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgY29uZmlnLnBhc3RlX2RhdGFfaW1hZ2VzID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUhUTUwoY29udGVudDogc3RyaW5nLCBiZWdpbjogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gY29udGVudC5pbmRleE9mKGJlZ2luKTtcclxuICAgICAgICB3aGlsZSAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleDIgPSBjb250ZW50LmluZGV4T2YoZW5kLCBpbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleDIgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4MikgKyBjb250ZW50LnN1YnN0cmluZyhpbmRleDIgKyBlbmQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4KSArIGNvbnRlbnQuc3Vic3RyaW5nKGluZGV4ICsgYmVnaW4ubGVuZ3RoKTtcclxuICAgICAgICAgICAgaW5kZXggPSBjb250ZW50LmluZGV4T2YoYmVnaW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbktleURvd24oZTogYW55LCB0b3BpYzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5rZXlkb3duLm5leHQoeyBldmVudDogZSwgdG9waWMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlT2soZXZ0KSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZXF1YXRpb25Gb3JtLnByZXZpZXcubmF0aXZlRWxlbWVudC5vdXRlckhUTUw7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCB0cnVlLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1c1RyYXAoZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaWZyYW1lRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RpbnltY2UtZm9jdXMnKTtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlUGFzdGUodHlwZXMsIHBhc3RlZERhdGEsIHBhc3RlZFJ0ZkRhdGEsIGZpbGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlcyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgb2xkTGVnYWN5VmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICAgICAgICBvblBpY3R1cmU6IChpc0xlZ2FjeSwgY3JlYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZExlZ2FjeVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZExlZ2FjeVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbSA9IGNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChkb20ub3V0ZXJIVE1MKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzTGVnYWN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbSA9IGNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tLnRhZ05hbWUgPT0gJ0lNRycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGRvbS5vdXRlckhUTUwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZExlZ2FjeVZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCd0ZXh0L2h0bWwnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGFzdGVkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXMuaW5kZXhPZigndGV4dC9ydGYnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jID0gbmV3IFJURkpTLkRvY3VtZW50KHRoaXMuX2NvbW1vblNlcnZpY2Uuc3RyaW5nVG9BcnJheUJ1ZmZlcihwYXN0ZWRSdGZEYXRhKSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2MucmVuZGVyKCkudGhlbihhc3luYyAoaHRtbEVsZW1lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXBsb2FkZWQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9jbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocGFzdGVkRGF0YSwgJ3RleHQvaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IGRvY20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDEgPSBwYXN0ZWREYXRhLnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gcGFzdGVkRGF0YS5pbmRleE9mKCcvPicsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKGluZGV4MiArIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VzLmxlbmd0aCA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4SW1nID0gaW1hZ2VzW2ldLmluZGV4T2YoJzxpbWcgc3JjPScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4SW1nICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1tpXSA9IGltYWdlc1tpXS5zdWJzdHJpbmcoaW5kZXhJbWcgKyAxMCwgaW1hZ2VzW2ldLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VUeXBlID0gaW1hZ2VzW2ldLnN1YnN0cmluZyg1LCBpbWFnZXNbaV0uaW5kZXhPZignOycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGltYWdlc1tpXS5zdWJzdHJpbmcoaW1hZ2VzW2ldLmluZGV4T2YoJ2Jhc2U2NCwnKSArIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VCbG9iID0gdGhpcy5kYXRhVVJJdG9CbG9iKGJhc2U2NCwgaW1hZ2VUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNyY0FyciA9IGltZ1tpXS5zcmMuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gc3JjQXJyW3NyY0Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbaW1hZ2VCbG9iXSwgZmlsZU5hbWUsIHsgdHlwZTogaW1hZ2VUeXBlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkSW1hZ2UgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS51cGxvYWRXaXRoQnl0ZUFycmF5KGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRJbWFnZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXBsb2FkZWQucHVzaCh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcmxJbWFnZSh1cGxvYWRJbWFnZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1VwbG9hZCBmaWxlIHRo4bqldCBi4bqhaScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gcDEgKyAnPGltZyBzcmM9JyArIGltYWdlVXBsb2FkZWRbaV0gKyAnLz4nICsgcDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocGFzdGVkRGF0YSwgJ3RleHQvaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nID0gZG9jbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VVcGxvYWRlZFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdbaV0uc3JjID0gaW1hZ2VVcGxvYWRlZFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nW2ldLmFsdCA9IGltYWdlVXBsb2FkZWRbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZXMuaW5kZXhPZignRmlsZXMnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZEltYWdlID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UudXBsb2FkV2l0aEJ5dGVBcnJheShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRJbWFnZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc8aW1nIHNyYz0nICsgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXJsSW1hZ2UodXBsb2FkSW1hZ2UpICsgJy8+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgdGjhuqV0IGLhuqFpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZpbGVNYW5hZ2VyKCkge1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHN1YnNjcmliZUNvbnRlbnRJbnNlcnQoKSB7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoJ0lOU0VSVF9DT05URU5UX0JPRFknLCB4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudCh4LmNvbnRlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGlueW1jZS5FZGl0b3JNYW5hZ2VyLnJlbW92ZSgnIycgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSRkNhbmNlbChldnQpIHtcclxuICAgICAgICB0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dDaGFuZ2VkKGV2dCkge1xyXG4gICAgICAgIHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0FkZE5ld3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGVtcGxhdGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGVtcGxhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YVVSSXRvQmxvYihkYXRhVVJJLCBmaWxlVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihkYXRhVVJJKTtcclxuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpbnQ4QXJyYXlbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaW50OEFycmF5XSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcclxuICAgICAgICByZXR1cm4gYmxvYjtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tdGlueW1jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90bi10aW55bWNlL3RuLXRpbnltY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCdEYsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGFBQWE7SUFxQ2pELFlBQ0ksUUFBa0IsRUFDWCxzQkFBNkMsRUFD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O3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUEzQjRELFFBQVE7WUFHNUQscUJBQXFCO1lBT3JCLGVBQWU7WUFFZixtQkFBbUI7WUFIbkIsaUJBQWlCOzs7MkJBcUJyQixTQUFTLFNBQUMsdUJBQXVCO21CQUVqQyxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO29CQUNMLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLO3FCQUVMLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3dCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgRU1GSlMsIFJURkpTLCBXTUZKUyB9IGZyb20gJ3J0Zi5qcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVxdWF0aW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZXF1YXRpb24tZWRpdG9yL2VxdWF0aW9uLWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5kZWNsYXJlIGxldCB0aW55bWNlOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndG4tdGlueW1jZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG4tdGlueW1jZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90bi10aW55bWNlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUblRpbnltY2VDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRuVGlueW1jZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoRXF1YXRpb25FZGl0b3JDb21wb25lbnQpIGVxdWF0aW9uRm9ybTogRXF1YXRpb25FZGl0b3JDb21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KCkgbW9kZT86ICdiYXNpYycgfCAnbWVkaXVtJyB8ICdmdWxsJyB8ICdzaW1wbGUnID0gJ2Jhc2ljJztcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgaGVpZ2h0ID0gMjAwO1xyXG4gICAgQElucHV0KCkgZmllbGQgPSAnJztcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIGxhbmd1YWdlQ29kZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkga2V5ZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIG1vZGVsOiBhbnkgPSAnJztcclxuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcbiAgICBpZCA9IG5hbm9pZCg4KTtcclxuICAgIGVkaXRvcjogYW55O1xyXG4gICAgZGF0YUVxdWF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlzQWRkTmV3czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBtb2RlcyA9IHt9O1xyXG4gICAgaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICBpcyA9IGZhbHNlO1xyXG4gICAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgICBlcXVhdGlvbkZvcm1Nb2RlbDogYW55ID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgcG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgd2lkdGg6IDExMDAsXHJcbiAgICAgICAgaGVpZ2h0OiA2NTBcclxuICAgIH0pO1xyXG4gICAgc2hvd1RlbXBsYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgICAgIFJURkpTLmxvZ2dpbmdFbmFibGVkKGZhbHNlKTtcclxuICAgICAgICBXTUZKUy5sb2dnaW5nRW5hYmxlZChmYWxzZSk7XHJcbiAgICAgICAgRU1GSlMubG9nZ2luZ0VuYWJsZWQoZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBtID0gWydiYXNpYycsICdtZWRpdW0nLCAnZnVsbCcsICdzaW1wbGUnXTtcclxuICAgICAgICBtLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZXNbeF0gPSB0aGlzLmdldFRpbnlNY2VDb25maWdCeU1vZGUoeCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDb250ZW50SW5zZXJ0KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IG1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgbW9kZSA9ICdzaW1wbGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1vZGVzW21vZGVdO1xyXG4gICAgICAgIGNvbmZpZy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICBjb25maWcucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGlueW1jZS5pbml0KGNvbmZpZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG9iajtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRpYWxvZyhkYXRhID0ge30pIHtcclxuICAgICAgICB0aGlzLmVxdWF0aW9uRm9ybU1vZGVsLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXF1YXRpb25Gb3JtTW9kZWwuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGlueU1jZUNvbmZpZ0J5TW9kZShtb2RlKSB7XHJcbiAgICAgICAgY29uc3QgJHRoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdhZGROZXdzJywgZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBvcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuZWRpdG9yID0gZWRpdG9yO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaGVhZGVyID0gJ1Row6ptL0No4buNbiB0aW4gYsOgaSc7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignYWRkTmV3cycsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUaMOqbS9DaMOobiB0aW4gYsOgaSB2w6BvIG7hu5lpIGR1bmcnLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogJ25vbi1icmVha2luZycsXHJcbiAgICAgICAgICAgICAgICBvbkFjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCd0ZW1wbGF0ZScsIGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICR0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICAgICAgICAgICR0aGlzLmhlYWRlciA9ICdUaMOqbS9DaOG7jW4gdGVtcGxhdGUnO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuc2hvd1RlbXBsYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd0ZW1wbGF0ZScsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUZW1wbGF0ZScsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnbm9uLWJyZWFraW5nJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGlueW1jZS5QbHVnaW5NYW5hZ2VyLmFkZCgnZWRpdEZpbGVOZXcnLCBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EaWFsb2cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5lZGl0b3IgPSBlZGl0b3I7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnVGjDqm0vQ2jhu4luaCBz4butYSBmaWxlIGPDoSBuaMOibic7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignZWRpdEZpbGVOZXcnLCB7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnVGjDqm0vQ2jDqG4g4bqjbmgsIHZpZGVvLCBmaWxlIHbDoG8gbuG7mWkgZHVuZycsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnZHVwbGljYXRlJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tGdW5jID0gZWRpdG9yID0+IHtcclxuICAgICAgICAgICAgJHRoaXMuZWRpdG9yID0gZWRpdG9yO1xyXG4gICAgICAgICAgICBpZiAoJHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRNb2RlKCdyZWFkb25seScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVkQm9keSA9IGpRdWVyeShlZGl0b3IuaWZyYW1lRWxlbWVudCkuY29udGVudHMoKS5maW5kKCdib2R5Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckhvbGRlciA9IGVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghJHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgZWRCb2R5LmFkZENsYXNzKCdtb2JpbGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWRCb2R5Lm9uKCdibHVyJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JIb2xkZXIuY2xhc3NMaXN0LnJlbW92ZSgndGlueW1jZS1mb2N1cycpO1xyXG4gICAgICAgICAgICB9KS5vbignZm9jdXMnLCBlID0+IHtcclxuICAgICAgICAgICAgICAgIGVkaXRvckhvbGRlci5jbGFzc0xpc3QuYWRkKCd0aW55bWNlLWZvY3VzJyk7XHJcbiAgICAgICAgICAgIH0pLm9uKCdwYXN0ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoKCh0eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QpICYmIHR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKHR5cGVzLmluZGV4T2YgJiYgKHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpICE9PSAtMSkgfHwgdHlwZXMuaW5kZXhPZignRmlsZXMnKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcgdGnhur9uIGjDoG5oIHjhu60gbMO9IG7hu5lpIGR1bmcsIHZ1aSBsw7JuZyBjaOG7nSB0cm9uZyBnacOieSBsw6F0IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZmlsZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhc3RlZERhdGEgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFzdGVkUnRmRGF0YSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0ICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzIGluc3RhbmNlb2YgRE9NU3RyaW5nTGlzdCkgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuY29udGFpbnMoJ3RleHQvcnRmJykpIHx8IChlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5pbmRleE9mICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YoJ3RleHQvcnRmJykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkUnRmRGF0YSA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcnRmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmhhbmRsZVBhc3RlKHR5cGVzLCBwYXN0ZWREYXRhLCBwYXN0ZWRSdGZEYXRhLCBmaWxlcykudGhlbigoY29udGVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RpbWUgdG8gcnVuIGhhbmRsZVBhc3RlIGlzICcgKyAoZW5kLmdldFRpbWUoKSAtIGJlZ2luLmdldFRpbWUoKSkgKyAnbXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvPCFcXFtpZltcXHNcXFNdKj8+L2dtLCAnJykucmVwbGFjZSgvPCFcXFtlbmRpZltcXHNcXFNdKj8+L2dtLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9ICR0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFzdXBwb3J0TGlzdHNdPicsICc8IVtlbmRpZl0+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9ICR0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFtc0VxdWF0aW9uXT4nLCAnPCFbZW5kaWZdPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5vbigna2V5ZG93bicsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMub25LZXlEb3duKGUsIENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0NUUkxfUyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLndoaWNoID09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub25LZXlEb3duKGUsIENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5vbignZGJsY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2ltZycgJiYgZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsYXRleCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub3BlbkRpYWxvZyh7IGNvbnRlbnQ6IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0JyksIHN0eWxlOiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyksIGhlaWdodDogZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlZGl0b3Iub24oJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaGFuZGxlQmx1cigpO1xyXG4gICAgICAgICAgICB9KS5vbignY2hhbmdlJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuZ2V0Q29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMub25DaGFuZ2UoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5vbkNoYW5nZWQuZW1pdChjb250ZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCgkdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnIycgKyAkdGhpcy5pZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAkdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgIGNvbnRlbnRfY3NzOiBbXHJcbiAgICAgICAgICAgICAgICAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZS9jdXN0b20uY3NzJ1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBpbWFnZXRvb2xzX3Rvb2xiYXI6ICdyb3RhdGVsZWZ0IHJvdGF0ZXJpZ2h0IHwgZmxpcHYgZmxpcGggfCBlZGl0aW1hZ2UgaW1hZ2VvcHRpb25zJyxcclxuICAgICAgICAgICAgY29udGV4dG1lbnU6ICdsaW5rIGltYWdlIGltYWdldG9vbHMgdGFibGUnLFxyXG4gICAgICAgICAgICBsYW5ndWFnZTogJ3ZpX1ZOJyxcclxuICAgICAgICAgICAgc3RhdHVzYmFyOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVsYXRpdmVfdXJsczogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbnZlcnRfdXJsczogZmFsc2UsXHJcbiAgICAgICAgICAgIHRhYmZvY3VzX2VsZW1lbnRzOiAnOnByZXYsOm5leHQnLFxyXG4gICAgICAgICAgICBpbml0X2luc3RhbmNlX2NhbGxiYWNrOiBjYWxsYmFja0Z1bmMsXHJcbiAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2N0cmwrRScsICdDYW5HaXVhJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeUNlbnRlcicsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK0wnLCAnQ2FuVHJhaScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlMZWZ0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2N0cmwrUicsICdDYW5QaGFpJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeVJpZ2h0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2N0cmwrSicsICdDYW5EZXUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5RnVsbCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdBbHQrTScsICdMdWlWYW8nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdpbmRlbnQnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnQWx0K04nLCAnTHVpUmEnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdvdXRkZW50JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1vYmlsZToge1xyXG4gICAgICAgICAgICAgICAgdGhlbWU6ICdzaWx2ZXInLFxyXG4gICAgICAgICAgICAgICAgcGx1Z2luczogWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG1vZGUgPT0gJ2Z1bGwnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gW1xyXG4gICAgICAgICAgICAgICAgJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIGVkaXRGaWxlTmV3IGFkZE5ld3MnXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2Zvcm1hdHNlbGVjdCB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCBvdXRkZW50IGluZGVudCB8IHRhYmxlIGxpbmsgZWRpdEZpbGVOZXcgYWRkTmV3cyB8IHByaW50IHJlbW92ZWZvcm1hdCB1bmRvIHJlZG8gfCBmdWxsc2NyZWVuICc7XHJcbiAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUudG9vbGJhciA9ICdib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QgfCBmdWxsc2NyZWVuJztcclxuICAgICAgICAgICAgY29uZmlnLnBhc3RlX2RhdGFfaW1hZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobW9kZSA9PSAnbWVkaXVtJykge1xyXG4gICAgICAgICAgICBjb25maWcucGx1Z2lucyA9IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yJ107XHJcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2Zvcm1hdHNlbGVjdCB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCBvdXRkZW50IGluZGVudCB8IHRhYmxlIGxpbmsgIHwgcHJpbnQgcmVtb3ZlZm9ybWF0IHVuZG8gcmVkbyB8IGZ1bGxzY3JlZW4nO1xyXG4gICAgICAgICAgICBjb25maWcubW9iaWxlLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wYXN0ZV9kYXRhX2ltYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3NpbXBsZScpIHtcclxuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciddO1xyXG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QgfCBmdWxsc2NyZWVuJztcclxuICAgICAgICAgICAgY29uZmlnLm1vYmlsZS50b29sYmFyID0gJ2Z1bGxzY3JlZW4gfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciddO1xyXG4gICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2Zvcm1hdHNlbGVjdCB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvcnwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0JztcclxuICAgICAgICBjb25maWcudG9vbGJhciA9ICdib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QgfCBmdWxsc2NyZWVuJztcclxuICAgICAgICBjb25maWcucGFzdGVfZGF0YV9pbWFnZXMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplSFRNTChjb250ZW50OiBzdHJpbmcsIGJlZ2luOiBzdHJpbmcsIGVuZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaW5kZXggPSBjb250ZW50LmluZGV4T2YoYmVnaW4pO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGNvbnRlbnQuaW5kZXhPZihlbmQsIGluZGV4KTtcclxuICAgICAgICAgICAgaWYgKGluZGV4MiA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgaW5kZXgyKSArIGNvbnRlbnQuc3Vic3RyaW5nKGluZGV4MiArIGVuZC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgaW5kZXgpICsgY29udGVudC5zdWJzdHJpbmcoaW5kZXggKyBiZWdpbi5sZW5ndGgpO1xyXG4gICAgICAgICAgICBpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihiZWdpbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5vbkJsdXIubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihlOiBhbnksIHRvcGljOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmtleWRvd24ubmV4dCh7IGV2ZW50OiBlLCB0b3BpYyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVPayhldnQpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5lcXVhdGlvbkZvcm0ucHJldmlldy5uYXRpdmVFbGVtZW50Lm91dGVySFRNTDtcclxuICAgICAgICB0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIHRydWUsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzVHJhcChldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndGlueW1jZS1mb2N1cycpO1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVQYXN0ZSh0eXBlcywgcGFzdGVkRGF0YSwgcGFzdGVkUnRmRGF0YSwgZmlsZXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VzID0gW107XHJcbiAgICAgICAgICAgIGxldCBvbGRMZWdhY3lWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgICAgIG9uUGljdHVyZTogKGlzTGVnYWN5LCBjcmVhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkTGVnYWN5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkTGVnYWN5VmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tID0gY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGRvbS5vdXRlckhUTUwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNMZWdhY3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tID0gY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb20udGFnTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goZG9tLm91dGVySFRNTCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkTGVnYWN5VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhc3RlZERhdGEuaW5kZXhPZignPHY6aW1hZ2VkYXRhICcpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgSFRNTFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb2NtID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwYXN0ZWREYXRhLCAndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGltZ1RhZ3MgPSBkb2NtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVVwbG9hZGVkOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltZ1RhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNyYyA9IGltZ1RhZ3NbaV0uc3JjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyYy5zdGFydHNXaXRoKCdkYXRhOmltYWdlLycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSBiYXNlNjRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVR5cGUgPSBzcmMuc3Vic3RyaW5nKDUsIHNyYy5pbmRleE9mKCc7JykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IHNyYy5zdWJzdHJpbmcoc3JjLmluZGV4T2YoJ2Jhc2U2NCwnKSArIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlQmxvYiA9IHRoaXMuZGF0YVVSSXRvQmxvYihiYXNlNjQsIGltYWdlVHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtpbWFnZUJsb2JdLCBgcGFzdGVfJHtEYXRlLm5vdygpfV8ke2l9LnBuZ2AsIHsgdHlwZTogaW1hZ2VUeXBlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZEltYWdlID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UudXBsb2FkV2l0aEJ5dGVBcnJheShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHVwbG9hZEltYWdlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1RhZ3NbaV0uc3JjID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXJsSW1hZ2UodXBsb2FkSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVVwbG9hZGVkLnB1c2goaW1nVGFnc1tpXS5zcmMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgbGluayDhuqNuaCB04burIHdlYiBraMOhY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZEltYWdlID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuVXBsb2FkRXh0ZXJuYWxJbWFnZShzcmMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHVwbG9hZEltYWdlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdUYWdzW2ldLnNyYyA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXBsb2FkZWQucHVzaChpbWdUYWdzW2ldLnNyYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2tpcCBleHRlcm5hbCBpbWFnZTonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVVwbG9hZGVkLnB1c2goc3JjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGFzdGUgaW1hZ2UgZXJyb3I6JywgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIOG6o25oIGtoaSBkw6FuIG7hu5lpIGR1bmcgdGjhuqV0IGLhuqFpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBs4bqhaSBIVE1MIHNhdSBraGkgdGhheSBsaW5rIOG6o25oXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2NtKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXMuaW5kZXhPZigndGV4dC9ydGYnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jID0gbmV3IFJURkpTLkRvY3VtZW50KHRoaXMuX2NvbW1vblNlcnZpY2Uuc3RyaW5nVG9BcnJheUJ1ZmZlcihwYXN0ZWRSdGZEYXRhKSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2MucmVuZGVyKCkudGhlbihhc3luYyAoaHRtbEVsZW1lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXBsb2FkZWQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9jbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocGFzdGVkRGF0YSwgJ3RleHQvaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IGRvY20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDEgPSBwYXN0ZWREYXRhLnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gcGFzdGVkRGF0YS5pbmRleE9mKCcvPicsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKGluZGV4MiArIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VzLmxlbmd0aCA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4SW1nID0gaW1hZ2VzW2ldLmluZGV4T2YoJzxpbWcgc3JjPScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4SW1nICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1tpXSA9IGltYWdlc1tpXS5zdWJzdHJpbmcoaW5kZXhJbWcgKyAxMCwgaW1hZ2VzW2ldLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VUeXBlID0gaW1hZ2VzW2ldLnN1YnN0cmluZyg1LCBpbWFnZXNbaV0uaW5kZXhPZignOycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGltYWdlc1tpXS5zdWJzdHJpbmcoaW1hZ2VzW2ldLmluZGV4T2YoJ2Jhc2U2NCwnKSArIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VCbG9iID0gdGhpcy5kYXRhVVJJdG9CbG9iKGJhc2U2NCwgaW1hZ2VUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNyY0FyciA9IGltZ1tpXS5zcmMuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gc3JjQXJyW3NyY0Fyci5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbaW1hZ2VCbG9iXSwgZmlsZU5hbWUsIHsgdHlwZTogaW1hZ2VUeXBlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkSW1hZ2UgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS51cGxvYWRXaXRoQnl0ZUFycmF5KGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRJbWFnZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXBsb2FkZWQucHVzaCh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcmxJbWFnZSh1cGxvYWRJbWFnZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1VwbG9hZCBmaWxlIHRo4bqldCBi4bqhaScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gcDEgKyAnPGltZyBzcmM9JyArIGltYWdlVXBsb2FkZWRbaV0gKyAnLz4nICsgcDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocGFzdGVkRGF0YSwgJ3RleHQvaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nID0gZG9jbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VVcGxvYWRlZFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdbaV0uc3JjID0gaW1hZ2VVcGxvYWRlZFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nW2ldLmFsdCA9IGltYWdlVXBsb2FkZWRbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZXMuaW5kZXhPZignRmlsZXMnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZEltYWdlID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UudXBsb2FkV2l0aEJ5dGVBcnJheShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRJbWFnZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc8aW1nIHNyYz0nICsgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXJsSW1hZ2UodXBsb2FkSW1hZ2UpICsgJy8+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgdGjhuqV0IGLhuqFpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZpbGVNYW5hZ2VyKCkge1xyXG4gICAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHN1YnNjcmliZUNvbnRlbnRJbnNlcnQoKSB7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoJ0lOU0VSVF9DT05URU5UX0JPRFknLCB4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudCh4LmNvbnRlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGlueW1jZS5FZGl0b3JNYW5hZ2VyLnJlbW92ZSgnIycgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSRkNhbmNlbChldnQpIHtcclxuICAgICAgICB0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dDaGFuZ2VkKGV2dCkge1xyXG4gICAgICAgIHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0FkZE5ld3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGVtcGxhdGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGVtcGxhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YVVSSXRvQmxvYihkYXRhVVJJLCBmaWxlVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihkYXRhVVJJKTtcclxuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpbnQ4QXJyYXlbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaW50OEFycmF5XSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcclxuICAgICAgICByZXR1cm4gYmxvYjtcclxuICAgIH1cclxufVxyXG4iXX0=
|
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -24801,6 +24801,16 @@ class FileObjectService extends BaseService {
|
|
|
24801
24801
|
const url = `${this.serviceUri}/UploadWithByteArray`;
|
|
24802
24802
|
return this._http.post(url, formData, { responseType: 'text' }).toPromise();
|
|
24803
24803
|
}
|
|
24804
|
+
UploadExternalImage(url) {
|
|
24805
|
+
const options = {
|
|
24806
|
+
headers: new HttpHeaders({
|
|
24807
|
+
'Content-Type': 'application/json-patch+json',
|
|
24808
|
+
}),
|
|
24809
|
+
responseType: 'text',
|
|
24810
|
+
};
|
|
24811
|
+
const apiUrl = `${this.serviceUri}/UploadExternalImage`;
|
|
24812
|
+
return this._http.post(apiUrl, { url: url }, options).toPromise();
|
|
24813
|
+
}
|
|
24804
24814
|
}
|
|
24805
24815
|
FileObjectService.ɵprov = ɵɵdefineInjectable({ factory: function FileObjectService_Factory() { return new FileObjectService(ɵɵinject(HttpClient), ɵɵinject(INJECTOR), ɵɵinject(ModuleConfigService)); }, token: FileObjectService, providedIn: "root" });
|
|
24806
24816
|
FileObjectService.decorators = [
|
|
@@ -53067,6 +53077,7 @@ class TnTinymceComponent extends ComponentBase {
|
|
|
53067
53077
|
'/assets/vendor/tinymce/custom.css'
|
|
53068
53078
|
],
|
|
53069
53079
|
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
|
|
53080
|
+
contextmenu: 'link image imagetools table',
|
|
53070
53081
|
language: 'vi_VN',
|
|
53071
53082
|
statusbar: false,
|
|
53072
53083
|
relative_urls: false,
|
|
@@ -53180,7 +53191,48 @@ class TnTinymceComponent extends ComponentBase {
|
|
|
53180
53191
|
};
|
|
53181
53192
|
if (types.indexOf('text/html') !== -1) {
|
|
53182
53193
|
if (pastedData.indexOf('<v:imagedata ') == -1) {
|
|
53183
|
-
|
|
53194
|
+
// Parse HTML
|
|
53195
|
+
let docm = new DOMParser().parseFromString(pastedData, 'text/html');
|
|
53196
|
+
let imgTags = docm.getElementsByTagName('img');
|
|
53197
|
+
const imageUploaded = [];
|
|
53198
|
+
for (let i = 0; i < imgTags.length; i++) {
|
|
53199
|
+
let src = imgTags[i].src;
|
|
53200
|
+
try {
|
|
53201
|
+
if (src.startsWith('data:image/')) {
|
|
53202
|
+
// Case base64
|
|
53203
|
+
const imageType = src.substring(5, src.indexOf(';'));
|
|
53204
|
+
const base64 = src.substring(src.indexOf('base64,') + 7);
|
|
53205
|
+
const imageBlob = this.dataURItoBlob(base64, imageType);
|
|
53206
|
+
const file = new File([imageBlob], `paste_${Date.now()}_${i}.png`, { type: imageType });
|
|
53207
|
+
const uploadImage = yield this._fileObjectService.uploadWithByteArray(file);
|
|
53208
|
+
if (typeof uploadImage == 'string') {
|
|
53209
|
+
imgTags[i].src = this._fileObjectService.getUrlImage(uploadImage);
|
|
53210
|
+
imageUploaded.push(imgTags[i].src);
|
|
53211
|
+
}
|
|
53212
|
+
}
|
|
53213
|
+
else if (src.startsWith('http')) {
|
|
53214
|
+
// Case link ảnh từ web khác
|
|
53215
|
+
try {
|
|
53216
|
+
const uploadImage = yield this._fileObjectService.UploadExternalImage(src);
|
|
53217
|
+
if (typeof uploadImage == 'string') {
|
|
53218
|
+
imgTags[i].src = this._fileObjectService.getUrlImage(uploadImage);
|
|
53219
|
+
imageUploaded.push(imgTags[i].src);
|
|
53220
|
+
}
|
|
53221
|
+
}
|
|
53222
|
+
catch (err) {
|
|
53223
|
+
console.error('Skip external image:', err);
|
|
53224
|
+
imageUploaded.push(src);
|
|
53225
|
+
}
|
|
53226
|
+
}
|
|
53227
|
+
}
|
|
53228
|
+
catch (err) {
|
|
53229
|
+
console.error('Paste image error:', err);
|
|
53230
|
+
this._notifierService.showWarning('Upload ảnh khi dán nội dung thất bại');
|
|
53231
|
+
}
|
|
53232
|
+
}
|
|
53233
|
+
// Serialize lại HTML sau khi thay link ảnh
|
|
53234
|
+
const result = new XMLSerializer().serializeToString(docm);
|
|
53235
|
+
resolve(result);
|
|
53184
53236
|
}
|
|
53185
53237
|
else {
|
|
53186
53238
|
if (types.indexOf('text/rtf') !== -1) {
|