@sd-angular/core 1.2.37 → 1.2.40
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/bundles/sd-angular-core-notify.umd.js +16 -7
- package/bundles/sd-angular-core-notify.umd.js.map +1 -1
- package/bundles/sd-angular-core-notify.umd.min.js +2 -2
- package/bundles/sd-angular-core-notify.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.js +4 -4
- package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.min.js +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-utility.umd.js +6 -8
- package/bundles/sd-angular-core-utility.umd.js.map +1 -1
- package/bundles/sd-angular-core-utility.umd.min.js +1 -1
- package/bundles/sd-angular-core-utility.umd.min.js.map +1 -1
- package/esm2015/notify/src/lib/configurations/notify.configuration.js +3 -0
- package/esm2015/notify/src/lib/notify.service.js +16 -9
- package/esm2015/notify/src/public-api.js +2 -1
- package/esm2015/upload-excel/src/lib/upload-excel.component.js +5 -5
- package/esm2015/utility/src/lib/utility.service.js +7 -9
- package/fesm2015/sd-angular-core-notify.js +17 -9
- package/fesm2015/sd-angular-core-notify.js.map +1 -1
- package/fesm2015/sd-angular-core-upload-excel.js +4 -4
- package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
- package/fesm2015/sd-angular-core-utility.js +6 -8
- package/fesm2015/sd-angular-core-utility.js.map +1 -1
- package/notify/sd-angular-core-notify.metadata.json +1 -1
- package/notify/src/lib/configurations/notify.configuration.d.ts +5 -0
- package/notify/src/lib/notify.service.d.ts +3 -1
- package/notify/src/public-api.d.ts +1 -0
- package/package.json +3 -2
- package/{sd-angular-core-1.2.37.tgz → sd-angular-core-1.2.40.tgz} +0 -0
- package/upload-excel/sd-angular-core-upload-excel.metadata.json +1 -1
- package/upload-excel/src/lib/upload-excel.component.d.ts +1 -1
- package/utility/src/lib/utility.service.d.ts +1 -1
|
@@ -109,7 +109,7 @@ export class SdUploadExcel {
|
|
|
109
109
|
this.file = file;
|
|
110
110
|
this.loadingService.start();
|
|
111
111
|
for (const [idx, item] of this.items.entries()) {
|
|
112
|
-
item.
|
|
112
|
+
item.sdOrigin = Object.assign({}, item);
|
|
113
113
|
item.excelIndex = idx + (this.hasDescription ? 4 : 3);
|
|
114
114
|
yield this.validate(item);
|
|
115
115
|
}
|
|
@@ -277,7 +277,7 @@ export class SdUploadExcel {
|
|
|
277
277
|
item.validation = validation;
|
|
278
278
|
});
|
|
279
279
|
_mapItem.set(this, (item) => {
|
|
280
|
-
const { validation,
|
|
280
|
+
const { validation, sdOrigin, excelIndex } = item, remain = __rest(item, ["validation", "sdOrigin", "excelIndex"]);
|
|
281
281
|
return remain;
|
|
282
282
|
});
|
|
283
283
|
this.accept = () => {
|
|
@@ -360,7 +360,7 @@ export class SdUploadExcel {
|
|
|
360
360
|
}, ...this.option.columns.filter(column => this.sdColumnHidden.transform(column))],
|
|
361
361
|
items: this.filteredItems.map(e => {
|
|
362
362
|
var _a, _b, _c, _d;
|
|
363
|
-
return (Object.assign(Object.assign({}, e.
|
|
363
|
+
return (Object.assign(Object.assign({}, e.sdOrigin), { sdMessage: (_d = (((_a = e.validation) === null || _a === void 0 ? void 0 : _a.error) || ((_b = e.validation) === null || _b === void 0 ? void 0 : _b.warning) || ((_c = e.validation) === null || _c === void 0 ? void 0 : _c.success))) === null || _d === void 0 ? void 0 : _d.replace(/<strong>/g, '').replace(/<\/strong>/g, '').replace(/<br>/g, '\n') }));
|
|
364
364
|
})
|
|
365
365
|
}).finally(this.loadingService.stop);
|
|
366
366
|
});
|
|
@@ -476,7 +476,7 @@ _paginator = new WeakMap(), _subscription = new WeakMap(), _reset = new WeakMap(
|
|
|
476
476
|
SdUploadExcel.decorators = [
|
|
477
477
|
{ type: Component, args: [{
|
|
478
478
|
selector: 'sd-upload-excel',
|
|
479
|
-
template: "<sd-modal [title]=\"(option?.title || 'Import Excel')| sdTranslate\" #modal>\r\n <sd-modal-body background=\"#F0F8FF\">\r\n <div class=\"row mx-0 mb-10\">\r\n <sd-button *ngIf=\"items?.length\" class=\"mr-5\" (action)=\"view('ALL')\" icon=\"cached\"\r\n [title]=\"'View all' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfSuccess\" class=\"mr-5\" (action)=\"view('SUCCESS')\" icon=\"done\" [title]=\"numberOfSuccess\"\r\n [tooltip]=\"'Number of success rows' | sdTranslate\" size=\"sm\" color=\"success\"></sd-button>\r\n <sd-button *ngIf=\"numberOfWarning\" class=\"mr-5\" (action)=\"view('WARNING')\" icon=\"warning\"\r\n [title]=\"numberOfWarning\" [tooltip]=\"'Number of warning rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfError\" class=\"mr-5\" (action)=\"view('ERROR')\" icon=\"error\" [title]=\"numberOfError\"\r\n color=\"danger\" [tooltip]=\"'Number of error rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n </div>\r\n <div class=\"sd-box\">\r\n <div class=\"sd-box-body p-0\">\r\n <div class=\"table-responsive\" style=\"position: relative; height:50vh\">\r\n <table class=\"table table-striped table-sm table-hover table-bordered\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">#</th>\r\n <th *ngIf=\"filteredItems?.length\" class=\"text-center\" style=\"min-width: 250px; width: 250px\">\r\n {{'Upload message' | sdTranslate}}</th>\r\n <ng-container *ngFor=\"let column of option.columns\">\r\n <th *ngIf=\"column | columnHidden\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" [matTooltip]=\"column.title\">\r\n <span class=\"c-ellipsis\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px', 'max-width':column.width ? column.width : '300px'}\">{{column.title}}</span>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"viewItems.length\">\r\n <tr *ngFor=\"let item of viewItems\">\r\n <td class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">\r\n <span class=\"badge\"\r\n [ngClass]=\"{'badge-success':!item.validation?.warning && !item.validation?.error, 'badge-warning':item.validation?.warning && !item.validation?.error, 'badge-danger':item.validation?.error}\"\r\n style=\"width: 100%\">{{item.excelIndex}}</span>\r\n </td>\r\n <td style=\"min-width: 250px; width: 250px\">\r\n <div\r\n [innerHtml]=\"item.validation?.error || item.validation?.warning || item.validation?.success || ('Success' | sdTranslate)\">\r\n </div>\r\n </td>\r\n <ng-container *ngFor=\"let column of option.columns\">\r\n <td *ngIf=\"column | columnHidden\" class=\"align-middle\"\r\n [ngClass]=\"{'table-warning':item.validation?.data[column.field]?.warning && !item.validation?.data[column.field]?.error, 'table-danger':item.validation?.data[column.field]?.error}\"\r\n [matTooltip]=\"item.validation?.data[column.field]?.error || item.validation?.data[column.field]?.warning\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" matTooltipPosition=\"above\">\r\n <span class=\"c-ellipsis\">\r\n <ng-container *ngIf=\"column.type === 'date' || column.type === 'datetime' && item.
|
|
479
|
+
template: "<sd-modal [title]=\"(option?.title || 'Import Excel')| sdTranslate\" #modal>\r\n <sd-modal-body background=\"#F0F8FF\">\r\n <div class=\"row mx-0 mb-10\">\r\n <sd-button *ngIf=\"items?.length\" class=\"mr-5\" (action)=\"view('ALL')\" icon=\"cached\"\r\n [title]=\"'View all' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfSuccess\" class=\"mr-5\" (action)=\"view('SUCCESS')\" icon=\"done\" [title]=\"numberOfSuccess\"\r\n [tooltip]=\"'Number of success rows' | sdTranslate\" size=\"sm\" color=\"success\"></sd-button>\r\n <sd-button *ngIf=\"numberOfWarning\" class=\"mr-5\" (action)=\"view('WARNING')\" icon=\"warning\"\r\n [title]=\"numberOfWarning\" [tooltip]=\"'Number of warning rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfError\" class=\"mr-5\" (action)=\"view('ERROR')\" icon=\"error\" [title]=\"numberOfError\"\r\n color=\"danger\" [tooltip]=\"'Number of error rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n </div>\r\n <div class=\"sd-box\">\r\n <div class=\"sd-box-body p-0\">\r\n <div class=\"table-responsive\" style=\"position: relative; height:50vh\">\r\n <table class=\"table table-striped table-sm table-hover table-bordered\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">#</th>\r\n <th *ngIf=\"filteredItems?.length\" class=\"text-center\" style=\"min-width: 250px; width: 250px\">\r\n {{'Upload message' | sdTranslate}}</th>\r\n <ng-container *ngFor=\"let column of option.columns\">\r\n <th *ngIf=\"column | columnHidden\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" [matTooltip]=\"column.title\">\r\n <span class=\"c-ellipsis\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px', 'max-width':column.width ? column.width : '300px'}\">{{column.title}}</span>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"viewItems.length\">\r\n <tr *ngFor=\"let item of viewItems\">\r\n <td class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">\r\n <span class=\"badge\"\r\n [ngClass]=\"{'badge-success':!item.validation?.warning && !item.validation?.error, 'badge-warning':item.validation?.warning && !item.validation?.error, 'badge-danger':item.validation?.error}\"\r\n style=\"width: 100%\">{{item.excelIndex}}</span>\r\n </td>\r\n <td style=\"min-width: 250px; width: 250px\">\r\n <div\r\n [innerHtml]=\"item.validation?.error || item.validation?.warning || item.validation?.success || ('Success' | sdTranslate)\">\r\n </div>\r\n </td>\r\n <ng-container *ngFor=\"let column of option.columns\">\r\n <td *ngIf=\"column | columnHidden\" class=\"align-middle\"\r\n [ngClass]=\"{'table-warning':item.validation?.data[column.field]?.warning && !item.validation?.data[column.field]?.error, 'table-danger':item.validation?.data[column.field]?.error}\"\r\n [matTooltip]=\"item.validation?.data[column.field]?.error || item.validation?.data[column.field]?.warning\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" matTooltipPosition=\"above\">\r\n <span class=\"c-ellipsis\">\r\n <ng-container *ngIf=\"(column.type === 'date' || column.type === 'datetime') && item.sdOrigin\">\r\n {{item.sdOrigin[column.field] | columnTransform:item:column | async}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n {{item.validation?.data[column.field]?.error ? (item[column.field] | columnTransform:item:column | async): (item[column.field] | number :\r\n '1.0-2')}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type === 'array'\">\r\n {{item[column.field]?.split(column.divideString)?.length}} {{column.unitString}}\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"c-mat-menu\">\r\n <mat-icon>open_in_new</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-6\" *ngFor=\"let itemArray of item[column.field]?.split(column.divideString)\">\r\n {{itemArray | columnTransform:item:column | async}}\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.type !== 'date' && column.type !== 'datetime' && column.type !== 'number' && column.type !== 'array'\">\r\n <!-- {{item[column.field]}} -->\r\n {{item[column.field] | columnTransform:item:column | async}}\r\n\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"sd-box-footer clearfix\">\r\n <div style=\"display: flex; align-items: center; align-content: space-between;\">\r\n <div style=\"flex: 1;\" [innerHTML]=\"option?.note\">\r\n </div>\r\n <div style=\"flex: 1;\">\r\n <mat-paginator [length]=\"filteredItems?.length || 0\" hidePageSize>\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </sd-modal-body>\r\n <sd-modal-footer *sdDesktop>\r\n <div class=\"mr-auto\">\r\n <sd-button class=\"mr-5\" (action)=\"upload()\" icon=\"file_upload\" [title]=\"'Upload' | sdTranslate\" size=\"sm\"\r\n color=\"info\"></sd-button>\r\n <sd-button class=\"mr-5\" (action)=\"downloadTemplate()\" icon=\"file_download\" [loading]=\"isDownloadTemplate\"\r\n [title]=\"'Download template' | sdTranslate\" color=\"info\" type=\"outline\" size=\"sm\">\r\n </sd-button>\r\n </div>\r\n <sd-button *ngIf=\"filteredItems?.length\" class=\"mr-5\" (action)=\"export()\" icon=\"get_app\"\r\n [title]=\"'Download result' | sdTranslate\" size=\"sm\" color=\"info\" type=\"outline\">\r\n </sd-button>\r\n <sd-button (action)=\"accept()\" [title]=\"'Accept' | sdTranslate\"\r\n [disabled]=\"numberOfSuccess === 0 || numberOfError > 0 || isUploaded\" color=\"primary\" type=\"fill\" size=\"sm\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n <sd-modal-footer *sdMobileTablet>\r\n <sd-button style=\"flex: 1; padding-right: 5px;\" (action)=\"upload()\" icon=\"file_upload\"\r\n [title]=\"'Upload' | sdTranslate\" width=\"100%\" size=\"sm\" color=\"info\"></sd-button>\r\n <sd-button style=\"flex: 1; padding-left: 5px;\" (action)=\"accept()\" icon=\"check\" [title]=\"'Accept' | sdTranslate\"\r\n [disabled]=\"numberOfSuccess === 0 || numberOfError > 0\" color=\"success\" width=\"100%\" size=\"sm\"></sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>",
|
|
480
480
|
styles: [".table thead td,.table thead th{padding-bottom:5px;padding-top:5px}.table-striped tbody tr:nth-of-type(2n) .c-sticky-left{background-color:#fff}.table-striped tbody tr:nth-of-type(odd) .c-sticky-left{background-color:#f2f2f2}.c-sticky-left{border-left:none!important;border-right:none!important;left:0!important;z-index:20}.c-ellipsis{display:block;overflow:hidden!important;padding:.1rem;text-overflow:ellipsis;white-space:nowrap}.c-mat-menu{border:none}.c-mat-menu mat-icon{font-size:20px;vertical-align:middle}:host ::ng-deep .mat-paginator-container{height:32px;min-height:32px}:host ::ng-deep .mat-paginator-container .mat-icon-button{height:28px;line-height:28px;width:28px}"]
|
|
481
481
|
},] }
|
|
482
482
|
];
|
|
@@ -493,4 +493,4 @@ SdUploadExcel.propDecorators = {
|
|
|
493
493
|
modal: [{ type: ViewChild, args: ['modal',] }],
|
|
494
494
|
paginator: [{ type: ViewChild, args: [MatPaginator,] }]
|
|
495
495
|
};
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic3JjL2xpYi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFNeEIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVFoRSxNQUFNLE9BQU8sYUFBYTtJQTBCeEIsWUFDVSxHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsYUFBOEIsRUFDOUIsY0FBa0MsRUFDbEMsY0FBZ0M7UUFMaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsa0JBQWEsR0FBYixh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QWMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7NEJBQ3BILFNBQVM7eUJBQ1Y7cUJBQ0Y7eUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTt3QkFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTs0QkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7eUJBQzFCO3dCQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7NEJBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO3lCQUMxQjt3QkFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZELFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0NBQzlFLFVBQVUsQ0FBQyxLQUFLLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLGNBQWMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7NkJBQ3JIO3lCQUNGO3FC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Q0FBQzthQUNkO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxnREFBQSxJQUFJLEVBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUMxQyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLGlEQUFpRCxDQUFDO1lBQ2hFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLEVBQUE7SUE5YkQsQ0FBQztJQWpCRCxJQUE2QixTQUFTLENBQUMsU0FBdUI7UUFDNUQsSUFBSSxTQUFTLElBQUksNkNBQW9CLFNBQVMsRUFBRTtZQUM5Qyx1QkFBQSxJQUFJLGNBQWMsU0FBUyxFQUFDO1lBQzVCLDRDQUFtQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLHVDQUFjLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFjRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCw0Q0FBbUIsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztZQTlDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsOGdQQUE0Qzs7YUFFN0M7OztZQWhDNkMsaUJBQWlCO1lBd0J0RCxlQUFlO1lBTnRCLGtCQUFrQjtZQVJsQixlQUFlO1lBZVIsa0JBQWtCO1lBWHpCLGdCQUFnQjs7O3FCQXFCZixLQUFLO29CQUNMLFNBQVMsU0FBQyxPQUFPO3dCQWFqQixTQUFTLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZEV4Y2VsU2VydmljZSwgRXhjZWxUZW1wbGF0ZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhjZWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZE5vdGlmeVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTG9hZGluZ1NlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZFRyYW5zbGF0ZVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE1vZGFsIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9tb2RhbCc7XHJcbmltcG9ydCB7IFNkVXBsb2FkRXhjZWxPcHRpb24sIFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uIH0gZnJvbSAnLi91cGxvYWQtZXhjZWwubW9kZWwnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkQ29sdW1uSGlkZGVuUGlwZSB9IGZyb20gJy4vcGlwZXMvY29sdW1tLWhpZGRlbi5waXBlJztcclxudHlwZSBBT0EgPSBBcnJheTxBcnJheTxhbnk+PjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtdXBsb2FkLWV4Y2VsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RVcGxvYWRFeGNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGltcG9ydElkID0gJ0knICsgdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIG9wdGlvbjogU2RVcGxvYWRFeGNlbE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBTZE1vZGFsO1xyXG4gIGl0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG9yaWdpbkl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGhhc0Rlc2NyaXB0aW9uID0gZmFsc2U7XHJcblxyXG4gIHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnO1xyXG4gIGZpbHRlcmVkSXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgdmlld0l0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgbnVtYmVyT2ZFcnJvciA9IDA7XHJcbiAgbnVtYmVyT2ZXYXJuaW5nID0gMDtcclxuICBmaWxlOiBGaWxlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHRoaXMuI3JlbG9hZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBpc1VwbG9hZGVkOiBib29sZWFuO1xyXG4gIGlzRG93bmxvYWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZENvbHVtbkhpZGRlbjogU2RDb2x1bW5IaWRkZW5QaXBlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jcmVzZXQoKTtcclxuICAgIHRoaXMubW9kYWwub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAjcmVzZXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm9yaWdpbkl0ZW1zID0gW107XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXTtcclxuICAgIHRoaXMudmlld0l0ZW1zID0gW107XHJcbiAgICB0aGlzLm51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSAwO1xyXG4gICAgdGhpcy5udW1iZXJPZldhcm5pbmcgPSAwO1xyXG4gICAgdGhpcy5zaG93aW5nID0gJ0FMTCc7XHJcbiAgfVxyXG5cclxuICAjcmVsb2FkID0gKCkgPT4ge1xyXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleDtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvd2luZyA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgcmV0dXJuICFpdGVtLnZhbGlkYXRpb24/LmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnV0FSTklORycpIHtcclxuICAgICAgICByZXR1cm4gISFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3I7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXRlbS52YWxpZGF0aW9uPy5lcnJvcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52aWV3SXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXNcclxuICAgICAgLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4ID49IHBhZ2VJbmRleCAqIHBhZ2VTaXplICYmIGluZGV4IDwgKHBhZ2VJbmRleCArIDEpICogcGFnZVNpemUpO1xyXG5cclxuICAgIHRoaXMubnVtYmVyT2ZTdWNjZXNzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvciAmJiAhaXRlbS52YWxpZGF0aW9uPy53YXJuaW5nKS5sZW5ndGg7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICAgIHRoaXMubnVtYmVyT2ZXYXJuaW5nID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICAgIGNvbnN0IHsgaXRlbXMsIGZpbGUgfSA9IGF3YWl0IHRoaXMuI2ltcG9ydCgpO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb24uY29sdW1ucy5zb21lKGUgPT4gISFlLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmhhc0Rlc2NyaXB0aW9uID8gMiA6IDE7XHJcbiAgICAgIGl0ZW1zLnNwbGljZSgwLCBvZmZzZXQpO1xyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTm8gZGF0YSB0byBpbXBvcnRgKX1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHRoaXMub3B0aW9uLmxpbWl0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTGltaXQgcm93c2ApfTogJHt0aGlzLm9wdGlvbi5saW1pdH1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jcmVzZXQoKTtcclxuICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IGl0ZW1zO1xyXG4gICAgICBjb25zdCB7IG1hcHBpbmdJdGVtcyB9ID0gdGhpcy5vcHRpb247XHJcbiAgICAgIGlmKG1hcHBpbmdJdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXBwaW5nSXRlbXMoaXRlbXMpO1xyXG4gICAgICAgIGlmKGRhdGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gYXdhaXQgZGF0YTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEgfHwgaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgaXRlbV0gb2YgdGhpcy5pdGVtcy5lbnRyaWVzKCkpIHtcclxuICAgICAgICBpdGVtLm9yaWdpbiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgIGl0ZW0uZXhjZWxJbmRleCA9IGlkeCArICh0aGlzLmhhc0Rlc2NyaXB0aW9uID8gNCA6IDMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE7hur91IGtow7RuZyBjw7MgZXJyb3IgdGjDrCB0aeG6v3AgdOG7pWMgdmFsaWRhdGUgdOG7qyBvcHRpb24gdmFsaWRhdGUgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICBpZiAoIXRoaXMuaXRlbXMuc29tZShpdGVtID0+ICEhaXRlbS52YWxpZGF0aW9uLmVycm9yKSAmJiB0aGlzLm9wdGlvbi5lcnJvclZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5vcHRpb24uZXJyb3JWYWxpZGF0aW9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gdGhpcy5pdGVtc1tyZXN1bHQuaWR4XS52YWxpZGF0aW9uLmVycm9yID0gcmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBO4bq/dSBraMO0bmcgY8OzIHdhcm5pbmcgdGjDrCB0aeG6v3AgdOG7pWMgdmFsaWRhdGUgdOG7qyBvcHRpb24gdmFsaWRhdGUgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICBpZiAoIXRoaXMuaXRlbXMuc29tZShpdGVtID0+ICEhaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpICYmIHRoaXMub3B0aW9uLndhcm5pbmdWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMub3B0aW9uLndhcm5pbmdWYWxpZGF0aW9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gdGhpcy5pdGVtc1tyZXN1bHQuaWR4XS52YWxpZGF0aW9uLndhcm5pbmcgPSByZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLiNyZWxvYWQoKTtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgdGhpcy5pc1VwbG9hZGVkID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmhhbmRsZS5lcnJvcihlcnIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSA9IGFzeW5jIChpdGVtOiB7IFt4OiBzdHJpbmddOiBhbnk7IHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uOyB9KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uOiBTZFVwbG9hZEV4Y2VsVmFsaWRhdGlvbiA9IHtcclxuICAgICAgZXJyb3I6ICcnLFxyXG4gICAgICB3YXJuaW5nOiAnJyxcclxuICAgICAgZGF0YToge31cclxuICAgIH07XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5vcHRpb24uY29sdW1ucykge1xyXG4gICAgICBpZighdGhpcy5zZENvbHVtbkhpZGRlbi50cmFuc2Zvcm0oY29sdW1uKSl7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0gPSB7fTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoY29sdW1uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF0gPz8gY29sdW1uLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5yZXF1aXJlZCAmJiAhaXRlbVtjb2x1bW4uZmllbGRdICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gMCkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ3JlcXVpcmVkJyl9YDtcclxuICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbVtjb2x1bW4uZmllbGRdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKGNvbHVtbi5taW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPCBjb2x1bW4ubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdNaW4gbGVuZ3RoJyl9OiAke2NvbHVtbi5taW5MZW5ndGh9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IGNvbHVtbi5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ01heCBsZW5ndGgnKX06ICR7Y29sdW1uLm1heExlbmd0aH1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gK2l0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ2lzIG5vdCBhIG51bWJlcicpfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghaXRlbVtjb2x1bW4uZmllbGRdICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gMCkge1xyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1pblZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbVtjb2x1bW4uZmllbGRdIDwgY29sdW1uLm1pblZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnTWluIHZhbHVlJyl9OiAke2NvbHVtbi5taW5WYWx1ZX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWF4VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gPiBjb2x1bW4ubWF4VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdNYXggdmFsdWUnKX06ICR7Y29sdW1uLm1heFZhbHVlfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gMCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IDEgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcxJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAraXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSB8fCAodmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IDEpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ1ZhbHVlIHNob3VkIGJlIDAgb3IgMScpfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdICYmIHR5cGVvZiAoaXRlbVtjb2x1bW4uZmllbGRdKSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIChpdGVtW2NvbHVtbi5maWVsZF0pICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ0ludmFsaWQgZGF0YSB0eXBlJyl9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLmNoZWNrVmFsdWVJbkFycmF5ICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnZhbHVlcy5zb21lKGUgPT4gZS50b1N0cmluZygpID09PSBpdGVtW2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdWYWx1ZSBub3QgaW4nKX0gWyR7Y29sdW1uLnZhbHVlcy5qb2luKCl9XWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICBjb25zdCB7IHR5cGUsIGZvcm1hdCB9ID0gY29sdW1uO1xyXG4gICAgICAgICAgY29uc3QgdmFsID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgaWYgKGZvcm1hdCAmJiBpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsKSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScgJiYgIXRoaXMuI2lzVmFsaWREYXRlKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd0aW1lJyAmJiAhdGhpcy4jaXNWYWxpZFRpbWUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiAhdGhpcy4jaXNWYWxpZERhdGVUaW1lKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gRGF0ZS5wYXJzZUZyb20odmFsLCBjb2x1bW4uZm9ybWF0KS50b0Zvcm1hdCgnTU0vZGQveXl5eSBISDptbTpzcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSAmJiAhRGF0ZS5pc0RhdGUoaXRlbVtjb2x1bW4uZmllbGRdKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBkYXRlJyl9OiAke2l0ZW1bY29sdW1uLmZpZWxkXX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgJiYgY29sdW1uLmVycm9yVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBjb2x1bW4uZXJyb3JWYWxpZGF0aW9uKGl0ZW0sIGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtlcnJvcn1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke2Vycm9yfTxicj5gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS53YXJuaW5nICYmIGNvbHVtbi53YXJuaW5nVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgY29uc3Qgd2FybmluZyA9IGF3YWl0IGNvbHVtbi53YXJuaW5nVmFsaWRhdGlvbihpdGVtLCBpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgaWYgKHdhcm5pbmcpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0ud2FybmluZyA9IGAke3dhcm5pbmd9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5nICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3dhcm5pbmd9PGJyPmA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7ZXg/Lm1lc3NhZ2UgfHwgZXg/LmVycm9yIHx8IGV4IHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEnfWA7XHJcbiAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXRlbS52YWxpZGF0aW9uID0gdmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gICNtYXBJdGVtID0gKGl0ZW06IEV4Y2VsSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyB2YWxpZGF0aW9uLCBvcmlnaW4sIGV4Y2VsSW5kZXgsIC4uLnJlbWFpbiB9ID0gaXRlbTtcclxuICAgIHJldHVybiByZW1haW47XHJcbiAgfVxyXG5cclxuICBhY2NlcHQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBzdWNjZXNzSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24uZXJyb3IgJiYgIWl0ZW0udmFsaWRhdGlvbi53YXJuaW5nKS5tYXAodGhpcy4jbWFwSXRlbSk7XHJcbiAgICBjb25zdCBlcnJvckl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbGlkYXRpb24uZXJyb3IpLm1hcCh0aGlzLiNtYXBJdGVtKTtcclxuICAgIGNvbnN0IHdhcm5pbmdJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0udmFsaWRhdGlvbi5lcnJvciAmJiBpdGVtLnZhbGlkYXRpb24ud2FybmluZykubWFwKHRoaXMuI21hcEl0ZW0pO1xyXG4gICAgdGhpcy5vcHRpb24/Lm9uQWNjZXB0KHRoaXMuaXRlbXMubWFwKHRoaXMuI21hcEl0ZW0pLCBzdWNjZXNzSXRlbXMsIGVycm9ySXRlbXMsIHdhcm5pbmdJdGVtcywgdGhpcy5maWxlKTtcclxuXHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdGlvbiA9ICh2YWxpZGF0ZXM6IHsgaWR4OiBudW1iZXIsIG1lc3NhZ2VFcnJvcj86IHN0cmluZywgbWVzc2FnZVdhcm5pbmc/OiBzdHJpbmcsIG1lc3NhZ2VTdWNjZXNzPzogc3RyaW5nIH1bXSkgPT4ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGVzKSkge1xyXG4gICAgICB2YWxpZGF0ZXMuZm9yRWFjaCh2YWxpZGF0ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1t2YWxpZGF0ZS5pZHhdLnZhbGlkYXRpb24uZXJyb3IgPSB2YWxpZGF0ZS5tZXNzYWdlRXJyb3I7XHJcbiAgICAgICAgdGhpcy5pdGVtc1t2YWxpZGF0ZS5pZHhdLnZhbGlkYXRpb24ud2FybmluZyA9IHZhbGlkYXRlLm1lc3NhZ2VXYXJuaW5nO1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLnN1Y2Nlc3MgPSB2YWxpZGF0ZS5tZXNzYWdlU3VjY2VzcztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLiNyZWxvYWQoKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHZpZXcgPSAoc2hvd2luZzogJ0FMTCcgfCAnU1VDQ0VTUycgfCAnV0FSTklORycgfCAnRVJST1InID0gJ0FMTCcpID0+IHtcclxuICAgIHRoaXMuc2hvd2luZyA9IHNob3dpbmc7XHJcbiAgICB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgIHRoaXMuI3JlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHNoZWV0czoge1xyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgICAgZmllbGRzOiBzdHJpbmdbXVxyXG4gICAgfVtdID0gW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbj8uc2hlZXRzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWV0IG9mIHRoaXMub3B0aW9uLnNoZWV0cykge1xyXG4gICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpKSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBzaGVldC5pdGVtcyxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgY29sdW1uTm90SGlkZGVuID0gdGhpcy5vcHRpb24uY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IHRoaXMuc2RDb2x1bW5IaWRkZW4udHJhbnNmb3JtKGNvbHVtbikpOyAgICBcclxuICAgIGNvbnN0IGV4Y2VsVGVtcGxhdGU6IEV4Y2VsVGVtcGxhdGUgPSB7XHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLm9wdGlvbi5maWxlTmFtZSB8fCAnVGVtcGxhdGUnLFxyXG4gICAgICBjb2x1bW5zOiBjb2x1bW5Ob3RIaWRkZW4ubWFwKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIHJlcXVpcmVkOiBjb2x1bW4ucmVxdWlyZWQsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogY29sdW1uLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksXHJcbiAgICAgIHNoZWV0c1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNEb3dubG9hZFRlbXBsYXRlID0gdHJ1ZTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKGV4Y2VsVGVtcGxhdGUpLmZpbmFsbHkoKCk9PntcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkVGVtcGxhdGUgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHJlc3VsdD8uZmlsZVBhdGgpIHtcclxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmRvd25sb2FkKHJlc3VsdC5maWxlUGF0aCwgZXhjZWxUZW1wbGF0ZS5maWxlTmFtZSB8fCAnVGVtcGxhdGUueGxzeCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydCh7XHJcbiAgICAgIGNvbHVtbnM6IFt7XHJcbiAgICAgICAgZmllbGQ6ICdzZE1lc3NhZ2UnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdVcGxvYWQgbWVzc2FnZScpLFxyXG4gICAgICAgIHdpZHRoOiAnMjUwcHgnLFxyXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgICB9LCAuLi4gdGhpcy5vcHRpb24uY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IHRoaXMuc2RDb2x1bW5IaWRkZW4udHJhbnNmb3JtKGNvbHVtbikpXSxcclxuICAgICAgaXRlbXM6IHRoaXMuZmlsdGVyZWRJdGVtcy5tYXAoZSA9PiAoe1xyXG4gICAgICAgIC4uLmUub3JpZ2luLFxyXG4gICAgICAgIHNkTWVzc2FnZTogKGUudmFsaWRhdGlvbj8uZXJyb3IgfHwgZS52YWxpZGF0aW9uPy53YXJuaW5nIHx8IGUudmFsaWRhdGlvbj8uc3VjY2Vzcyk/LnJlcGxhY2UoLzxzdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoLzxcXC9zdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoLzxicj4vZywgJ1xcbicpXHJcbiAgICAgIH0pKVxyXG4gICAgfSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gIH1cclxuXHJcbiAgI2ltcG9ydCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8eyBpdGVtczogYW55W10sIGZpbGU6IEZpbGUgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoJChgIyR7dGhpcy5pbXBvcnRJZH1gKS5sZW5ndGgpIHtcclxuICAgICAgICAkKCdib2R5JykuY2hpbGRyZW4oYCMke3RoaXMuaW1wb3J0SWR9YCkucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgJCgnYm9keScpLmFwcGVuZChgPGlucHV0IGlkPVwiJHt0aGlzLmltcG9ydElkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgLz5gKTtcclxuXHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkub24oJ2NoYW5nZScsIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IHRhcmdldC5maWxlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdJbnZhbGlkIGZpbGUgZXh0ZW5zaW9uJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICBpZiAoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgIT09ICd4bHN4Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdQbGVhc2UgdXBsb2FkIC54bHN4IGZpbGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lczogQU9BID0gKFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywgeyBoZWFkZXI6IDEgfSkpO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBsaW5lc1swXTtcclxuICAgICAgICAgICAgbGluZXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHt9O1xyXG4gICAgICAgICAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2hlYWRlcl0gPSBsaW5lW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGlmIChsaW5lW2luZGV4XSAhPT0gdW5kZWZpbmVkICYmIGxpbmVbaW5kZXhdICE9PSBudWxsICYmIGxpbmVbaW5kZXhdLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVjb3JkW2hlYWRlcl0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IHJlY29yZFtoZWFkZXJdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbaGVhZGVyXSA9PT0gJycgfHwgcmVjb3JkW2hlYWRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBpdGVtczogcmVjb3JkcyxcclxuICAgICAgICAgICAgICBmaWxlOiB0YXJnZXQuZmlsZXNbMF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWREYXRlID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVnZXggPSAvXig/Oig/OjMxKFxcL3wtfFxcLikoPzowP1sxMzU3OF18MVswMl0pKVxcMXwoPzooPzoyOXwzMCkoXFwvfC18XFwuKSg/OjA/WzEzLTldfDFbMC0yXSlcXDIpKSg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSR8Xig/OjI5KFxcL3wtfFxcLikwPzJcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXGQpPyg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzooPzoxNnxbMjQ2OF1bMDQ4XXxbMzU3OV1bMjZdKTAwKSkpKSR8Xig/OjA/WzEtOV18MVxcZHwyWzAtOF0pKFxcL3wtfFxcLikoPzooPzowP1sxLTldKXwoPzoxWzAtMl0pKVxcNCg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSQvO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWRUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAjaXNWYWxpZERhdGVUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZT8uc3BsaXQoJyAnKTtcclxuICAgIGlmIChkYXRlcy5sZW5ndGggIT09IDIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZSA9IGRhdGVzWzBdO1xyXG4gICAgaWYgKCF0aGlzLiNpc1ZhbGlkRGF0ZSgnZGQvTU0veXl5eScsIGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRpbWUgPSBkYXRlc1sxXTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oMFswLTldfDFbMC05XXwyWzAtM10pKFxcOikoMFswLTldfFswLTVdWzAtOV0pJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh0aW1lKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeGNlbEl0ZW0ge1xyXG4gIHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uO1xyXG4gIG9yaWdpbjogYW55O1xyXG4gIGV4Y2VsSW5kZXg6IG51bWJlcjtcclxuICBbY29sdW1uOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuIl19
|
|
496
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic3JjL2xpYi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFNeEIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVFoRSxNQUFNLE9BQU8sYUFBYTtJQTBCeEIsWUFDVSxHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsYUFBOEIsRUFDOUIsY0FBa0MsRUFDbEMsY0FBZ0M7UUFMaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsa0JBQWEsR0FBYixh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QWMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7NEJBQ3BILFNBQVM7eUJBQ1Y7cUJBQ0Y7eUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTt3QkFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTs0QkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7eUJBQzFCO3dCQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7NEJBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO3lCQUMxQjt3QkFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZELFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0NBQzlFLFVBQVUsQ0FBQyxLQUFLLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLGNBQWMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7NkJBQ3JIO3lCQUNGO3FC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Q0FBQzthQUNkO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxnREFBQSxJQUFJLEVBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUMxQyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLGlEQUFpRCxDQUFDO1lBQ2hFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLEVBQUE7SUE5YkQsQ0FBQztJQWpCRCxJQUE2QixTQUFTLENBQUMsU0FBdUI7UUFDNUQsSUFBSSxTQUFTLElBQUksNkNBQW9CLFNBQVMsRUFBRTtZQUM5Qyx1QkFBQSxJQUFJLGNBQWMsU0FBUyxFQUFDO1lBQzVCLDRDQUFtQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLHVDQUFjLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFjRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCw0Q0FBbUIsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztZQTlDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0Isb2hQQUE0Qzs7YUFFN0M7OztZQWhDNkMsaUJBQWlCO1lBd0J0RCxlQUFlO1lBTnRCLGtCQUFrQjtZQVJsQixlQUFlO1lBZVIsa0JBQWtCO1lBWHpCLGdCQUFnQjs7O3FCQXFCZixLQUFLO29CQUNMLFNBQVMsU0FBQyxPQUFPO3dCQWFqQixTQUFTLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZEV4Y2VsU2VydmljZSwgRXhjZWxUZW1wbGF0ZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhjZWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZE5vdGlmeVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTG9hZGluZ1NlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZFRyYW5zbGF0ZVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE1vZGFsIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9tb2RhbCc7XHJcbmltcG9ydCB7IFNkVXBsb2FkRXhjZWxPcHRpb24sIFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uIH0gZnJvbSAnLi91cGxvYWQtZXhjZWwubW9kZWwnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkQ29sdW1uSGlkZGVuUGlwZSB9IGZyb20gJy4vcGlwZXMvY29sdW1tLWhpZGRlbi5waXBlJztcclxudHlwZSBBT0EgPSBBcnJheTxBcnJheTxhbnk+PjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtdXBsb2FkLWV4Y2VsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RVcGxvYWRFeGNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGltcG9ydElkID0gJ0knICsgdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIG9wdGlvbjogU2RVcGxvYWRFeGNlbE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBTZE1vZGFsO1xyXG4gIGl0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG9yaWdpbkl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGhhc0Rlc2NyaXB0aW9uID0gZmFsc2U7XHJcblxyXG4gIHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnO1xyXG4gIGZpbHRlcmVkSXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgdmlld0l0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgbnVtYmVyT2ZFcnJvciA9IDA7XHJcbiAgbnVtYmVyT2ZXYXJuaW5nID0gMDtcclxuICBmaWxlOiBGaWxlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHRoaXMuI3JlbG9hZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBpc1VwbG9hZGVkOiBib29sZWFuO1xyXG4gIGlzRG93bmxvYWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZENvbHVtbkhpZGRlbjogU2RDb2x1bW5IaWRkZW5QaXBlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jcmVzZXQoKTtcclxuICAgIHRoaXMubW9kYWwub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAjcmVzZXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm9yaWdpbkl0ZW1zID0gW107XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXTtcclxuICAgIHRoaXMudmlld0l0ZW1zID0gW107XHJcbiAgICB0aGlzLm51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSAwO1xyXG4gICAgdGhpcy5udW1iZXJPZldhcm5pbmcgPSAwO1xyXG4gICAgdGhpcy5zaG93aW5nID0gJ0FMTCc7XHJcbiAgfVxyXG5cclxuICAjcmVsb2FkID0gKCkgPT4ge1xyXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleDtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvd2luZyA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgcmV0dXJuICFpdGVtLnZhbGlkYXRpb24/LmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnV0FSTklORycpIHtcclxuICAgICAgICByZXR1cm4gISFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3I7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXRlbS52YWxpZGF0aW9uPy5lcnJvcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52aWV3SXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXNcclxuICAgICAgLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4ID49IHBhZ2VJbmRleCAqIHBhZ2VTaXplICYmIGluZGV4IDwgKHBhZ2VJbmRleCArIDEpICogcGFnZVNpemUpO1xyXG5cclxuICAgIHRoaXMubnVtYmVyT2ZTdWNjZXNzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvciAmJiAhaXRlbS52YWxpZGF0aW9uPy53YXJuaW5nKS5sZW5ndGg7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICAgIHRoaXMubnVtYmVyT2ZXYXJuaW5nID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICAgIGNvbnN0IHsgaXRlbXMsIGZpbGUgfSA9IGF3YWl0IHRoaXMuI2ltcG9ydCgpO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb24uY29sdW1ucy5zb21lKGUgPT4gISFlLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmhhc0Rlc2NyaXB0aW9uID8gMiA6IDE7XHJcbiAgICAgIGl0ZW1zLnNwbGljZSgwLCBvZmZzZXQpO1xyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTm8gZGF0YSB0byBpbXBvcnRgKX1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHRoaXMub3B0aW9uLmxpbWl0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTGltaXQgcm93c2ApfTogJHt0aGlzLm9wdGlvbi5saW1pdH1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jcmVzZXQoKTtcclxuICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IGl0ZW1zO1xyXG4gICAgICBjb25zdCB7IG1hcHBpbmdJdGVtcyB9ID0gdGhpcy5vcHRpb247XHJcbiAgICAgIGlmKG1hcHBpbmdJdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXBwaW5nSXRlbXMoaXRlbXMpO1xyXG4gICAgICAgIGlmKGRhdGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gYXdhaXQgZGF0YTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEgfHwgaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgaXRlbV0gb2YgdGhpcy5pdGVtcy5lbnRyaWVzKCkpIHtcclxuICAgICAgICBpdGVtLnNkT3JpZ2luID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgaXRlbS5leGNlbEluZGV4ID0gaWR4ICsgKHRoaXMuaGFzRGVzY3JpcHRpb24gPyA0IDogMyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZShpdGVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTuG6v3Uga2jDtG5nIGPDsyBlcnJvciB0aMOsIHRp4bq/cCB04bulYyB2YWxpZGF0ZSB04burIG9wdGlvbiB2YWxpZGF0ZSB0cnV54buBbiB2w6BvXHJcbiAgICAgIGlmICghdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gISFpdGVtLnZhbGlkYXRpb24uZXJyb3IpICYmIHRoaXMub3B0aW9uLmVycm9yVmFsaWRhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm9wdGlvbi5lcnJvclZhbGlkYXRpb24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB0aGlzLml0ZW1zW3Jlc3VsdC5pZHhdLnZhbGlkYXRpb24uZXJyb3IgPSByZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE7hur91IGtow7RuZyBjw7Mgd2FybmluZyB0aMOsIHRp4bq/cCB04bulYyB2YWxpZGF0ZSB04burIG9wdGlvbiB2YWxpZGF0ZSB0cnV54buBbiB2w6BvXHJcbiAgICAgIGlmICghdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gISFpdGVtLnZhbGlkYXRpb24ud2FybmluZykgJiYgdGhpcy5vcHRpb24ud2FybmluZ1ZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5vcHRpb24ud2FybmluZ1ZhbGlkYXRpb24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB0aGlzLml0ZW1zW3Jlc3VsdC5pZHhdLnZhbGlkYXRpb24ud2FybmluZyA9IHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuI3JlbG9hZCgpO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlID0gYXN5bmMgKGl0ZW06IHsgW3g6IHN0cmluZ106IGFueTsgdmFsaWRhdGlvbjogU2RVcGxvYWRFeGNlbFZhbGlkYXRpb247IH0pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uID0ge1xyXG4gICAgICBlcnJvcjogJycsXHJcbiAgICAgIHdhcm5pbmc6ICcnLFxyXG4gICAgICBkYXRhOiB7fVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLm9wdGlvbi5jb2x1bW5zKSB7XHJcbiAgICAgIGlmKCF0aGlzLnNkQ29sdW1uSGlkZGVuLnRyYW5zZm9ybShjb2x1bW4pKXtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXSA9IHt9O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXSA/PyBjb2x1bW4uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnJlcXVpcmVkICYmICFpdGVtW2NvbHVtbi5maWVsZF0gJiYgaXRlbVtjb2x1bW4uZmllbGRdICE9PSAwKSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgncmVxdWlyZWQnKX1gO1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChpdGVtW2NvbHVtbi5maWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA8IGNvbHVtbi5taW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ01pbiBsZW5ndGgnKX06ICR7Y29sdW1uLm1pbkxlbmd0aH1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gY29sdW1uLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnTWF4IGxlbmd0aCcpfTogJHtjb2x1bW4ubWF4TGVuZ3RofWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAraXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnaXMgbm90IGEgbnVtYmVyJyl9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFpdGVtW2NvbHVtbi5maWVsZF0gJiYgaXRlbVtjb2x1bW4uZmllbGRdICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWluVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gPCBjb2x1bW4ubWluVmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdNaW4gdmFsdWUnKX06ICR7Y29sdW1uLm1pblZhbHVlfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi5tYXhWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bY29sdW1uLmZpZWxkXSA+IGNvbHVtbi5tYXhWYWx1ZSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ01heCB2YWx1ZScpfTogJHtjb2x1bW4ubWF4VmFsdWV9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSAwIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gJzAnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gMSB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gJzEnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICtpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSAhPT0gMCAmJiB2YWx1ZSAhPT0gMSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnVmFsdWUgc2hvdWQgYmUgMCBvciAxJyl9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIChpdGVtW2NvbHVtbi5maWVsZF0pICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgKGl0ZW1bY29sdW1uLmZpZWxkXSkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnSW52YWxpZCBkYXRhIHR5cGUnKX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4uY2hlY2tWYWx1ZUluQXJyYXkgJiYgaXRlbVtjb2x1bW4uZmllbGRdICYmICFjb2x1bW4udmFsdWVzLnNvbWUoZSA9PiBlLnRvU3RyaW5nKCkgPT09IGl0ZW1bY29sdW1uLmZpZWxkXS50b1N0cmluZygpKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ1ZhbHVlIG5vdCBpbicpfSBbJHtjb2x1bW4udmFsdWVzLmpvaW4oKX1dYDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnIHx8IGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgIGNvbnN0IHsgdHlwZSwgZm9ybWF0IH0gPSBjb2x1bW47XHJcbiAgICAgICAgICBjb25zdCB2YWwgPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAoZm9ybWF0ICYmIGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mICh2YWwpICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkYXRlJyAmJiAhdGhpcy4jaXNWYWxpZERhdGUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RpbWUnICYmICF0aGlzLiNpc1ZhbGlkVGltZShmb3JtYXQsIHZhbCkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZXRpbWUnICYmICF0aGlzLiNpc1ZhbGlkRGF0ZVRpbWUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBEYXRlLnBhcnNlRnJvbSh2YWwsIGNvbHVtbi5mb3JtYXQpLnRvRm9ybWF0KCdNTS9kZC95eXl5IEhIOm1tOnNzJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdICYmICFEYXRlLmlzRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGRhdGUnKX06ICR7aXRlbVtjb2x1bW4uZmllbGRdfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciAmJiBjb2x1bW4uZXJyb3JWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGNvbHVtbi5lcnJvclZhbGlkYXRpb24oaXRlbSwgaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2Vycm9yfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7ZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLndhcm5pbmcgJiYgY29sdW1uLndhcm5pbmdWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJuaW5nID0gYXdhaXQgY29sdW1uLndhcm5pbmdWYWxpZGF0aW9uKGl0ZW0sIGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAod2FybmluZykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS53YXJuaW5nID0gYCR7d2FybmluZ31gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLndhcm5pbmcgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7d2FybmluZ308YnI+YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtleD8ubWVzc2FnZSB8fCBleD8uZXJyb3IgfHwgZXggfHwgJ0PDsyBs4buXaSB44bqjeSByYSd9YDtcclxuICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpdGVtLnZhbGlkYXRpb24gPSB2YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgI21hcEl0ZW0gPSAoaXRlbTogRXhjZWxJdGVtKSA9PiB7XHJcbiAgICBjb25zdCB7IHZhbGlkYXRpb24sIHNkT3JpZ2luLCBleGNlbEluZGV4LCAuLi5yZW1haW4gfSA9IGl0ZW07XHJcbiAgICByZXR1cm4gcmVtYWluO1xyXG4gIH1cclxuXHJcbiAgYWNjZXB0ID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgc3VjY2Vzc0l0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uLmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24ud2FybmluZykubWFwKHRoaXMuI21hcEl0ZW0pO1xyXG4gICAgY29uc3QgZXJyb3JJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWxpZGF0aW9uLmVycm9yKS5tYXAodGhpcy4jbWFwSXRlbSk7XHJcbiAgICBjb25zdCB3YXJuaW5nSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24uZXJyb3IgJiYgaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpLm1hcCh0aGlzLiNtYXBJdGVtKTtcclxuICAgIHRoaXMub3B0aW9uPy5vbkFjY2VwdCh0aGlzLml0ZW1zLm1hcCh0aGlzLiNtYXBJdGVtKSwgc3VjY2Vzc0l0ZW1zLCBlcnJvckl0ZW1zLCB3YXJuaW5nSXRlbXMsIHRoaXMuZmlsZSk7XHJcblxyXG4gICAgdGhpcy5pc1VwbG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRpb24gPSAodmFsaWRhdGVzOiB7IGlkeDogbnVtYmVyLCBtZXNzYWdlRXJyb3I/OiBzdHJpbmcsIG1lc3NhZ2VXYXJuaW5nPzogc3RyaW5nLCBtZXNzYWdlU3VjY2Vzcz86IHN0cmluZyB9W10pID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkYXRlcykpIHtcclxuICAgICAgdmFsaWRhdGVzLmZvckVhY2godmFsaWRhdGUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLmVycm9yID0gdmFsaWRhdGUubWVzc2FnZUVycm9yO1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLndhcm5pbmcgPSB2YWxpZGF0ZS5tZXNzYWdlV2FybmluZztcclxuICAgICAgICB0aGlzLml0ZW1zW3ZhbGlkYXRlLmlkeF0udmFsaWRhdGlvbi5zdWNjZXNzID0gdmFsaWRhdGUubWVzc2FnZVN1Y2Nlc3M7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jcmVsb2FkKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB2aWV3ID0gKHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnKSA9PiB7XHJcbiAgICB0aGlzLnNob3dpbmcgPSBzaG93aW5nO1xyXG4gICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLiNyZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBzaGVldHM6IHtcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICBpdGVtczogYW55W10sXHJcbiAgICAgIGZpZWxkczogc3RyaW5nW11cclxuICAgIH1bXSA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24/LnNoZWV0cykpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLm9wdGlvbi5zaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBzaGVldC5pdGVtcyAmJiBzaGVldC5maWVsZHMpIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSkge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogc2hlZXQuaXRlbXMsXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogYXdhaXQgc2hlZXQuaXRlbXMoKSxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbk5vdEhpZGRlbiA9IHRoaXMub3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLnNkQ29sdW1uSGlkZGVuLnRyYW5zZm9ybShjb2x1bW4pKTsgICAgXHJcbiAgICBjb25zdCBleGNlbFRlbXBsYXRlOiBFeGNlbFRlbXBsYXRlID0ge1xyXG4gICAgICBmaWxlTmFtZTogdGhpcy5vcHRpb24uZmlsZU5hbWUgfHwgJ1RlbXBsYXRlJyxcclxuICAgICAgY29sdW1uczogY29sdW1uTm90SGlkZGVuLm1hcChjb2x1bW4gPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICByZXF1aXJlZDogY29sdW1uLnJlcXVpcmVkLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGNvbHVtbi5kZXNjcmlwdGlvblxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGVldHNcclxuICAgIH07XHJcbiAgICB0aGlzLmlzRG93bmxvYWRUZW1wbGF0ZSA9IHRydWU7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUZW1wbGF0ZShleGNlbFRlbXBsYXRlKS5maW5hbGx5KCgpPT57XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZFRlbXBsYXRlID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICAgIGlmIChyZXN1bHQ/LmZpbGVQYXRoKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5kb3dubG9hZChyZXN1bHQuZmlsZVBhdGgsIGV4Y2VsVGVtcGxhdGUuZmlsZU5hbWUgfHwgJ1RlbXBsYXRlLnhsc3gnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnQoe1xyXG4gICAgICBjb2x1bW5zOiBbe1xyXG4gICAgICAgIGZpZWxkOiAnc2RNZXNzYWdlJyxcclxuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnVXBsb2FkIG1lc3NhZ2UnKSxcclxuICAgICAgICB3aWR0aDogJzI1MHB4JyxcclxuICAgICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgICAgfSwgLi4uIHRoaXMub3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLnNkQ29sdW1uSGlkZGVuLnRyYW5zZm9ybShjb2x1bW4pKV0sXHJcbiAgICAgIGl0ZW1zOiB0aGlzLmZpbHRlcmVkSXRlbXMubWFwKGUgPT4gKHtcclxuICAgICAgICAuLi5lLnNkT3JpZ2luLFxyXG4gICAgICAgIHNkTWVzc2FnZTogKGUudmFsaWRhdGlvbj8uZXJyb3IgfHwgZS52YWxpZGF0aW9uPy53YXJuaW5nIHx8IGUudmFsaWRhdGlvbj8uc3VjY2Vzcyk/LnJlcGxhY2UoLzxzdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoLzxcXC9zdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoLzxicj4vZywgJ1xcbicpXHJcbiAgICAgIH0pKVxyXG4gICAgfSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gIH1cclxuXHJcbiAgI2ltcG9ydCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8eyBpdGVtczogYW55W10sIGZpbGU6IEZpbGUgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoJChgIyR7dGhpcy5pbXBvcnRJZH1gKS5sZW5ndGgpIHtcclxuICAgICAgICAkKCdib2R5JykuY2hpbGRyZW4oYCMke3RoaXMuaW1wb3J0SWR9YCkucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgJCgnYm9keScpLmFwcGVuZChgPGlucHV0IGlkPVwiJHt0aGlzLmltcG9ydElkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgLz5gKTtcclxuXHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkub24oJ2NoYW5nZScsIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IHRhcmdldC5maWxlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdJbnZhbGlkIGZpbGUgZXh0ZW5zaW9uJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICBpZiAoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgIT09ICd4bHN4Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdQbGVhc2UgdXBsb2FkIC54bHN4IGZpbGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lczogQU9BID0gKFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywgeyBoZWFkZXI6IDEgfSkpO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBsaW5lc1swXTtcclxuICAgICAgICAgICAgbGluZXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHt9O1xyXG4gICAgICAgICAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2hlYWRlcl0gPSBsaW5lW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGlmIChsaW5lW2luZGV4XSAhPT0gdW5kZWZpbmVkICYmIGxpbmVbaW5kZXhdICE9PSBudWxsICYmIGxpbmVbaW5kZXhdLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVjb3JkW2hlYWRlcl0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IHJlY29yZFtoZWFkZXJdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbaGVhZGVyXSA9PT0gJycgfHwgcmVjb3JkW2hlYWRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBpdGVtczogcmVjb3JkcyxcclxuICAgICAgICAgICAgICBmaWxlOiB0YXJnZXQuZmlsZXNbMF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWREYXRlID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVnZXggPSAvXig/Oig/OjMxKFxcL3wtfFxcLikoPzowP1sxMzU3OF18MVswMl0pKVxcMXwoPzooPzoyOXwzMCkoXFwvfC18XFwuKSg/OjA/WzEzLTldfDFbMC0yXSlcXDIpKSg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSR8Xig/OjI5KFxcL3wtfFxcLikwPzJcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXGQpPyg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzooPzoxNnxbMjQ2OF1bMDQ4XXxbMzU3OV1bMjZdKTAwKSkpKSR8Xig/OjA/WzEtOV18MVxcZHwyWzAtOF0pKFxcL3wtfFxcLikoPzooPzowP1sxLTldKXwoPzoxWzAtMl0pKVxcNCg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSQvO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWRUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAjaXNWYWxpZERhdGVUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZT8uc3BsaXQoJyAnKTtcclxuICAgIGlmIChkYXRlcy5sZW5ndGggIT09IDIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZSA9IGRhdGVzWzBdO1xyXG4gICAgaWYgKCF0aGlzLiNpc1ZhbGlkRGF0ZSgnZGQvTU0veXl5eScsIGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRpbWUgPSBkYXRlc1sxXTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oMFswLTldfDFbMC05XXwyWzAtM10pKFxcOikoMFswLTldfFswLTVdWzAtOV0pJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh0aW1lKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeGNlbEl0ZW0ge1xyXG4gIHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uO1xyXG4gIHNkT3JpZ2luOiBhbnk7XHJcbiAgZXhjZWxJbmRleDogbnVtYmVyO1xyXG4gIFtjb2x1bW46IHN0cmluZ106IGFueTtcclxufVxyXG4iXX0=
|
|
@@ -119,7 +119,7 @@ export class SdUtilityService {
|
|
|
119
119
|
this.copyToClipboard = (text) => {
|
|
120
120
|
navigator.clipboard.writeText(text);
|
|
121
121
|
};
|
|
122
|
-
this.printHtml = (elementId) => {
|
|
122
|
+
this.printHtml = (elementId, fileName) => {
|
|
123
123
|
const printId = `sdPrintSection`;
|
|
124
124
|
const div = 'sd-print';
|
|
125
125
|
// const printContents = document.getElementById(elementId).innerHTML;
|
|
@@ -136,14 +136,12 @@ export class SdUtilityService {
|
|
|
136
136
|
printSection.appendChild(domClone);
|
|
137
137
|
document.body.insertBefore(printSection, document.body.firstChild);
|
|
138
138
|
document.querySelector('body app-root').classList.add(div);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
// oldElem.parentNode.removeChild(oldElem); // oldElem.remove() not supported by IE
|
|
144
|
-
// }
|
|
145
|
-
// }, 100);
|
|
139
|
+
const title = document.title;
|
|
140
|
+
if (fileName) {
|
|
141
|
+
document.title = fileName;
|
|
142
|
+
}
|
|
146
143
|
window.print();
|
|
144
|
+
document.title = title;
|
|
147
145
|
document.querySelector('body app-root').classList.remove(div);
|
|
148
146
|
const oldElem = document.getElementById(printId);
|
|
149
147
|
if (oldElem !== null) {
|
|
@@ -162,4 +160,4 @@ SdUtilityService.decorators = [
|
|
|
162
160
|
SdUtilityService.ctorParameters = () => [
|
|
163
161
|
{ type: HttpClient }
|
|
164
162
|
];
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS91dGlsaXR5LyIsInNvdXJjZXMiOlsic3JjL2xpYi91dGlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLGlEQUFpRDtBQUNqRCxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFDdEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBS2xELE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUYxQyxvQkFBWSx1Q0FBdUMsRUFBQztRQUdwRCxxQkFBYSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDO1FBRXRDLFlBQU8sR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBDLGtCQUFhLEdBQUcsQ0FBSSxLQUFVLEVBQUUsR0FBVyxFQUF3QixFQUFFO1lBQ25FLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUE7UUFFRCx5QkFBb0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFOztZQUN2QyxJQUFJLEdBQUcsU0FBRyxLQUFLLGFBQUwsS0FB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Q0FBdUM7YUFDakY7UUFDSCxDQUFDLENBQUE7SUE1SjZDLENBQUM7Ozs7O1lBTmhELFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBSlEsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuLy8gaW1wb3J0IFBERk1lcmdlciBmcm9tICdwZGYtbWVyZ2VyLWpzL2Jyb3dzZXInO1xyXG5pbXBvcnQgbWQ1IGZyb20gJ21kNSc7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFV0aWxpdHlTZXJ2aWNlIHtcclxuICAjdXBsb2FkSWQgPSAnVTFlMDljMWMwLWI2NDctNDM3ZS05OTVlLWQ3YTFhMWI2MDU1MCc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCkgeyB9XHJcbiAgI3RyYW5zbGF0ZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZTtcclxuXHJcbiAgaGFzaE1ENSA9IChrZXk6IHN0cmluZykgPT4gbWQ1KGtleSk7XHJcblxyXG4gIGFycmF5VG9PYmplY3QgPSA8VD4oaXRlbXM6IFRbXSwga2V5OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChvYmosIGl0ZW0pID0+IHsgb2JqW2l0ZW1ba2V5XV0gPSBpdGVtOyByZXR1cm4gb2JqOyB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VBbGlhc0xvd2VyQ2FzZSA9IChhbGlhczogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgc3RyID0gYWxpYXM/LnRvU3RyaW5nKCkgPz8gJyc7XHJcbiAgICBzdHIgPSBzdHIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL8OgfMOhfOG6oXzhuqN8w6N8w6J84bqnfOG6pXzhuq184bqpfOG6q3zEg3zhurF84bqvfOG6t3zhurN84bq1L2csICdhJyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6h8w6l84bq5fOG6u3zhur18w6p84buBfOG6v3zhu4d84buDfOG7hS9nLCAnZScpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL8OsfMOtfOG7i3zhu4l8xKkvZywgJ2knKTtcclxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DsnzDs3zhu4184buPfMO1fMO0fOG7k3zhu5F84buZfOG7lXzhu5d8xqF84budfOG7m3zhu6N84buffOG7oS9nLCAnbycpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL8O5fMO6fOG7pXzhu6d8xal8xrB84burfOG7qXzhu7F84butfOG7ry9nLCAndScpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL+G7s3zDvXzhu7V84bu3fOG7uS9nLCAneScpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL8SRL2csICdkJyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvIXxAfCV8XFxefFxcKnxcXCh8XFwpfFxcK3xcXD18XFw8fFxcPnxcXD98XFwvfCx8XFwufFxcOnxcXDt8XFwnfFxcXCJ8XFwmfFxcI3xcXFt8XFxdfH58XFwkfF98YHwtfHt8fXxcXHx8XFxcXC9nLCAnICcpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLyArIC9nLCAnICcpO1xyXG4gICAgc3RyID0gc3RyLnRyaW0oKTtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICB0aW1lRGlmZmVyZW5jZSA9IChwcmV2aW91czogYW55LCBjdXJyZW50OiBhbnkgPSBuZXcgRGF0ZSgpKSA9PiB7XHJcbiAgICBpZiAoIURhdGUuaXNEYXRlKHByZXZpb3VzKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAoIURhdGUuaXNEYXRlKGN1cnJlbnQpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShwcmV2aW91cyk7XHJcbiAgICBjb25zdCB0byA9IG5ldyBEYXRlKGN1cnJlbnQpO1xyXG4gICAgY29uc3QgbXNQZXJNaW51dGUgPSA2MCAqIDEwMDA7XHJcbiAgICBjb25zdCBtc1BlckhvdXIgPSBtc1Blck1pbnV0ZSAqIDYwO1xyXG4gICAgY29uc3QgbXNQZXJEYXkgPSBtc1BlckhvdXIgKiAyNDtcclxuICAgIGNvbnN0IG1zUGVyTW9udGggPSBtc1BlckRheSAqIDMwO1xyXG4gICAgY29uc3QgbXNQZXJZZWFyID0gbXNQZXJEYXkgKiAzNjU7XHJcbiAgICBjb25zdCBlbGFwc2VkID0gdG8uZ2V0VGltZSgpIC0gZnJvbS5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKGVsYXBzZWQgPCBtc1Blck1pbnV0ZSkge1xyXG4gICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChlbGFwc2VkIC8gMTAwMCl9ICR7dGhpcy4jdHJhbnNsYXRlKCdzZWNvbmRzIGFnbycpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVsYXBzZWQgPCBtc1BlckhvdXIpIHtcclxuICAgICAgcmV0dXJuIGAke01hdGgucm91bmQoZWxhcHNlZCAvIG1zUGVyTWludXRlKX0gJHt0aGlzLiN0cmFuc2xhdGUoJ21pbnV0ZXMgYWdvJyl9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxhcHNlZCA8IG1zUGVyRGF5KSB7XHJcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGVsYXBzZWQgLyBtc1BlckhvdXIpfSAke3RoaXMuI3RyYW5zbGF0ZSgnaG91cnMgYWdvJyl9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxhcHNlZCA8IG1zUGVyTW9udGgpIHtcclxuICAgICAgcmV0dXJuIGAke01hdGgucm91bmQoZWxhcHNlZCAvIG1zUGVyRGF5KX0gJHt0aGlzLiN0cmFuc2xhdGUoJ2RheXMgYWdvJyl9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxhcHNlZCA8IG1zUGVyWWVhcikge1xyXG4gICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChlbGFwc2VkIC8gbXNQZXJNb250aCl9ICR7dGhpcy4jdHJhbnNsYXRlKCdtb250aHMgYWdvJyl9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGVsYXBzZWQgLyBtc1BlclllYXIpfSAke3RoaXMuI3RyYW5zbGF0ZSgneWVhcnMgYWdvJyl9YDtcclxuICB9XHJcblxyXG4gIHVwbG9hZCA9IChvcHRpb24/OiB7XHJcbiAgICBleHRlbnNpb25zPzogc3RyaW5nW10sXHJcbiAgICBtYXhTaXplSW5NYj86IG51bWJlcixcclxuICAgIHZhbGlkYXRvcj86IChmaWxlTmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcclxuICB9KTogUHJvbWlzZTxGaWxlPiA9PiB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8RmlsZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoJChgIyR7dGhpcy4jdXBsb2FkSWR9YCkubGVuZ3RoKSB7XHJcbiAgICAgICAgJCgnYm9keScpLmNoaWxkcmVuKGAjJHt0aGlzLiN1cGxvYWRJZH1gKS5yZW1vdmUoKTtcclxuICAgICAgfVxyXG4gICAgICAkKCdib2R5JykuYXBwZW5kKGA8aW5wdXQgaWQ9XCIke3RoaXMuI3VwbG9hZElkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgLz5gKTtcclxuICAgICAgJChgIyR7dGhpcy4jdXBsb2FkSWR9YCkub24oJ2NoYW5nZScsIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICBjb25zdCBmaWxlID0gdGFyZ2V0LmZpbGVzLml0ZW0oMCk7XHJcbiAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0RG90ID0gZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLiN0cmFuc2xhdGUoYEludmFsaWQgZmlsZSBleHRlbnNpb25gKTtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgICAgICAgICBpZiAob3B0aW9uLmV4dGVuc2lvbnM/Lmxlbmd0aCAmJiAhb3B0aW9uLmV4dGVuc2lvbnMuc29tZShlID0+IGUudG9VcHBlckNhc2UoKSA9PT0gZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFske2ZpbGUubmFtZX1dICR7dGhpcy4jdHJhbnNsYXRlKCdVcGxvYWRlZCBmaWxlIGlzIG5vdCBtYXRjaCBleHRlbnNpb24nKX0gJHtvcHRpb24uZXh0ZW5zaW9ucy5qb2luKCcsICcpfWA7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvcHRpb24ubWF4U2l6ZUluTWIgPiAwICYmIG9wdGlvbi5tYXhTaXplSW5NYiAqIDEwMjQgKiAxMDI0IDwgZmlsZS5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFske2ZpbGUubmFtZX1dICR7dGhpcy4jdHJhbnNsYXRlKCdNYXggZmlsZSBzaXplJyl9ICR7b3B0aW9uLm1heFNpemVJbk1ifSBNYnNgO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbGlkYXRvciAmJiBvcHRpb24udmFsaWRhdG9yKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBvcHRpb24udmFsaWRhdG9yKGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgJChgIyR7dGhpcy4jdXBsb2FkSWR9YCkudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZCA9IChmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGAke2ZpbGVOYW1lIHx8IHV1aWQudjQoKX1gO1xyXG4gICAgbGluay5ocmVmID0gZmlsZVBhdGg7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG4gIGNvcHlUb0NsaXBib2FyZCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpbnRIdG1sID0gKGVsZW1lbnRJZDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBwcmludElkID0gYHNkUHJpbnRTZWN0aW9uYDtcclxuICAgIGNvbnN0IGRpdiA9ICdzZC1wcmludCc7XHJcbiAgICAvLyBjb25zdCBwcmludENvbnRlbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKS5pbm5lckhUTUw7XHJcbiAgICAvLyBjb25zdCBvcmlnaW5hbENvbnRlbnRzID0gZG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XHJcblxyXG4gICAgLy8gZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBwcmludENvbnRlbnRzO1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gb3JpZ2luYWxDb250ZW50cztcclxuICAgIC8vIH0sIDEwMCk7XHJcbiAgICAvLyB3aW5kb3cucHJpbnQoKTtcclxuXHJcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlbGVtZW50SWQpLmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgY29uc3QgZG9tQ2xvbmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBwcmludFNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHByaW50U2VjdGlvbi5pZCA9IHByaW50SWQ7XHJcbiAgICBwcmludFNlY3Rpb24uYXBwZW5kQ2hpbGQoZG9tQ2xvbmUpO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHByaW50U2VjdGlvbiwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHkgYXBwLXJvb3QnKS5jbGFzc0xpc3QuYWRkKGRpdik7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keSBhcHAtcm9vdCcpLmNsYXNzTGlzdC5yZW1vdmUoJ3NkLXByaW50Jyk7XHJcbiAgICAvLyAgIGNvbnN0IG9sZEVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmludElkKTtcclxuICAgIC8vICAgaWYgKG9sZEVsZW0gIT09IG51bGwpIHtcclxuICAgIC8vICAgICBvbGRFbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkRWxlbSk7IC8vIG9sZEVsZW0ucmVtb3ZlKCkgbm90IHN1cHBvcnRlZCBieSBJRVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9LCAxMDApO1xyXG4gICAgd2luZG93LnByaW50KCk7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5IGFwcC1yb290JykuY2xhc3NMaXN0LnJlbW92ZShkaXYpO1xyXG4gICAgY29uc3Qgb2xkRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByaW50SWQpO1xyXG4gICAgaWYgKG9sZEVsZW0gIT09IG51bGwpIHtcclxuICAgICAgb2xkRWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9sZEVsZW0pOyAvLyBvbGRFbGVtLnJlbW92ZSgpIG5vdCBzdXBwb3J0ZWQgYnkgSUVcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS91dGlsaXR5LyIsInNvdXJjZXMiOlsic3JjL2xpYi91dGlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLGlEQUFpRDtBQUNqRCxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFDdEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBS2xELE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUYxQyxvQkFBWSx1Q0FBdUMsRUFBQztRQUdwRCxxQkFBYSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDO1FBRXRDLFlBQU8sR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBDLGtCQUFhLEdBQUcsQ0FBSSxLQUFVLEVBQUUsR0FBVyxFQUF3QixFQUFFO1lBQ25FLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUE7UUFFRCx5QkFBb0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFOztZQUN2QyxJQUFJLEdBQUcsU0FBRyxLQUFLLGFBQUwsS0FB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SSxFQUFFO2dCQUNwQixPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHVDQUF1QzthQUNqRjtRQUNILENBQUMsQ0FBQTtJQTFKNkMsQ0FBQzs7Ozs7WUFOaEQsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFKUSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4vLyBpbXBvcnQgUERGTWVyZ2VyIGZyb20gJ3BkZi1tZXJnZXItanMvYnJvd3Nlcic7XHJcbmltcG9ydCBtZDUgZnJvbSAnbWQ1JztcclxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkVXRpbGl0eVNlcnZpY2Uge1xyXG4gICN1cGxvYWRJZCA9ICdVMWUwOWMxYzAtYjY0Ny00MzdlLTk5NWUtZDdhMWExYjYwNTUwJztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7IH1cclxuICAjdHJhbnNsYXRlID0gKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlO1xyXG5cclxuICBoYXNoTUQ1ID0gKGtleTogc3RyaW5nKSA9PiBtZDUoa2V5KTtcclxuXHJcbiAgYXJyYXlUb09iamVjdCA9IDxUPihpdGVtczogVFtdLCBrZXk6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogVCB9ID0+IHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKG9iaiwgaXRlbSkgPT4geyBvYmpbaXRlbVtrZXldXSA9IGl0ZW07IHJldHVybiBvYmo7IH0sIHt9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUFsaWFzTG93ZXJDYXNlID0gKGFsaWFzOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBzdHIgPSBhbGlhcz8udG9TdHJpbmcoKSA/PyAnJztcclxuICAgIHN0ciA9IHN0ci50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6B8w6F84bqhfOG6o3zDo3zDonzhuqd84bqlfOG6rXzhuql84bqrfMSDfOG6sXzhuq984bq3fOG6s3zhurUvZywgJ2EnKTtcclxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6x8w6184buLfOG7iXzEqS9nLCAnaScpO1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL8OyfMOzfOG7jXzhu498w7V8w7R84buTfOG7kXzhu5l84buVfOG7l3zGoXzhu5184bubfOG7o3zhu5984buhL2csICdvJyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgv4buzfMO9fOG7tXzhu7d84bu5L2csICd5Jyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvxJEvZywgJ2QnKTtcclxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8hfEB8JXxcXF58XFwqfFxcKHxcXCl8XFwrfFxcPXxcXDx8XFw+fFxcP3xcXC98LHxcXC58XFw6fFxcO3xcXCd8XFxcInxcXCZ8XFwjfFxcW3xcXF18fnxcXCR8X3xgfC18e3x9fFxcfHxcXFxcL2csICcgJyk7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvICsgL2csICcgJyk7XHJcbiAgICBzdHIgPSBzdHIudHJpbSgpO1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIHRpbWVEaWZmZXJlbmNlID0gKHByZXZpb3VzOiBhbnksIGN1cnJlbnQ6IGFueSA9IG5ldyBEYXRlKCkpID0+IHtcclxuICAgIGlmICghRGF0ZS5pc0RhdGUocHJldmlvdXMpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGlmICghRGF0ZS5pc0RhdGUoY3VycmVudCkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZnJvbSA9IG5ldyBEYXRlKHByZXZpb3VzKTtcclxuICAgIGNvbnN0IHRvID0gbmV3IERhdGUoY3VycmVudCk7XHJcbiAgICBjb25zdCBtc1Blck1pbnV0ZSA9IDYwICogMTAwMDtcclxuICAgIGNvbnN0IG1zUGVySG91ciA9IG1zUGVyTWludXRlICogNjA7XHJcbiAgICBjb25zdCBtc1BlckRheSA9IG1zUGVySG91ciAqIDI0O1xyXG4gICAgY29uc3QgbXNQZXJNb250aCA9IG1zUGVyRGF5ICogMzA7XHJcbiAgICBjb25zdCBtc1BlclllYXIgPSBtc1BlckRheSAqIDM2NTtcclxuICAgIGNvbnN0IGVsYXBzZWQgPSB0by5nZXRUaW1lKCkgLSBmcm9tLmdldFRpbWUoKTtcclxuXHJcbiAgICBpZiAoZWxhcHNlZCA8IG1zUGVyTWludXRlKSB7XHJcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGVsYXBzZWQgLyAxMDAwKX0gJHt0aGlzLiN0cmFuc2xhdGUoJ3NlY29uZHMgYWdvJyl9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxhcHNlZCA8IG1zUGVySG91cikge1xyXG4gICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChlbGFwc2VkIC8gbXNQZXJNaW51dGUpfSAke3RoaXMuI3RyYW5zbGF0ZSgnbWludXRlcyBhZ28nKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbGFwc2VkIDwgbXNQZXJEYXkpIHtcclxuICAgICAgcmV0dXJuIGAke01hdGgucm91bmQoZWxhcHNlZCAvIG1zUGVySG91cil9ICR7dGhpcy4jdHJhbnNsYXRlKCdob3VycyBhZ28nKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbGFwc2VkIDwgbXNQZXJNb250aCkge1xyXG4gICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChlbGFwc2VkIC8gbXNQZXJEYXkpfSAke3RoaXMuI3RyYW5zbGF0ZSgnZGF5cyBhZ28nKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbGFwc2VkIDwgbXNQZXJZZWFyKSB7XHJcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGVsYXBzZWQgLyBtc1Blck1vbnRoKX0gJHt0aGlzLiN0cmFuc2xhdGUoJ21vbnRocyBhZ28nKX1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke01hdGgucm91bmQoZWxhcHNlZCAvIG1zUGVyWWVhcil9ICR7dGhpcy4jdHJhbnNsYXRlKCd5ZWFycyBhZ28nKX1gO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkID0gKG9wdGlvbj86IHtcclxuICAgIGV4dGVuc2lvbnM/OiBzdHJpbmdbXSxcclxuICAgIG1heFNpemVJbk1iPzogbnVtYmVyLFxyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPEZpbGU+ID0+IHtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxGaWxlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmICgkKGAjJHt0aGlzLiN1cGxvYWRJZH1gKS5sZW5ndGgpIHtcclxuICAgICAgICAkKCdib2R5JykuY2hpbGRyZW4oYCMke3RoaXMuI3VwbG9hZElkfWApLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgICQoJ2JvZHknKS5hcHBlbmQoYDxpbnB1dCBpZD1cIiR7dGhpcy4jdXBsb2FkSWR9XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgdHlwZT1cImZpbGVcIiAvPmApO1xyXG4gICAgICAkKGAjJHt0aGlzLiN1cGxvYWRJZH1gKS5vbignY2hhbmdlJywgKGV2dDogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZ0LnRhcmdldDtcclxuICAgICAgICAgIGNvbnN0IGZpbGUgPSB0YXJnZXQuZmlsZXMuaXRlbSgwKTtcclxuICAgICAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgICAgaWYgKGxhc3REb3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuI3RyYW5zbGF0ZShgSW52YWxpZCBmaWxlIGV4dGVuc2lvbmApO1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLm5hbWUuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbikge1xyXG4gICAgICAgICAgICAgIGlmIChvcHRpb24uZXh0ZW5zaW9ucz8ubGVuZ3RoICYmICFvcHRpb24uZXh0ZW5zaW9ucy5zb21lKGUgPT4gZS50b1VwcGVyQ2FzZSgpID09PSBleHRlbnNpb24udG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgWyR7ZmlsZS5uYW1lfV0gJHt0aGlzLiN0cmFuc2xhdGUoJ1VwbG9hZGVkIGZpbGUgaXMgbm90IG1hdGNoIGV4dGVuc2lvbicpfSAke29wdGlvbi5leHRlbnNpb25zLmpvaW4oJywgJyl9YDtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5tYXhTaXplSW5NYiA+IDAgJiYgb3B0aW9uLm1heFNpemVJbk1iICogMTAyNCAqIDEwMjQgPCBmaWxlLnNpemUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgWyR7ZmlsZS5uYW1lfV0gJHt0aGlzLiN0cmFuc2xhdGUoJ01heCBmaWxlIHNpemUnKX0gJHtvcHRpb24ubWF4U2l6ZUluTWJ9IE1ic2A7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvcHRpb24udmFsaWRhdG9yICYmIG9wdGlvbi52YWxpZGF0b3IoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IG9wdGlvbi52YWxpZGF0b3IoZmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAkKGAjJHt0aGlzLiN1cGxvYWRJZH1gKS50cmlnZ2VyKCdjbGljaycpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkID0gKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7ZmlsZU5hbWUgfHwgdXVpZC52NCgpfWA7XHJcbiAgICBsaW5rLmhyZWYgPSBmaWxlUGF0aDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gIH1cclxuXHJcbiAgY29weVRvQ2xpcGJvYXJkID0gKHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcmludEh0bWwgPSAoZWxlbWVudElkOiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBwcmludElkID0gYHNkUHJpbnRTZWN0aW9uYDtcclxuICAgIGNvbnN0IGRpdiA9ICdzZC1wcmludCc7XHJcbiAgICAvLyBjb25zdCBwcmludENvbnRlbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKS5pbm5lckhUTUw7XHJcbiAgICAvLyBjb25zdCBvcmlnaW5hbENvbnRlbnRzID0gZG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XHJcblxyXG4gICAgLy8gZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBwcmludENvbnRlbnRzO1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gb3JpZ2luYWxDb250ZW50cztcclxuICAgIC8vIH0sIDEwMCk7XHJcbiAgICAvLyB3aW5kb3cucHJpbnQoKTtcclxuXHJcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlbGVtZW50SWQpLmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgY29uc3QgZG9tQ2xvbmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBwcmludFNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHByaW50U2VjdGlvbi5pZCA9IHByaW50SWQ7XHJcbiAgICBwcmludFNlY3Rpb24uYXBwZW5kQ2hpbGQoZG9tQ2xvbmUpO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHByaW50U2VjdGlvbiwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHkgYXBwLXJvb3QnKS5jbGFzc0xpc3QuYWRkKGRpdik7XHJcbiAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnRpdGxlO1xyXG4gICAgaWYoZmlsZU5hbWUpIHtcclxuICAgICAgZG9jdW1lbnQudGl0bGUgPSBmaWxlTmFtZTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5wcmludCgpO1xyXG4gICAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHkgYXBwLXJvb3QnKS5jbGFzc0xpc3QucmVtb3ZlKGRpdik7XHJcbiAgICBjb25zdCBvbGRFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJpbnRJZCk7XHJcbiAgICBpZiAob2xkRWxlbSAhPT0gbnVsbCkge1xyXG4gICAgICBvbGRFbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkRWxlbSk7IC8vIG9sZEVsZW0ucmVtb3ZlKCkgbm90IHN1cHBvcnRlZCBieSBJRVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Inject, Injectable, NgModule } from '@angular/core';
|
|
1
|
+
import { Component, Inject, InjectionToken, Injectable, Optional, NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog';
|
|
4
4
|
import { MatIconModule } from '@angular/material/icon';
|
|
@@ -42,12 +42,15 @@ DialogConfirmComponent.ctorParameters = () => [
|
|
|
42
42
|
{ type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
|
|
43
43
|
];
|
|
44
44
|
|
|
45
|
+
const NOTIFY_CONFIG = new InjectionToken('notify.configuration');
|
|
46
|
+
|
|
45
47
|
var _delayDuration, _warningKey, _errorKey, _cache, _notifyWarning, _notifyError, _buildToastMultiMesssage;
|
|
46
48
|
class SdNotifyService {
|
|
47
|
-
constructor(dialog, toastr, translateService) {
|
|
49
|
+
constructor(dialog, toastr, translateService, configuration) {
|
|
48
50
|
this.dialog = dialog;
|
|
49
51
|
this.toastr = toastr;
|
|
50
52
|
this.translateService = translateService;
|
|
53
|
+
this.configuration = configuration;
|
|
51
54
|
_delayDuration.set(this, 500); // Các error/warning message sẽ tự động gộp sau khoảng thời gian trên
|
|
52
55
|
_warningKey.set(this, v4());
|
|
53
56
|
_errorKey.set(this, v4());
|
|
@@ -100,6 +103,7 @@ class SdNotifyService {
|
|
|
100
103
|
};
|
|
101
104
|
this.notify = {
|
|
102
105
|
success: (message, delay, title) => {
|
|
106
|
+
var _a;
|
|
103
107
|
// tslint:disable-next-line: max-line-length
|
|
104
108
|
// const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #4F8A10; background-color: #DFF2BF`;
|
|
105
109
|
// tslint:disable-next-line: max-line-length
|
|
@@ -108,7 +112,7 @@ class SdNotifyService {
|
|
|
108
112
|
const content = message || this.translate('Success');
|
|
109
113
|
this.toastr.success(content, title, {
|
|
110
114
|
enableHtml: true,
|
|
111
|
-
timeOut: delay || 3000,
|
|
115
|
+
timeOut: delay || ((_a = this.configuration) === null || _a === void 0 ? void 0 : _a.timeDelay) || 3000,
|
|
112
116
|
closeButton: true,
|
|
113
117
|
});
|
|
114
118
|
},
|
|
@@ -182,6 +186,7 @@ class SdNotifyService {
|
|
|
182
186
|
},
|
|
183
187
|
};
|
|
184
188
|
_notifyWarning.set(this, (args) => {
|
|
189
|
+
var _a;
|
|
185
190
|
const { message, delay, title } = args;
|
|
186
191
|
if (Array.isArray(message)) {
|
|
187
192
|
__classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'warning', message, delay, title);
|
|
@@ -190,12 +195,13 @@ class SdNotifyService {
|
|
|
190
195
|
const content = message || this.translate('Warning');
|
|
191
196
|
this.toastr.warning(content, title, {
|
|
192
197
|
enableHtml: true,
|
|
193
|
-
timeOut: delay || 3000,
|
|
198
|
+
timeOut: delay || ((_a = this.configuration) === null || _a === void 0 ? void 0 : _a.timeDelay) || 3000,
|
|
194
199
|
closeButton: true,
|
|
195
200
|
});
|
|
196
201
|
}
|
|
197
202
|
});
|
|
198
203
|
_notifyError.set(this, (args) => {
|
|
204
|
+
var _a;
|
|
199
205
|
const { message, delay, title } = args;
|
|
200
206
|
if (Array.isArray(message)) {
|
|
201
207
|
__classPrivateFieldGet(this, _buildToastMultiMesssage).call(this, 'error', message, delay, title);
|
|
@@ -204,12 +210,13 @@ class SdNotifyService {
|
|
|
204
210
|
const content = message || this.translate('Error');
|
|
205
211
|
this.toastr.error(content, title, {
|
|
206
212
|
enableHtml: true,
|
|
207
|
-
timeOut: delay || 3000,
|
|
213
|
+
timeOut: delay || ((_a = this.configuration) === null || _a === void 0 ? void 0 : _a.timeDelay) || 3000,
|
|
208
214
|
closeButton: true,
|
|
209
215
|
});
|
|
210
216
|
}
|
|
211
217
|
});
|
|
212
218
|
_buildToastMultiMesssage.set(this, (type, messages, delay, title) => {
|
|
219
|
+
var _a, _b;
|
|
213
220
|
/** số lượng item hiển thị mặc định */
|
|
214
221
|
const showNum = 2;
|
|
215
222
|
const id = `sd-notify-ckb-${v4()}`;
|
|
@@ -234,7 +241,7 @@ class SdNotifyService {
|
|
|
234
241
|
case 'error':
|
|
235
242
|
toast = this.toastr.error(content, `${title || this.translate('Error')} (${messageLength})`, {
|
|
236
243
|
enableHtml: true,
|
|
237
|
-
timeOut: delay || 3000,
|
|
244
|
+
timeOut: delay || ((_a = this.configuration) === null || _a === void 0 ? void 0 : _a.timeDelay) || 3000,
|
|
238
245
|
messageClass: `toast-message toast-message-${id}`,
|
|
239
246
|
closeButton: true,
|
|
240
247
|
tapToDismiss: false
|
|
@@ -243,7 +250,7 @@ class SdNotifyService {
|
|
|
243
250
|
case 'warning':
|
|
244
251
|
toast = this.toastr.warning(content, `${title || this.translate('Warning')} (${messageLength})`, {
|
|
245
252
|
enableHtml: true,
|
|
246
|
-
timeOut: delay || 3000,
|
|
253
|
+
timeOut: delay || ((_b = this.configuration) === null || _b === void 0 ? void 0 : _b.timeDelay) || 3000,
|
|
247
254
|
messageClass: `toast-message toast-message-${id}`,
|
|
248
255
|
closeButton: true,
|
|
249
256
|
tapToDismiss: false
|
|
@@ -357,7 +364,8 @@ SdNotifyService.decorators = [
|
|
|
357
364
|
SdNotifyService.ctorParameters = () => [
|
|
358
365
|
{ type: MatDialog },
|
|
359
366
|
{ type: ToastrService },
|
|
360
|
-
{ type: SdTranslateService }
|
|
367
|
+
{ type: SdTranslateService },
|
|
368
|
+
{ type: undefined, decorators: [{ type: Inject, args: [NOTIFY_CONFIG,] }, { type: Optional }] }
|
|
361
369
|
];
|
|
362
370
|
|
|
363
371
|
class SdNotifyModule {
|
|
@@ -390,5 +398,5 @@ SdNotifyModule.decorators = [
|
|
|
390
398
|
* Generated bundle index. Do not edit.
|
|
391
399
|
*/
|
|
392
400
|
|
|
393
|
-
export { DialogConfirmComponent, SdNotifyModule, SdNotifyService };
|
|
401
|
+
export { DialogConfirmComponent, NOTIFY_CONFIG, SdNotifyModule, SdNotifyService };
|
|
394
402
|
//# sourceMappingURL=sd-angular-core-notify.js.map
|