tnx-shared 5.2.28 → 5.2.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/docker/docker-entrypoint.sh +1 -1
- package/classes/base/list-component-base.d.ts +19 -5
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/environment-schema.d.ts +23 -20
- package/classes/environment-schema.d.ts.map +1 -1
- package/classes/public-function.d.ts +1 -0
- package/classes/public-function.d.ts.map +1 -1
- package/components/chat/chat-box/chat-box.component.d.ts.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +1 -3
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/advance-search/advance-search.component.d.ts +6 -6
- package/components/crud/advance-search/advance-search.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +6 -0
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts +5 -3
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +3 -0
- package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts.map +1 -1
- package/components/tn-custom-scrollbar/tn-custom-scrollbar.component.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts +2 -0
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/congviec/congviec/congviec-form/congviec-form.component.d.ts +1 -0
- package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
- package/directives/primeng/tn-table.directive.d.ts +7 -6
- package/directives/primeng/tn-table.directive.d.ts.map +1 -1
- package/esm2020/classes/base/list-component-base.mjs +56 -32
- package/esm2020/classes/environment-schema.mjs +10 -1
- package/esm2020/classes/public-function.mjs +3 -1
- package/esm2020/components/add-news/add-news.component.mjs +3 -3
- package/esm2020/components/autocomplete-picker/autocomplete-picker.component.mjs +2 -2
- package/esm2020/components/chat/chat-box/chat-box.component.mjs +3 -4
- package/esm2020/components/chat/chat-send-message-box/chat-send-message-box.component.mjs +2 -2
- package/esm2020/components/common-app-component/common-app-component.mjs +57 -57
- package/esm2020/components/common-dashboard/common-dashboard.component.mjs +3 -3
- package/esm2020/components/crud/advance-search/advance-search.component.mjs +28 -19
- package/esm2020/components/crud/crud-form/crud-form.component.mjs +12 -4
- package/esm2020/components/crud/crud-list/crud-list.component.mjs +3 -3
- package/esm2020/components/crud/tree-table/tree-table.component.mjs +3 -3
- package/esm2020/components/dropdown/dropdown.component.mjs +29 -24
- package/esm2020/components/entity-permission/entity-permission.component.mjs +3 -3
- package/esm2020/components/entity-picker/entity-picker-box/entity-picker-box.component.mjs +3 -3
- package/esm2020/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.mjs +3 -3
- package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +3 -3
- package/esm2020/components/main-list/main-list.component.mjs +3 -3
- package/esm2020/components/query-builders/query-builder-rule/query-builder-rule.component.mjs +8 -3
- package/esm2020/components/radio-button-list/radio-button-list.component.mjs +3 -3
- package/esm2020/components/report-queue/report-queue.component.mjs +2 -2
- package/esm2020/components/settings/settings.component.mjs +3 -3
- package/esm2020/components/tn-app-help/tn-app-help.component.mjs +3 -3
- package/esm2020/components/tn-app-notification/tn-app-notification.component.mjs +3 -3
- package/esm2020/components/tn-custom-scrollbar/tn-custom-scrollbar.component.mjs +5 -4
- package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +7 -3
- package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +3 -3
- package/esm2020/components/user-picker/user-picker.component.mjs +2 -2
- package/esm2020/components/workflow/workflow-picker/workflow-picker.component.mjs +3 -3
- package/esm2020/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.mjs +3 -3
- package/esm2020/congviec/congviec/congviec-form/congviec-form.component.mjs +6 -3
- package/esm2020/congviec/congviec/congviec.component.mjs +3 -3
- package/esm2020/directives/primeng/tn-table.directive.mjs +28 -13
- package/esm2020/services/common.service.mjs +11 -3
- package/esm2020/services/environment.service.mjs +48 -7
- package/esm2020/services/permission.service.mjs +12 -15
- package/esm2020/services/position.service.mjs +2 -2
- package/esm2020/services/signalr.service.mjs +3 -3
- package/esm2020/services/tn-client.service.mjs +30 -25
- package/esm2020/tnx-shared.module.mjs +14 -8
- package/fesm2015/tnx-shared.mjs +587 -445
- package/fesm2015/tnx-shared.mjs.map +1 -1
- package/fesm2020/tnx-shared.mjs +587 -445
- package/fesm2020/tnx-shared.mjs.map +1 -1
- package/package.json +2 -2
- package/services/common.service.d.ts +6 -0
- package/services/common.service.d.ts.map +1 -1
- package/services/environment.service.d.ts +32 -23
- package/services/environment.service.d.ts.map +1 -1
- package/services/permission.service.d.ts +5 -0
- package/services/permission.service.d.ts.map +1 -1
- package/services/position.service.d.ts.map +1 -1
- package/services/signalr.service.d.ts +1 -1
- package/services/signalr.service.d.ts.map +1 -1
- package/services/tn-client.service.d.ts +3 -1
- package/services/tn-client.service.d.ts.map +1 -1
- package/tnx-shared.module.d.ts +12 -11
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -103,7 +103,8 @@ export class TnCustomScrollbarComponent {
|
|
|
103
103
|
}, this._intervalTime);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
catch {
|
|
106
|
+
catch {
|
|
107
|
+
}
|
|
107
108
|
}
|
|
108
109
|
adjustConfig() {
|
|
109
110
|
if (!this._config) {
|
|
@@ -228,10 +229,10 @@ export class TnCustomScrollbarComponent {
|
|
|
228
229
|
}
|
|
229
230
|
}
|
|
230
231
|
TnCustomScrollbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TnCustomScrollbarComponent, deps: [{ token: i0.ElementRef }, { token: i1.DeviceDetectorService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
231
|
-
TnCustomScrollbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: { style: "style", useDefaultScrollBar: "useDefaultScrollBar", autoMode: "autoMode", class: "class", config: "config", whiteBackGround: "whiteBackGround", showScrollHorizontal: "showScrollHorizontal" }, outputs: { scrollY: "scrollY", scrollUp: "scrollUp", scrollDown: "scrollDown", scrollLeft: "scrollLeft", scrollRight: "scrollRight", scrollYReachEnd: "scrollYReachEnd", scrollYReachStart: "scrollYReachStart", scrollXReachEnd: "scrollXReachEnd", scrollXReachStart: "scrollXReachStart" }, viewQueries: [{ propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "defaulScrollbar", first: true, predicate: ["defaulScrollbar"], descendants: true }], ngImport: i0, template: "<div style=\"display: none;\" [innerHtml]=\"_styleText\">\r\n</div>\r\n<div *ngIf=\"useDefaultScrollBar\" #defaulScrollbar [ngStyle]=\"style\" [ngClass]=\"class\"\r\n (scroll)=\"onDefaultScrollY($event)\"\r\n style=\"padding:0 !important; margin:0 !important; overflow: auto; width: 100%; height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</div>\r\n<perfect-scrollbar *ngIf=\"!useDefaultScrollBar\" #scrollbar [config]=\"_config\" [ngStyle]=\"style\" [ngClass]=\"class\"\r\n class=\"tn-scroll-bar\" [class.bgWhite]=\"whiteBackGround\" (psScrollY)=\"onScrollY($event)\"\r\n (psYReachEnd)=\"onScrollYReachEnd($event)\" (psYReachStart)=\"onScrollYReachStart($event)\"\r\n (psXReachEnd)=\"onScrollXReachEnd($event)\" (psXReachStart)=\"onScrollXReachStart($event)\"\r\n (psScrollUp)=\"onScrollUp($event)\" (psScrollDown)=\"onScrollDown($event)\" (psScrollLeft)=\"onScrollLeft($event)\"\r\n (psScrollRight)=\"onScrollRight($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</perfect-scrollbar>\r\n<ng-template #content>\r\n <ng-content></ng-content>\r\n</ng-template
|
|
232
|
+
TnCustomScrollbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: { style: "style", useDefaultScrollBar: "useDefaultScrollBar", autoMode: "autoMode", class: "class", config: "config", whiteBackGround: "whiteBackGround", showScrollHorizontal: "showScrollHorizontal" }, outputs: { scrollY: "scrollY", scrollUp: "scrollUp", scrollDown: "scrollDown", scrollLeft: "scrollLeft", scrollRight: "scrollRight", scrollYReachEnd: "scrollYReachEnd", scrollYReachStart: "scrollYReachStart", scrollXReachEnd: "scrollXReachEnd", scrollXReachStart: "scrollXReachStart" }, viewQueries: [{ propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "defaulScrollbar", first: true, predicate: ["defaulScrollbar"], descendants: true }], ngImport: i0, template: "<div style=\"display: none;\" [innerHtml]=\"_styleText\">\r\n</div>\r\n<div *ngIf=\"useDefaultScrollBar\" #defaulScrollbar [ngStyle]=\"style\" [ngClass]=\"class\"\r\n (scroll)=\"onDefaultScrollY($event)\"\r\n style=\"padding:0 !important; margin:0 !important; overflow: auto; width: 100%; height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</div>\r\n<perfect-scrollbar *ngIf=\"!useDefaultScrollBar\" #scrollbar [config]=\"_config\" [ngStyle]=\"style\" [ngClass]=\"class\"\r\n class=\"tn-scroll-bar\" [class.bgWhite]=\"whiteBackGround\" (psScrollY)=\"onScrollY($event)\"\r\n (psYReachEnd)=\"onScrollYReachEnd($event)\" (psYReachStart)=\"onScrollYReachStart($event)\"\r\n (psXReachEnd)=\"onScrollXReachEnd($event)\" (psXReachStart)=\"onScrollXReachStart($event)\"\r\n (psScrollUp)=\"onScrollUp($event)\" (psScrollDown)=\"onScrollDown($event)\" (psScrollLeft)=\"onScrollLeft($event)\"\r\n (psScrollRight)=\"onScrollRight($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</perfect-scrollbar>\r\n<ng-template #content>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }] });
|
|
232
233
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TnCustomScrollbarComponent, decorators: [{
|
|
233
234
|
type: Component,
|
|
234
|
-
args: [{ selector: 'tn-custom-scrollbar', template: "<div style=\"display: none;\" [innerHtml]=\"_styleText\">\r\n</div>\r\n<div *ngIf=\"useDefaultScrollBar\" #defaulScrollbar [ngStyle]=\"style\" [ngClass]=\"class\"\r\n (scroll)=\"onDefaultScrollY($event)\"\r\n style=\"padding:0 !important; margin:0 !important; overflow: auto; width: 100%; height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</div>\r\n<perfect-scrollbar *ngIf=\"!useDefaultScrollBar\" #scrollbar [config]=\"_config\" [ngStyle]=\"style\" [ngClass]=\"class\"\r\n class=\"tn-scroll-bar\" [class.bgWhite]=\"whiteBackGround\" (psScrollY)=\"onScrollY($event)\"\r\n (psYReachEnd)=\"onScrollYReachEnd($event)\" (psYReachStart)=\"onScrollYReachStart($event)\"\r\n (psXReachEnd)=\"onScrollXReachEnd($event)\" (psXReachStart)=\"onScrollXReachStart($event)\"\r\n (psScrollUp)=\"onScrollUp($event)\" (psScrollDown)=\"onScrollDown($event)\" (psScrollLeft)=\"onScrollLeft($event)\"\r\n (psScrollRight)=\"onScrollRight($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</perfect-scrollbar>\r\n<ng-template #content>\r\n <ng-content></ng-content>\r\n</ng-template
|
|
235
|
+
args: [{ selector: 'tn-custom-scrollbar', template: "<div style=\"display: none;\" [innerHtml]=\"_styleText\">\r\n</div>\r\n<div *ngIf=\"useDefaultScrollBar\" #defaulScrollbar [ngStyle]=\"style\" [ngClass]=\"class\"\r\n (scroll)=\"onDefaultScrollY($event)\"\r\n style=\"padding:0 !important; margin:0 !important; overflow: auto; width: 100%; height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</div>\r\n<perfect-scrollbar *ngIf=\"!useDefaultScrollBar\" #scrollbar [config]=\"_config\" [ngStyle]=\"style\" [ngClass]=\"class\"\r\n class=\"tn-scroll-bar\" [class.bgWhite]=\"whiteBackGround\" (psScrollY)=\"onScrollY($event)\"\r\n (psYReachEnd)=\"onScrollYReachEnd($event)\" (psYReachStart)=\"onScrollYReachStart($event)\"\r\n (psXReachEnd)=\"onScrollXReachEnd($event)\" (psXReachStart)=\"onScrollXReachStart($event)\"\r\n (psScrollUp)=\"onScrollUp($event)\" (psScrollDown)=\"onScrollDown($event)\" (psScrollLeft)=\"onScrollLeft($event)\"\r\n (psScrollRight)=\"onScrollRight($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</perfect-scrollbar>\r\n<ng-template #content>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n" }]
|
|
235
236
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DeviceDetectorService }, { type: i2.DomSanitizer }]; }, propDecorators: { scrollbar: [{
|
|
236
237
|
type: ViewChild,
|
|
237
238
|
args: ['scrollbar']
|
|
@@ -271,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
271
272
|
}], scrollXReachStart: [{
|
|
272
273
|
type: Output
|
|
273
274
|
}] } });
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFVaEksTUFBTSxPQUFPLDBCQUEwQjtJQW9EbkMsWUFBWSxHQUFlLEVBQ2Ysc0JBQTZDLEVBQzdDLFNBQXVCO1FBRHZCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0MsY0FBUyxHQUFULFNBQVMsQ0FBYztRQWxEbkMsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQWtCUix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUV6QixZQUFPLEdBQVEsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNqRSxlQUFVLEdBQVEsRUFBRSxDQUFDO1FBS1osb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDMUMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBTTdCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FB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QU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IFBlcmZlY3RTY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICduZ3gtcGVyZmVjdC1zY3JvbGxiYXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RuLWN1c3RvbS1zY3JvbGxiYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbkN1c3RvbVNjcm9sbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicpIHNjcm9sbGJhcjogUGVyZmVjdFNjcm9sbGJhckNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bFNjcm9sbGJhcicpIGRlZmF1bFNjcm9sbGJhcjogRWxlbWVudFJlZjtcclxuXHJcbiAgICBfc3R5bGU6IGFueSA9IHt9O1xyXG4gICAgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgc2V0IHN0eWxlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9zdHlsZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wYXJlbnRDbGFzcykge1xyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGA8c3R5bGU+IC4ke3ZhbHVlLnBhcmVudENsYXNzfSBwZXJmZWN0LXNjcm9sbGJhcj4ucHMgeyBgO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBodG1sID0gYCR7aHRtbH1taW4taGVpZ2h0OiAke3ZhbHVlLm1pbkhlaWdodH07IGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLm1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCA9IGAke2h0bWx9bWF4LWhlaWdodDogJHt2YWx1ZS5tYXhIZWlnaHR9OyBgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGh0bWwgPSBgJHtodG1sfX0gPC9zdHlsZT5gO1xyXG4gICAgICAgICAgICB0aGlzLl9zdHlsZVRleHQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSB1c2VEZWZhdWx0U2Nyb2xsQmFyID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBhdXRvTW9kZSA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBjbGFzczogYW55O1xyXG4gICAgX2NvbmZpZzogYW55ID0geyBzdXBwcmVzc1Njcm9sbFg6IHRydWUsIHN1cHByZXNzU2Nyb2xsWTogZmFsc2UgfTtcclxuICAgIF9zdHlsZVRleHQ6IGFueSA9IHt9O1xyXG4gICAgQElucHV0KCkgc2V0IGNvbmZpZyh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5hZGp1c3RDb25maWcoKTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHdoaXRlQmFja0dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgX3Nob3dTY3JvbGxIb3Jpem9udGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXQgc2hvd1Njcm9sbEhvcml6b250YWwodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zaG93U2Nyb2xsSG9yaXpvbnRhbCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuYWRqdXN0Q29uZmlnKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIEBPdXRwdXQoKSBzY3JvbGxZID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzY3JvbGxEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHNjcm9sbFJpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsWVJlYWNoRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsWVJlYWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzY3JvbGxYUmVhY2hFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzY3JvbGxYUmVhY2hTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBhbnk7XHJcbiAgICBwcml2YXRlIF9pbnRlcnZhbFRpbWUgPSAxMDA7XHJcbiAgICBwcml2YXRlIF9jaGVja1Njcm9sbEJhciA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZWxtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsbS5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Nb2RlICYmIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc01vYmlsZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlRGVmYXVsdFNjcm9sbEJhciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkaXZzID0gdGhpcy5lbGVtZW50UmVmLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BzLWNvbnRlbnQnKTtcclxuICAgICAgICBpZiAoZGl2cyAmJiBkaXZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudERpdiA9IGRpdnNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFlIb2xkZXIgPSB0aGlzLmZpbmROZXh0KGNvbnRlbnREaXYsICdwc19fcmFpbC15Jyk7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGxZSG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxZcyA9IHNjcm9sbFlIb2xkZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncHNfX3RodW1iLXknKTtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxZcyAmJiBzY3JvbGxZcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsQmFyKGNvbnRlbnREaXYsIHNjcm9sbFlzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLl9pbnRlcnZhbFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmROZXh0KGN1cmVudE5vZGUsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGxldCBuZXh0U2libGluZyA9IGN1cmVudE5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgd2hpbGUgKG5leHRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZy5jbGFzc0xpc3QgJiYgbmV4dFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1Njcm9sbEJhcihjb250ZW50RGl2OiBhbnksIHNjcm9sbFk6IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBjb250ZW50RGl2LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgaG9sZGVySGVpZ2h0ID0gY29udGVudERpdi5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgaWYgKGhvbGRlckhlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChob2xkZXJIZWlnaHQgPj0gY29udGVudEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFkuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2hlY2tTY3JvbGxCYXIpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsQmFyKGNvbnRlbnREaXYsIHNjcm9sbFkpO1xyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5faW50ZXJ2YWxUaW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7fVxyXG4gICAgfVxyXG5cclxuICAgIGFkanVzdENvbmZpZygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZykge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maWcgPSB7IHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSwgc3VwcHJlc3NTY3JvbGxZOiBmYWxzZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fc2hvd1Njcm9sbEhvcml6b250YWwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb25maWcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IHsgc3VwcHJlc3NTY3JvbGxYOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLnN1cHByZXNzU2Nyb2xsWCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY3JvbGxUb1RvcChvZmZzZXQgPSAwLCB0aW1lID0gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bFNjcm9sbGJhcikge1xyXG4gICAgICAgICAgICB0aGlzLm9sZFNjcm9sbFRvcCA9IHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICBpZiAodGltZSA+IDIwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQsIG9mZnNldCwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uRGVmYXVsdFNjcm9sbFkobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5kaXJlY3RpdmVSZWYuc2Nyb2xsVG9Ub3Aob2Zmc2V0LCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNjcm9sbFRvQm90dG9tKG9mZnNldCA9IDAsIHRpbWUgPSAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsU2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2xkU2Nyb2xsVG9wID0gdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGlmICh0aW1lID4gMjApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudCwgdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCAtIG9mZnNldCwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbkRlZmF1bHRTY3JvbGxZKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxiYXIuZGlyZWN0aXZlUmVmLnNjcm9sbFRvQm90dG9tKG9mZnNldCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25TY3JvbGxZKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxZLmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsVXAoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFVwLmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsRG93bihldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRG93bi5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNjcm9sbExlZnQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbExlZnQuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGxSaWdodChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsUmlnaHQuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGxZUmVhY2hTdGFydChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWVJlYWNoU3RhcnQuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGxZUmVhY2hFbmQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFlSZWFjaEVuZC5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNjcm9sbFhSZWFjaFN0YXJ0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxYUmVhY2hTdGFydC5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNjcm9sbFhSZWFjaEVuZChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWFJlYWNoRW5kLmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9sZFNjcm9sbFRvcCA9IDA7XHJcbiAgICBvbkRlZmF1bHRTY3JvbGxZKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbmV3U2Nyb2xsVG9wID0gdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgaWYgKHRoaXMub2xkU2Nyb2xsVG9wICE9IG5ld1Njcm9sbFRvcCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFkuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdTY3JvbGxUb3AgPiB0aGlzLm9sZFNjcm9sbFRvcCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbERvd24uZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5ld1Njcm9sbFRvcCA8IHRoaXMub2xkU2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVXAuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdTY3JvbGxUb3AgPj0gKHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWVJlYWNoRW5kLmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3U2Nyb2xsVG9wIDw9IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxZUmVhY2hTdGFydC5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub2xkU2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZWxlbWVudC5zY3JvbGxUb3AsXHJcbiAgICAgICAgICAgIGNoYW5nZSA9IHRvIC0gc3RhcnQsXHJcbiAgICAgICAgICAgIGluY3JlbWVudCA9IDIwO1xyXG4gICAgICAgIGxldCBjdXJyZW50VGltZSA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGFuaW1hdGVTY3JvbGwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5lYXNlSW5PdXRRdWFkKGN1cnJlbnRUaW1lLCBzdGFydCwgY2hhbmdlLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdmFsO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChhbmltYXRlU2Nyb2xsLCBpbmNyZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBhbmltYXRlU2Nyb2xsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9SaWdodChsZW5ndGhJblB4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbGJhci5kaXJlY3RpdmVSZWYuc2Nyb2xsVG9SaWdodChsZW5ndGhJblB4KTtcclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxGcm9tTGVmdChsZW5ndGhJblB4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbGJhci5kaXJlY3RpdmVSZWYuc2Nyb2xsVG9MZWZ0KGxlbmd0aEluUHgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVhc2VJbk91dFF1YWQodCwgYiwgYywgZCkge1xyXG4gICAgICAgIHQgLz0gZCAvIDI7XHJcbiAgICAgICAgaWYgKHQgPCAxKSByZXR1cm4gYyAvIDIgKiB0ICogdCArIGI7XHJcbiAgICAgICAgdC0tO1xyXG4gICAgICAgIHJldHVybiAtYyAvIDIgKiAodCAqICh0IC0gMikgLSAxKSArIGI7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsYmFyLmRpcmVjdGl2ZVJlZi51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jaGVja1Njcm9sbEJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIFtpbm5lckh0bWxdPVwiX3N0eWxlVGV4dFwiPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInVzZURlZmF1bHRTY3JvbGxCYXJcIiAjZGVmYXVsU2Nyb2xsYmFyIFtuZ1N0eWxlXT1cInN0eWxlXCIgW25nQ2xhc3NdPVwiY2xhc3NcIlxyXG4gICAgKHNjcm9sbCk9XCJvbkRlZmF1bHRTY3JvbGxZKCRldmVudClcIlxyXG4gICAgc3R5bGU9XCJwYWRkaW5nOjAgIWltcG9ydGFudDsgbWFyZ2luOjAgIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG48cGVyZmVjdC1zY3JvbGxiYXIgKm5nSWY9XCIhdXNlRGVmYXVsdFNjcm9sbEJhclwiICNzY3JvbGxiYXIgW2NvbmZpZ109XCJfY29uZmlnXCIgW25nU3R5bGVdPVwic3R5bGVcIiBbbmdDbGFzc109XCJjbGFzc1wiXHJcbiAgICBjbGFzcz1cInRuLXNjcm9sbC1iYXJcIiBbY2xhc3MuYmdXaGl0ZV09XCJ3aGl0ZUJhY2tHcm91bmRcIiAocHNTY3JvbGxZKT1cIm9uU2Nyb2xsWSgkZXZlbnQpXCJcclxuICAgIChwc1lSZWFjaEVuZCk9XCJvblNjcm9sbFlSZWFjaEVuZCgkZXZlbnQpXCIgKHBzWVJlYWNoU3RhcnQpPVwib25TY3JvbGxZUmVhY2hTdGFydCgkZXZlbnQpXCJcclxuICAgIChwc1hSZWFjaEVuZCk9XCJvblNjcm9sbFhSZWFjaEVuZCgkZXZlbnQpXCIgKHBzWFJlYWNoU3RhcnQpPVwib25TY3JvbGxYUmVhY2hTdGFydCgkZXZlbnQpXCJcclxuICAgIChwc1Njcm9sbFVwKT1cIm9uU2Nyb2xsVXAoJGV2ZW50KVwiIChwc1Njcm9sbERvd24pPVwib25TY3JvbGxEb3duKCRldmVudClcIiAocHNTY3JvbGxMZWZ0KT1cIm9uU2Nyb2xsTGVmdCgkZXZlbnQpXCJcclxuICAgIChwc1Njcm9sbFJpZ2h0KT1cIm9uU2Nyb2xsUmlnaHQoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cclxuPC9wZXJmZWN0LXNjcm9sbGJhcj5cclxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBVXZCLE1BQU0sT0FBTywwQkFBMEI7SUF3RG5DLFlBQVksR0FBZSxFQUNQLHNCQUE2QyxFQUM3QyxTQUF1QjtRQUR2QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUF0RDNDLFdBQU0sR0FBUSxFQUFFLENBQUM7UUFvQlIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFFekIsWUFBTyxHQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakUsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQU9aLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQzFDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQU03QixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNy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TTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgUGVyZmVjdFNjcm9sbGJhckNvbXBvbmVudCB9IGZyb20gJ25neC1wZXJmZWN0LXNjcm9sbGJhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndG4tY3VzdG9tLXNjcm9sbGJhcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90bi1jdXN0b20tc2Nyb2xsYmFyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJykgc2Nyb2xsYmFyOiBQZXJmZWN0U2Nyb2xsYmFyQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsU2Nyb2xsYmFyJykgZGVmYXVsU2Nyb2xsYmFyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIF9zdHlsZTogYW55ID0ge307XHJcbiAgICBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHN0eWxlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9zdHlsZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wYXJlbnRDbGFzcykge1xyXG4gICAgICAgICAgICBsZXQgaHRtbCA9IGA8c3R5bGU+IC4ke3ZhbHVlLnBhcmVudENsYXNzfSBwZXJmZWN0LXNjcm9sbGJhcj4ucHMgeyBgO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBodG1sID0gYCR7aHRtbH1taW4taGVpZ2h0OiAke3ZhbHVlLm1pbkhlaWdodH07IGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLm1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCA9IGAke2h0bWx9bWF4LWhlaWdodDogJHt2YWx1ZS5tYXhIZWlnaHR9OyBgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGh0bWwgPSBgJHtodG1sfX0gPC9zdHlsZT5gO1xyXG4gICAgICAgICAgICB0aGlzLl9zdHlsZVRleHQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgdXNlRGVmYXVsdFNjcm9sbEJhciA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgYXV0b01vZGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgY2xhc3M6IGFueTtcclxuICAgIF9jb25maWc6IGFueSA9IHsgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLCBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlIH07XHJcbiAgICBfc3R5bGVUZXh0OiBhbnkgPSB7fTtcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgY29uZmlnKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmFkanVzdENvbmZpZygpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHdoaXRlQmFja0dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgX3Nob3dTY3JvbGxIb3Jpem9udGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXQgc2hvd1Njcm9sbEhvcml6b250YWwodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zaG93U2Nyb2xsSG9yaXpvbnRhbCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuYWRqdXN0Q29uZmlnKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIEBPdXRwdXQoKSBzY3JvbGxZID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzY3JvbGxEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHNjcm9sbFJpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsWVJlYWNoRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsWVJlYWNoU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzY3JvbGxYUmVhY2hFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzY3JvbGxYUmVhY2hTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBhbnk7XHJcbiAgICBwcml2YXRlIF9pbnRlcnZhbFRpbWUgPSAxMDA7XHJcbiAgICBwcml2YXRlIF9jaGVja1Njcm9sbEJhciA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZWxtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbG0ubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvTW9kZSAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNNb2JpbGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZURlZmF1bHRTY3JvbGxCYXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGl2cyA9IHRoaXMuZWxlbWVudFJlZi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwcy1jb250ZW50Jyk7XHJcbiAgICAgICAgaWYgKGRpdnMgJiYgZGl2cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnREaXYgPSBkaXZzWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxZSG9sZGVyID0gdGhpcy5maW5kTmV4dChjb250ZW50RGl2LCAncHNfX3JhaWwteScpO1xyXG4gICAgICAgICAgICBpZiAoc2Nyb2xsWUhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsWXMgPSBzY3JvbGxZSG9sZGVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BzX190aHVtYi15Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWXMgJiYgc2Nyb2xsWXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsQmFyKGNvbnRlbnREaXYsIHNjcm9sbFlzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLl9pbnRlcnZhbFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmROZXh0KGN1cmVudE5vZGUsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGxldCBuZXh0U2libGluZyA9IGN1cmVudE5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgd2hpbGUgKG5leHRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZy5jbGFzc0xpc3QgJiYgbmV4dFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1Njcm9sbEJhcihjb250ZW50RGl2OiBhbnksIHNjcm9sbFk6IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBjb250ZW50RGl2LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgaG9sZGVySGVpZ2h0ID0gY29udGVudERpdi5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgaWYgKGhvbGRlckhlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChob2xkZXJIZWlnaHQgPj0gY29udGVudEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFkuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2hlY2tTY3JvbGxCYXIpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTY3JvbGxCYXIoY29udGVudERpdiwgc2Nyb2xsWSk7XHJcbiAgICAgICAgICAgICAgICB9LCB0aGlzLl9pbnRlcnZhbFRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkanVzdENvbmZpZygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZykge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maWcgPSB7IHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSwgc3VwcHJlc3NTY3JvbGxZOiBmYWxzZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fc2hvd1Njcm9sbEhvcml6b250YWwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb25maWcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IHsgc3VwcHJlc3NTY3JvbGxYOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLnN1cHByZXNzU2Nyb2xsWCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY3JvbGxUb1RvcChvZmZzZXQgPSAwLCB0aW1lID0gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bFNjcm9sbGJhcikge1xyXG4gICAgICAgICAgICB0aGlzLm9sZFNjcm9sbFRvcCA9IHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICBpZiAodGltZSA+IDIwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQsIG9mZnNldCwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uRGVmYXVsdFNjcm9sbFkobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5kaXJlY3RpdmVSZWYuc2Nyb2xsVG9Ub3Aob2Zmc2V0LCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNjcm9sbFRvQm90dG9tKG9mZnNldCA9IDAsIHRpbWUgPSAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsU2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2xkU2Nyb2xsVG9wID0gdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGlmICh0aW1lID4gMjApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudCwgdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCAtIG9mZnNldCwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuZGVmYXVsU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbkRlZmF1bHRTY3JvbGxZKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxiYXIuZGlyZWN0aXZlUmVmLnNjcm9sbFRvQm90dG9tKG9mZnNldCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsWShldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWS5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNjcm9sbFVwKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxVcC5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNjcm9sbERvd24oZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbERvd24uZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGxMZWZ0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxMZWZ0LmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsUmlnaHQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFJpZ2h0LmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsWVJlYWNoU3RhcnQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFlSZWFjaFN0YXJ0LmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsWVJlYWNoRW5kKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxZUmVhY2hFbmQuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGxYUmVhY2hTdGFydChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsWFJlYWNoU3RhcnQuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGxYUmVhY2hFbmQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFhSZWFjaEVuZC5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbGRTY3JvbGxUb3AgPSAwO1xyXG5cclxuICAgIG9uRGVmYXVsdFNjcm9sbFkoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCBuZXdTY3JvbGxUb3AgPSB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgICBpZiAodGhpcy5vbGRTY3JvbGxUb3AgIT0gbmV3U2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWS5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Njcm9sbFRvcCA+IHRoaXMub2xkU2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRG93bi5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobmV3U2Nyb2xsVG9wIDwgdGhpcy5vbGRTY3JvbGxUb3ApIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxVcC5lbWl0KHsgJGV2ZW50OiBldmVudCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld1Njcm9sbFRvcCA+PSAodGhpcy5kZWZhdWxTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmRlZmF1bFNjcm9sbGJhci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxZUmVhY2hFbmQuZW1pdCh7ICRldmVudDogZXZlbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdTY3JvbGxUb3AgPD0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFlSZWFjaFN0YXJ0LmVtaXQoeyAkZXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vbGRTY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3A7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbGVtZW50LnNjcm9sbFRvcCxcclxuICAgICAgICAgICAgY2hhbmdlID0gdG8gLSBzdGFydCxcclxuICAgICAgICAgICAgaW5jcmVtZW50ID0gMjA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgYW5pbWF0ZVNjcm9sbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgY3VycmVudFRpbWUgKz0gaW5jcmVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmVhc2VJbk91dFF1YWQoY3VycmVudFRpbWUsIHN0YXJ0LCBjaGFuZ2UsIGR1cmF0aW9uKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB2YWw7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFuaW1hdGVTY3JvbGwsIGluY3JlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGFuaW1hdGVTY3JvbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUb1JpZ2h0KGxlbmd0aEluUHg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsYmFyLmRpcmVjdGl2ZVJlZi5zY3JvbGxUb1JpZ2h0KGxlbmd0aEluUHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbEZyb21MZWZ0KGxlbmd0aEluUHg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsYmFyLmRpcmVjdGl2ZVJlZi5zY3JvbGxUb0xlZnQobGVuZ3RoSW5QeCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWFzZUluT3V0UXVhZCh0LCBiLCBjLCBkKSB7XHJcbiAgICAgICAgdCAvPSBkIC8gMjtcclxuICAgICAgICBpZiAodCA8IDEpIHJldHVybiBjIC8gMiAqIHQgKiB0ICsgYjtcclxuICAgICAgICB0LS07XHJcbiAgICAgICAgcmV0dXJuIC1jIC8gMiAqICh0ICogKHQgLSAyKSAtIDEpICsgYjtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxiYXIuZGlyZWN0aXZlUmVmLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU2Nyb2xsQmFyID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgW2lubmVySHRtbF09XCJfc3R5bGVUZXh0XCI+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwidXNlRGVmYXVsdFNjcm9sbEJhclwiICNkZWZhdWxTY3JvbGxiYXIgW25nU3R5bGVdPVwic3R5bGVcIiBbbmdDbGFzc109XCJjbGFzc1wiXHJcbiAgICAoc2Nyb2xsKT1cIm9uRGVmYXVsdFNjcm9sbFkoJGV2ZW50KVwiXHJcbiAgICBzdHlsZT1cInBhZGRpbmc6MCAhaW1wb3J0YW50OyBtYXJnaW46MCAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bzsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxwZXJmZWN0LXNjcm9sbGJhciAqbmdJZj1cIiF1c2VEZWZhdWx0U2Nyb2xsQmFyXCIgI3Njcm9sbGJhciBbY29uZmlnXT1cIl9jb25maWdcIiBbbmdTdHlsZV09XCJzdHlsZVwiIFtuZ0NsYXNzXT1cImNsYXNzXCJcclxuICAgIGNsYXNzPVwidG4tc2Nyb2xsLWJhclwiIFtjbGFzcy5iZ1doaXRlXT1cIndoaXRlQmFja0dyb3VuZFwiIChwc1Njcm9sbFkpPVwib25TY3JvbGxZKCRldmVudClcIlxyXG4gICAgKHBzWVJlYWNoRW5kKT1cIm9uU2Nyb2xsWVJlYWNoRW5kKCRldmVudClcIiAocHNZUmVhY2hTdGFydCk9XCJvblNjcm9sbFlSZWFjaFN0YXJ0KCRldmVudClcIlxyXG4gICAgKHBzWFJlYWNoRW5kKT1cIm9uU2Nyb2xsWFJlYWNoRW5kKCRldmVudClcIiAocHNYUmVhY2hTdGFydCk9XCJvblNjcm9sbFhSZWFjaFN0YXJ0KCRldmVudClcIlxyXG4gICAgKHBzU2Nyb2xsVXApPVwib25TY3JvbGxVcCgkZXZlbnQpXCIgKHBzU2Nyb2xsRG93bik9XCJvblNjcm9sbERvd24oJGV2ZW50KVwiIChwc1Njcm9sbExlZnQpPVwib25TY3JvbGxMZWZ0KCRldmVudClcIlxyXG4gICAgKHBzU2Nyb2xsUmlnaHQpPVwib25TY3JvbGxSaWdodCgkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG48L3BlcmZlY3Qtc2Nyb2xsYmFyPlxyXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
@@ -62,6 +62,10 @@ export class TnTinymceComponent extends ComponentBase {
|
|
|
62
62
|
ngOnInit() {
|
|
63
63
|
this.subscribeContentInsert();
|
|
64
64
|
this.customTemplate = this._componentService.dicTemplate;
|
|
65
|
+
if (this.customTemplate) {
|
|
66
|
+
this.tinyMceAddNews = this.customTemplate['tinyMceAddNews'];
|
|
67
|
+
this.tinyMceFilePickerDialog = this.customTemplate['tinyMceFilePickerDialog'];
|
|
68
|
+
}
|
|
65
69
|
this.onInit.emit(this);
|
|
66
70
|
}
|
|
67
71
|
ngAfterViewInit() {
|
|
@@ -403,7 +407,7 @@ TnTinymceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
403
407
|
multi: true
|
|
404
408
|
},
|
|
405
409
|
ComponentContextService
|
|
406
|
-
], viewQueries: [{ propertyName: "equationForm", first: true, predicate: EquationEditorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<input *ngIf=\"!_deviceDetectorService.isDesktop()\" class=\"input-tab-trap\" (focus)=\"focusTrap($event)\" />\r\n<textarea class=\"tinymce-control\" id={{id}} [ngStyle]=\"{height: height+'px'}\">\r\n</textarea>\r\n<tn-dialog #dialog *ngIf=\"equationFormModel.show\" [closeOnEscape]=\"false\"\r\n [header]=\"'C\u00F4ng th\u1EE9c to\u00E1n h\u1ECDc (d\u00F9ng laTex)' | translate\" [popupSize]=\"popupSize\">\r\n <tn-custom-scrollbar #scrollbar>\r\n <equation-editor [data]=\"dataEquation\">\r\n </equation-editor>\r\n </tn-custom-scrollbar>\r\n <ng-template #footer>\r\n <button icon=\"fas fa-check\" [disabled]=\"model.submitting\" pButton type=\"button\" (click)=\"handleOk($event)\"\r\n [label]=\"'Ok' | translate\"></button>\r\n <button icon=\"fas fa-undo\" [disabled]=\"model.submitting\" pButton class=\"ui-button-secondary\" type=\"button\"\r\n (click)=\"equationFormModel.show = false\" [label]=\"'FORM.CANCEL' | translate\"></button>\r\n </ng-template>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"isAddNews\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\r\n (onHide)=\"isAddNews = false\">\r\n <ng-container *ngTemplateOutlet=\"
|
|
410
|
+
], viewQueries: [{ propertyName: "equationForm", first: true, predicate: EquationEditorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<input *ngIf=\"!_deviceDetectorService.isDesktop()\" class=\"input-tab-trap\" (focus)=\"focusTrap($event)\" />\r\n<textarea class=\"tinymce-control\" id={{id}} [ngStyle]=\"{height: height+'px'}\">\r\n</textarea>\r\n<tn-dialog #dialog *ngIf=\"equationFormModel.show\" [closeOnEscape]=\"false\"\r\n [header]=\"'C\u00F4ng th\u1EE9c to\u00E1n h\u1ECDc (d\u00F9ng laTex)' | translate\" [popupSize]=\"popupSize\">\r\n <tn-custom-scrollbar #scrollbar>\r\n <equation-editor [data]=\"dataEquation\">\r\n </equation-editor>\r\n </tn-custom-scrollbar>\r\n <ng-template #footer>\r\n <button icon=\"fas fa-check\" [disabled]=\"model.submitting\" pButton type=\"button\" (click)=\"handleOk($event)\"\r\n [label]=\"'Ok' | translate\"></button>\r\n <button icon=\"fas fa-undo\" [disabled]=\"model.submitting\" pButton class=\"ui-button-secondary\" type=\"button\"\r\n (click)=\"equationFormModel.show = false\" [label]=\"'FORM.CANCEL' | translate\"></button>\r\n </ng-template>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"isAddNews\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\r\n (onHide)=\"isAddNews = false\">\r\n <ng-container *ngTemplateOutlet=\"tinyMceAddNews; context: {\r\n languageCode: languageCode, showChange: showChanged\r\n }\"></ng-container>\r\n <!-- <add-news #listBase [languageCode]=\"languageCode\" (showChange)=\"showChanged($event)\"></add-news> -->\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showTemplate\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\"\r\n [popupSize]=\"popupSize\" (onHide)=\"showTemplate = false\">\r\n <tn-template (onChanged)=\"addTemplate($event)\"></tn-template>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"isAddFile\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\r\n (onHide)=\"isAddFile = false\">\r\n <ng-container *ngTemplateOutlet=\"tinyMceFilePickerDialog; context: {\r\n parentModel: model, parentContext: context, closeForm: handleCloseFormAddFile, onCancel: handleRFCancel,\r\n onChanged: showChanged, onInit: handleInitFormAddFile\r\n }\"></ng-container>\r\n <ng-template #footer>\r\n <ng-container *ngTemplateOutlet=\"addFileFormFooterTemplate\"></ng-container>\r\n </ng-template>\r\n <!-- <file-picker-dialog #formBase [parentModel]=\" model\" [parentContext]=\"context\" (closeForm)=\"isAddFile = false\"\r\n (onCancel)=\"handleRFCancel($event)\" (onChanged)=\"showChanged($event)\">\r\n </file-picker-dialog> -->\r\n</tn-dialog>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i7.EquationEditorComponent, selector: "equation-editor", inputs: ["data"] }, { kind: "component", type: i8.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "component", type: i9.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i10.TnTemplateComponent, selector: "tn-template", outputs: ["onChanged"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
|
|
407
411
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TnTinymceComponent, decorators: [{
|
|
408
412
|
type: Component,
|
|
409
413
|
args: [{ selector: 'tn-tinymce', providers: [
|
|
@@ -413,7 +417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
413
417
|
multi: true
|
|
414
418
|
},
|
|
415
419
|
ComponentContextService
|
|
416
|
-
], template: "<input *ngIf=\"!_deviceDetectorService.isDesktop()\" class=\"input-tab-trap\" (focus)=\"focusTrap($event)\" />\r\n<textarea class=\"tinymce-control\" id={{id}} [ngStyle]=\"{height: height+'px'}\">\r\n</textarea>\r\n<tn-dialog #dialog *ngIf=\"equationFormModel.show\" [closeOnEscape]=\"false\"\r\n [header]=\"'C\u00F4ng th\u1EE9c to\u00E1n h\u1ECDc (d\u00F9ng laTex)' | translate\" [popupSize]=\"popupSize\">\r\n <tn-custom-scrollbar #scrollbar>\r\n <equation-editor [data]=\"dataEquation\">\r\n </equation-editor>\r\n </tn-custom-scrollbar>\r\n <ng-template #footer>\r\n <button icon=\"fas fa-check\" [disabled]=\"model.submitting\" pButton type=\"button\" (click)=\"handleOk($event)\"\r\n [label]=\"'Ok' | translate\"></button>\r\n <button icon=\"fas fa-undo\" [disabled]=\"model.submitting\" pButton class=\"ui-button-secondary\" type=\"button\"\r\n (click)=\"equationFormModel.show = false\" [label]=\"'FORM.CANCEL' | translate\"></button>\r\n </ng-template>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"isAddNews\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\r\n (onHide)=\"isAddNews = false\">\r\n <ng-container *ngTemplateOutlet=\"
|
|
420
|
+
], template: "<input *ngIf=\"!_deviceDetectorService.isDesktop()\" class=\"input-tab-trap\" (focus)=\"focusTrap($event)\" />\r\n<textarea class=\"tinymce-control\" id={{id}} [ngStyle]=\"{height: height+'px'}\">\r\n</textarea>\r\n<tn-dialog #dialog *ngIf=\"equationFormModel.show\" [closeOnEscape]=\"false\"\r\n [header]=\"'C\u00F4ng th\u1EE9c to\u00E1n h\u1ECDc (d\u00F9ng laTex)' | translate\" [popupSize]=\"popupSize\">\r\n <tn-custom-scrollbar #scrollbar>\r\n <equation-editor [data]=\"dataEquation\">\r\n </equation-editor>\r\n </tn-custom-scrollbar>\r\n <ng-template #footer>\r\n <button icon=\"fas fa-check\" [disabled]=\"model.submitting\" pButton type=\"button\" (click)=\"handleOk($event)\"\r\n [label]=\"'Ok' | translate\"></button>\r\n <button icon=\"fas fa-undo\" [disabled]=\"model.submitting\" pButton class=\"ui-button-secondary\" type=\"button\"\r\n (click)=\"equationFormModel.show = false\" [label]=\"'FORM.CANCEL' | translate\"></button>\r\n </ng-template>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"isAddNews\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\r\n (onHide)=\"isAddNews = false\">\r\n <ng-container *ngTemplateOutlet=\"tinyMceAddNews; context: {\r\n languageCode: languageCode, showChange: showChanged\r\n }\"></ng-container>\r\n <!-- <add-news #listBase [languageCode]=\"languageCode\" (showChange)=\"showChanged($event)\"></add-news> -->\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showTemplate\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\"\r\n [popupSize]=\"popupSize\" (onHide)=\"showTemplate = false\">\r\n <tn-template (onChanged)=\"addTemplate($event)\"></tn-template>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"isAddFile\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\r\n (onHide)=\"isAddFile = false\">\r\n <ng-container *ngTemplateOutlet=\"tinyMceFilePickerDialog; context: {\r\n parentModel: model, parentContext: context, closeForm: handleCloseFormAddFile, onCancel: handleRFCancel,\r\n onChanged: showChanged, onInit: handleInitFormAddFile\r\n }\"></ng-container>\r\n <ng-template #footer>\r\n <ng-container *ngTemplateOutlet=\"addFileFormFooterTemplate\"></ng-container>\r\n </ng-template>\r\n <!-- <file-picker-dialog #formBase [parentModel]=\" model\" [parentContext]=\"context\" (closeForm)=\"isAddFile = false\"\r\n (onCancel)=\"handleRFCancel($event)\" (onChanged)=\"showChanged($event)\">\r\n </file-picker-dialog> -->\r\n</tn-dialog>" }]
|
|
417
421
|
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.DeviceDetectorService }, { type: i2.ComponentService }, { type: i3.NotifierService }, { type: i4.FileExplorerService }]; }, propDecorators: { equationForm: [{
|
|
418
422
|
type: ViewChild,
|
|
419
423
|
args: [EquationEditorComponent]
|
|
@@ -440,4 +444,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
440
444
|
}], onChanged: [{
|
|
441
445
|
type: Output
|
|
442
446
|
}] } });
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tdGlueW1jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLXRpbnltY2UvdG4tdGlueW1jZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLXRpbnltY2UvdG4tdGlueW1jZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFrQnZGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBeUNqRCxZQUNJLFFBQWtCLEVBQ1gsc0JBQTZDLEVBQzVDLGlCQUFtQyxFQUNqQyxnQkFBaUMsRUFDakMsWUFBaUM7UUFFM0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBTFQsMkJBQXNCLEdBQXRCLHNCQUFz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a0I7bUdBQWxCLGtCQUFrQixvU0FUaEI7UUFDUDtZQUNJLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxLQUFLLEVBQUUsSUFBSTtTQUNkO1FBQ0QsdUJBQXVCO0tBQzFCLHdFQUlVLHVCQUF1Qix1RUMvQnRDLHNuRkEwQ1k7MkZEYkMsa0JBQWtCO2tCQWI5QixTQUFTOytCQUNJLFlBQVksYUFHWDt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0QsdUJBQXVCO3FCQUMxQjtrT0FJbUMsWUFBWTtzQkFBL0MsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRXpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IEVNRkpTLCBSVEZKUywgV01GSlMgfSBmcm9tICdydGYuanMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgUG9wdXBTaXplIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXF1YXRpb25FZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi9lcXVhdGlvbi1lZGl0b3IvZXF1YXRpb24tZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XHJcblxyXG5kZWNsYXJlIGxldCB0aW55bWNlOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndG4tdGlueW1jZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG4tdGlueW1jZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90bi10aW55bWNlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUblRpbnltY2VDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRuVGlueW1jZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoRXF1YXRpb25FZGl0b3JDb21wb25lbnQpIGVxdWF0aW9uRm9ybTogRXF1YXRpb25FZGl0b3JDb21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KCkgbW9kZT86ICdiYXNpYycgfCAnbWVkaXVtJyB8ICdmdWxsJyB8ICdzaW1wbGUnID0gJ2Jhc2ljJztcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgaGVpZ2h0ID0gMjAwO1xyXG4gICAgQElucHV0KCkgZmllbGQgPSAnJztcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIGxhbmd1YWdlQ29kZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkga2V5ZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIG1vZGVsOiBhbnkgPSAnJztcclxuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcbiAgICBpZCA9IG5hbm9pZCg4KTtcclxuICAgIGVkaXRvcjogYW55O1xyXG4gICAgZGF0YUVxdWF0aW9uOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlzQWRkTmV3czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBtb2RlcyA9IHt9O1xyXG4gICAgaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICBhZGRGaWxlRm9ybUZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgaXMgPSBmYWxzZTtcclxuICAgIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgZXF1YXRpb25Gb3JtTW9kZWw6IGFueSA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIHBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgIHdpZHRoOiAxMTAwLFxyXG4gICAgICAgIGhlaWdodDogNjUwXHJcbiAgICB9KTtcclxuICAgIHNob3dUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY3VzdG9tVGVtcGxhdGU6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgfSA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgICAgIFJURkpTLmxvZ2dpbmdFbmFibGVkKGZhbHNlKTtcclxuICAgICAgICBXTUZKUy5sb2dnaW5nRW5hYmxlZChmYWxzZSk7XHJcbiAgICAgICAgRU1GSlMubG9nZ2luZ0VuYWJsZWQoZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBtID0gWydiYXNpYycsICdtZWRpdW0nLCAnZnVsbCcsICdzaW1wbGUnXTtcclxuICAgICAgICBtLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZXNbeF0gPSB0aGlzLmdldFRpbnlNY2VDb25maWdCeU1vZGUoeCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDb250ZW50SW5zZXJ0KCk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZSA9IHRoaXMuX2NvbXBvbmVudFNlcnZpY2UuZGljVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IG1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgbW9kZSA9ICdzaW1wbGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1vZGVzW21vZGVdO1xyXG4gICAgICAgIGNvbmZpZy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICBjb25maWcucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGlueW1jZS5pbml0KGNvbmZpZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gJyc7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG9iajtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRpYWxvZyhkYXRhID0ge30pIHtcclxuICAgICAgICB0aGlzLmVxdWF0aW9uRm9ybU1vZGVsLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXF1YXRpb25Gb3JtTW9kZWwuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGlueU1jZUNvbmZpZ0J5TW9kZShtb2RlKSB7XHJcbiAgICAgICAgY29uc3QgJHRoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdhZGROZXdzJywgZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBvcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaGVhZGVyID0gJ1Row6ptL0No4buNbiB0aW4gYsOgaSc7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignYWRkTmV3cycsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUaMOqbS9DaMOobiB0aW4gYsOgaSB2w6BvIG7hu5lpIGR1bmcnLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogJ25vbi1icmVha2luZycsXHJcbiAgICAgICAgICAgICAgICBvbkFjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCd0ZW1wbGF0ZScsIGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICR0aGlzLmhlYWRlciA9ICdUaMOqbS9DaOG7jW4gdGVtcGxhdGUnO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuc2hvd1RlbXBsYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd0ZW1wbGF0ZScsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUZW1wbGF0ZScsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnbm9uLWJyZWFraW5nJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGlueW1jZS5QbHVnaW5NYW5hZ2VyLmFkZCgnZWRpdEZpbGVOZXcnLCBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EaWFsb2cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnVGjDqm0vQ2jhu4luaCBz4butYSBmaWxlIGPDoSBuaMOibic7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignZWRpdEZpbGVOZXcnLCB7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnVGjDqm0vQ2jDqG4g4bqjbmgsIHZpZGVvLCBmaWxlIHbDoG8gbuG7mWkgZHVuZycsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnZHVwbGljYXRlJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tGdW5jID0gZWRpdG9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0TW9kZSgncmVhZG9ubHknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlZEJvZHkgPSBlZGl0b3IuaWZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xyXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JIb2xkZXIgPSBlZGl0b3IuaWZyYW1lRWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgZWRCb2R5LmFkZENsYXNzKCdtb2JpbGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWRCb2R5LmFkZEV2ZW50TGlzdGVuZXIub24oJ2JsdXInLCBlID0+IHtcclxuICAgICAgICAgICAgICAgIGVkaXRvckhvbGRlci5jbGFzc0xpc3QucmVtb3ZlKCd0aW55bWNlLWZvY3VzJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlZEJvZHkuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBlID0+IHtcclxuICAgICAgICAgICAgICAgIGVkaXRvckhvbGRlci5jbGFzc0xpc3QuYWRkKCd0aW55bWNlLWZvY3VzJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlZEJvZHkuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCgodHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0KSAmJiB0eXBlcy5jb250YWlucygndGV4dC9odG1sJykpIHx8ICh0eXBlcy5pbmRleE9mICYmIHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXN0ZShlLm9yaWdpbmFsRXZlbnQpLnRoZW4oKGNvbnRlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvPCFcXFtpZltcXHNcXFNdKj8+L2dtLCAnJykucmVwbGFjZSgvPCFcXFtlbmRpZltcXHNcXFNdKj8+L2dtLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5ub3JtYWxpemVIVE1MKGNvbnRlbnQsICc8IVtpZiAhc3VwcG9ydExpc3RzXT4nLCAnPCFbZW5kaWZdPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMubm9ybWFsaXplSFRNTChjb250ZW50LCAnPCFbaWYgIW1zRXF1YXRpb25dPicsICc8IVtlbmRpZl0+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlZEJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbktleURvd24oZSwgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fQ1RSTF9TKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUud2hpY2ggPT0gMjcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RG93bihlLCBDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9FU0MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVkQm9keS5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW1nJyAmJiBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2xhdGV4JykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5EaWFsb2coeyBjb250ZW50OiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FsdCcpLCBzdHlsZTogZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdzdHlsZScpLCBoZWlnaHQ6IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaGVpZ2h0JykgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLm9uKCdibHVyJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xyXG4gICAgICAgICAgICB9KS5vbignY2hhbmdlJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuZ2V0Q29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoY29udGVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZWRpdG9yLnNldENvbnRlbnQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlnOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnIycgKyB0aGlzLmlkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxyXG4gICAgICAgICAgICBjb250ZW50X2NzczogW1xyXG4gICAgICAgICAgICAgICAgJy9hc3NldHMvdmVuZG9yL3RpbnltY2UvY3VzdG9tLmNzcydcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgaW1hZ2V0b29sc190b29sYmFyOiAncm90YXRlbGVmdCByb3RhdGVyaWdodCB8IGZsaXB2IGZsaXBoIHwgZWRpdGltYWdlIGltYWdlb3B0aW9ucycsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiAndmlfVk4nLFxyXG4gICAgICAgICAgICBzdGF0dXNiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICByZWxhdGl2ZV91cmxzOiBmYWxzZSxcclxuICAgICAgICAgICAgY29udmVydF91cmxzOiBmYWxzZSxcclxuICAgICAgICAgICAgdGFiZm9jdXNfZWxlbWVudHM6ICc6cHJldiw6bmV4dCcsXHJcbiAgICAgICAgICAgIGluaXRfaW5zdGFuY2VfY2FsbGJhY2s6IGNhbGxiYWNrRnVuYyxcclxuICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dChcclxuICAgICAgICAgICAgICAgICAgICAnY3RybCtFJywgJ0NhbkdpdWEnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeUNlbnRlcicsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dChcclxuICAgICAgICAgICAgICAgICAgICAnY3RybCtMJywgJ0NhblRyYWknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeUxlZnQnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoXHJcbiAgICAgICAgICAgICAgICAgICAgJ2N0cmwrUicsICdDYW5QaGFpJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlSaWdodCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dChcclxuICAgICAgICAgICAgICAgICAgICAnY3RybCtKJywgJ0NhbkRldScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5RnVsbCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dChcclxuICAgICAgICAgICAgICAgICAgICAnQWx0K00nLCAnTHVpVmFvJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ2luZGVudCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dChcclxuICAgICAgICAgICAgICAgICAgICAnQWx0K04nLCAnTHVpUmEnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnb3V0ZGVudCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbW9iaWxlOiB7XHJcbiAgICAgICAgICAgICAgICB0aGVtZTogJ3NpbHZlcicsXHJcbiAgICAgICAgICAgICAgICBwbHVnaW5zOiBbJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciddLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobW9kZSA9PSAnZnVsbCcpIHtcclxuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXHJcbiAgICAgICAgICAgICAgICAnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgZWRpdEZpbGVOZXcgYWRkTmV3cydcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnZm9ybWF0c2VsZWN0IHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgdGFibGUgbGluayBlZGl0RmlsZU5ldyBhZGROZXdzIHwgcHJpbnQgcmVtb3ZlZm9ybWF0IHVuZG8gcmVkbyB8IGZ1bGxzY3JlZW4gJztcclxuICAgICAgICAgICAgY29uZmlnLm1vYmlsZS50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xyXG4gICAgICAgICAgICBjb25maWcucGFzdGVfZGF0YV9pbWFnZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChtb2RlID09ICdtZWRpdW0nKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcclxuICAgICAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnZm9ybWF0c2VsZWN0IHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgdGFibGUgbGluayAgfCBwcmludCByZW1vdmVmb3JtYXQgdW5kbyByZWRvIHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUudG9vbGJhciA9ICdib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QgfCBmdWxsc2NyZWVuJztcclxuICAgICAgICAgICAgY29uZmlnLnBhc3RlX2RhdGFfaW1hZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobW9kZSA9PSAnc2ltcGxlJykge1xyXG4gICAgICAgICAgICBjb25maWcucGx1Z2lucyA9IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yJ107XHJcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xyXG4gICAgICAgICAgICBjb25maWcubW9iaWxlLnRvb2xiYXIgPSAnZnVsbHNjcmVlbiB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25maWcucGx1Z2lucyA9IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yJ107XHJcbiAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnZm9ybWF0c2VsZWN0IHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCBhbGlnbmp1c3RpZnkgfCBidWxsaXN0IG51bWxpc3QnO1xyXG4gICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xyXG4gICAgICAgIGNvbmZpZy5wYXN0ZV9kYXRhX2ltYWdlcyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBub3JtYWxpemVIVE1MKGNvbnRlbnQ6IHN0cmluZywgYmVnaW46IHN0cmluZywgZW5kOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihiZWdpbik7XHJcbiAgICAgICAgd2hpbGUgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gY29udGVudC5pbmRleE9mKGVuZCwgaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBpbmRleDIpICsgY29udGVudC5zdWJzdHJpbmcoaW5kZXgyICsgZW5kLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBpbmRleCkgKyBjb250ZW50LnN1YnN0cmluZyhpbmRleCArIGJlZ2luLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGluZGV4ID0gY29udGVudC5pbmRleE9mKGJlZ2luKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQmx1cigpIHtcclxuICAgICAgICB0aGlzLm9uQmx1ci5uZXh0KDEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihlOiBhbnksIHRvcGljOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmtleWRvd24ubmV4dCh7IGV2ZW50OiBlLCB0b3BpYyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVPayhldnQpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5lcXVhdGlvbkZvcm0ucHJldmlldy5uYXRpdmVFbGVtZW50Lm91dGVySFRNTDtcclxuICAgICAgICB0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIHRydWUsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzVHJhcChldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndGlueW1jZS1mb2N1cycpO1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIGhhbmRsZVBhc3RlKGUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VzID0gW107XHJcbiAgICAgICAgICAgIGxldCBvbGRMZWdhY3lWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgICAgIG9uUGljdHVyZTogKGlzTGVnYWN5LCBjcmVhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkTGVnYWN5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkTGVnYWN5VmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tID0gY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGRvbS5vdXRlckhUTUwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNMZWdhY3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tID0gY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb20udGFnTmFtZSA9PSAnSU1HJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goZG9tLm91dGVySFRNTCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkTGVnYWN5VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBlLmNsaXBib2FyZERhdGEudHlwZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoKCh0eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QpICYmIHR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKHR5cGVzLmluZGV4T2YgJiYgdHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhc3RlZERhdGEgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHBhc3RlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgodHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0KSAmJiB0eXBlcy5jb250YWlucygndGV4dC9ydGYnKSkgfHwgKHR5cGVzLmluZGV4T2YgJiYgdHlwZXMuaW5kZXhPZigndGV4dC9ydGYnKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFJ0ZkRhdGEgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9ydGYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jID0gbmV3IFJURkpTLkRvY3VtZW50KHRoaXMuX2NvbW1vblNlcnZpY2Uuc3RyaW5nVG9BcnJheUJ1ZmZlcihwYXN0ZWRSdGZEYXRhKSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2MucmVuZGVyKCkudGhlbigoaHRtbEVsZW1lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDEgPSBwYXN0ZWREYXRhLnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gcGFzdGVkRGF0YS5pbmRleE9mKCcvPicsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKGluZGV4MiArIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VTdHIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlcy5sZW5ndGggPiBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0ciA9IGltYWdlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gcDEgKyBpbWFnZVN0ciArIHAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHBhc3RlZERhdGEuaW5kZXhPZignPHY6aW1hZ2VkYXRhICcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwYXN0ZWREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRmlsZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgc3Vic2NyaWJlQ29udGVudEluc2VydCgpIHtcclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZSgnSU5TRVJUX0NPTlRFTlRfQk9EWScsIHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KHguY29udGVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aW55bWNlLkVkaXRvck1hbmFnZXIucmVtb3ZlKCcjJyArIHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUluaXRGb3JtQWRkRmlsZShldnQpIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGVGb3JtRm9vdGVyVGVtcGxhdGUgPSBldnQuYnV0dG9uVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ2xvc2VGb3JtQWRkRmlsZSgpIHtcclxuICAgICAgICB0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVJGQ2FuY2VsKGV2dCkge1xyXG4gICAgICAgIHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NoYW5nZWQoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5pc0FkZEZpbGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQWRkTmV3cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmluc2VydENvbnRlbnQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUZW1wbGF0ZShldnQpIHtcclxuICAgICAgICB0aGlzLnNob3dUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmluc2VydENvbnRlbnQoZXZ0KTtcclxuICAgIH1cclxufVxyXG4iLCI8aW5wdXQgKm5nSWY9XCIhX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVwiIGNsYXNzPVwiaW5wdXQtdGFiLXRyYXBcIiAoZm9jdXMpPVwiZm9jdXNUcmFwKCRldmVudClcIiAvPlxyXG48dGV4dGFyZWEgY2xhc3M9XCJ0aW55bWNlLWNvbnRyb2xcIiBpZD17e2lkfX0gW25nU3R5bGVdPVwie2hlaWdodDogaGVpZ2h0KydweCd9XCI+XHJcbjwvdGV4dGFyZWE+XHJcbjx0bi1kaWFsb2cgI2RpYWxvZyAqbmdJZj1cImVxdWF0aW9uRm9ybU1vZGVsLnNob3dcIiBbY2xvc2VPbkVzY2FwZV09XCJmYWxzZVwiXHJcbiAgICBbaGVhZGVyXT1cIidDw7RuZyB0aOG7qWMgdG/DoW4gaOG7jWMgKGTDuW5nIGxhVGV4KScgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInBvcHVwU2l6ZVwiPlxyXG4gICAgPHRuLWN1c3RvbS1zY3JvbGxiYXIgI3Njcm9sbGJhcj5cclxuICAgICAgICA8ZXF1YXRpb24tZWRpdG9yIFtkYXRhXT1cImRhdGFFcXVhdGlvblwiPlxyXG4gICAgICAgIDwvZXF1YXRpb24tZWRpdG9yPlxyXG4gICAgPC90bi1jdXN0b20tc2Nyb2xsYmFyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXI+XHJcbiAgICAgICAgPGJ1dHRvbiBpY29uPVwiZmFzIGZhLWNoZWNrXCIgW2Rpc2FibGVkXT1cIm1vZGVsLnN1Ym1pdHRpbmdcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiaGFuZGxlT2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCInT2snIHwgdHJhbnNsYXRlXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBpY29uPVwiZmFzIGZhLXVuZG9cIiBbZGlzYWJsZWRdPVwibW9kZWwuc3VibWl0dGluZ1wiIHBCdXR0b24gY2xhc3M9XCJ1aS1idXR0b24tc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJlcXVhdGlvbkZvcm1Nb2RlbC5zaG93ID0gZmFsc2VcIiBbbGFiZWxdPVwiJ0ZPUk0uQ0FOQ0VMJyB8IHRyYW5zbGF0ZVwiPjwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC90bi1kaWFsb2c+XHJcblxyXG48dG4tZGlhbG9nICpuZ0lmPVwiaXNBZGROZXdzXCIgI2RpYWxvZyBbc3R5bGVDbGFzc109XCInYWRkcmVzcy1mb3JtJ1wiIFtoZWFkZXJdPVwiaGVhZGVyIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJwb3B1cFNpemVcIlxyXG4gICAgKG9uSGlkZSk9XCJpc0FkZE5ld3MgPSBmYWxzZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRlbXBsYXRlWyd0aW55TWNlQWRkTmV3cyddOyBjb250ZXh0OiB7XHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBsYW5ndWFnZUNvZGUsIHNob3dDaGFuZ2U6IHNob3dDaGFuZ2VkXHJcbiAgICB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIDxhZGQtbmV3cyAjbGlzdEJhc2UgW2xhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGVcIiAoc2hvd0NoYW5nZSk9XCJzaG93Q2hhbmdlZCgkZXZlbnQpXCI+PC9hZGQtbmV3cz4gLS0+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPHRuLWRpYWxvZyAqbmdJZj1cInNob3dUZW1wbGF0ZVwiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2FkZHJlc3MtZm9ybSdcIiBbaGVhZGVyXT1cImhlYWRlciB8IHRyYW5zbGF0ZVwiXHJcbiAgICBbcG9wdXBTaXplXT1cInBvcHVwU2l6ZVwiIChvbkhpZGUpPVwic2hvd1RlbXBsYXRlID0gZmFsc2VcIj5cclxuICAgIDx0bi10ZW1wbGF0ZSAob25DaGFuZ2VkKT1cImFkZFRlbXBsYXRlKCRldmVudClcIj48L3RuLXRlbXBsYXRlPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJpc0FkZEZpbGVcIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidhZGRyZXNzLWZvcm0nXCIgW2hlYWRlcl09XCJoZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cImlzQWRkRmlsZSA9IGZhbHNlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVGVtcGxhdGVbJ3RpbnlNY2VGaWxlUGlja2VyRGlhbG9nJ107IGNvbnRleHQ6IHtcclxuICAgICAgICBwYXJlbnRNb2RlbDogbW9kZWwsIHBhcmVudENvbnRleHQ6IGNvbnRleHQsIGNsb3NlRm9ybTogaGFuZGxlQ2xvc2VGb3JtQWRkRmlsZSwgb25DYW5jZWw6IGhhbmRsZVJGQ2FuY2VsLFxyXG4gICAgICAgIG9uQ2hhbmdlZDogc2hvd0NoYW5nZWQsIG9uSW5pdDogaGFuZGxlSW5pdEZvcm1BZGRGaWxlXHJcbiAgICB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Zvb3Rlcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkRmlsZUZvcm1Gb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS0gPGZpbGUtcGlja2VyLWRpYWxvZyAjZm9ybUJhc2UgW3BhcmVudE1vZGVsXT1cIiBtb2RlbFwiIFtwYXJlbnRDb250ZXh0XT1cImNvbnRleHRcIiAoY2xvc2VGb3JtKT1cImlzQWRkRmlsZSA9IGZhbHNlXCJcclxuICAgICAgICAob25DYW5jZWwpPVwiaGFuZGxlUkZDYW5jZWwoJGV2ZW50KVwiIChvbkNoYW5nZWQpPVwic2hvd0NoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPC9maWxlLXBpY2tlci1kaWFsb2c+IC0tPlxyXG48L3RuLWRpYWxvZz4iXX0=
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tdGlueW1jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLXRpbnltY2UvdG4tdGlueW1jZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3RuLXRpbnltY2UvdG4tdGlueW1jZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFrQnZGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBMkNqRCxZQUNJLFFBQWtCLEVBQ1gsc0JBQTZDLEVBQzVDLGlCQUFtQyxFQUNqQyxnQkFBaUMsRUFDakMsWUFBaUM7UUFFM0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBTFQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM1QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ2pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBNUN0QyxTQUFJLEdBQTRDLE9BQU8sQ0FBQztRQUN4RCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUNiLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUd4QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU5QyxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBR2hCLE9BQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFZixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUV2QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUNuQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsT0FBRSxHQUFHLEtBQUssQ0FBQztRQUVYLHNCQUFpQixHQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN0QixLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxHQUFHO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsbUJBQWMsR0FFVixFQUFFLENBQUM7UUFhSCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBQ3pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNuQjtRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDekM7UUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksR0FBRyxJQUFJLElBQUk7WUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFJO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztRQUVuQixPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxNQUFNO1lBQ2pELE1BQU0sVUFBVSxHQUFHO2dCQUNmLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ25DLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ25ELENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3BDLE9BQU8sRUFBRSxnQ0FBZ0M7Z0JBQ3pDLElBQUksRUFBRSxjQUFjO2dCQUNwQixRQUFRLEVBQUU7b0JBQ04sVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7YUFDSixDQUFDLENBQUM7UUFFUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLE1BQU07WUFDbEQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2YsS0FBSyxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztnQkFDcEMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO2dCQUNyQyxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFFBQVEsRUFBRTtvQkFDTixVQUFVLEVBQUUsQ0FBQztnQkFDakIsQ0FBQzthQUNKLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsTUFBTTtZQUNyRCxNQUFNLFVBQVUsR0FBRztnQkFDZixLQUFLLENBQUMsTUFBTSxHQUFHLDZCQUE2QixDQUFDO2dCQUM3QyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO2dCQUN4QyxPQUFPLEVBQUUseUNBQXlDO2dCQUNsRCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFO29CQUNOLFVBQVUsRUFBRSxDQUFDO2dCQUNqQixDQUFDO2FBQ0osQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM5QjtZQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUMxQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzdCO1lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDakMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3hDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMzSCxDQUFDLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNsQyxDQUFDLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTt3QkFDcEQsSUFBSSxPQUFPLEVBQUU7NEJBQ1QsMEZBQTBGOzRCQUMxRixPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLENBQUM7NEJBQzdFLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLENBQUMsQ0FBQzs0QkFDM0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7eUJBQzFEO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sS0FBSyxDQUFDO2lCQUNoQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQkFDeEIsUUFBUSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTt3QkFDaEQsS0FBSyxHQUFHOzRCQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7NEJBQ3hELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDbkIsTUFBTTtxQkFDYjtpQkFDSjtxQkFDSSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3RCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDOUk7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBUTtZQUNoQixRQUFRLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixXQUFXLEVBQUU7Z0JBQ1QsbUNBQW1DO2FBQ3RDO1lBQ0Qsa0JBQWtCLEVBQUUsK0RBQStEO1lBQ25GLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLGFBQWE7WUFDaEMsc0JBQXNCLEVBQUUsWUFBWTtZQUNwQyxLQUFLLEVBQUUsVUFBVSxNQUFNO2dCQUNuQixNQUFNLENBQUMsV0FBVyxDQUNkLFFBQVEsRUFBRSxTQUFTLEVBQUU7b0JBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxDQUFDLENBQUMsQ0FBQztnQkFDUCxNQUFNLENBQUMsV0FBVyxDQUNkLFFBQVEsRUFBRSxTQUFTLEVBQUU7b0JBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUMsQ0FBQztnQkFDUCxNQUFNLENBQUMsV0FBVyxDQUNkLFFBQVEsRUFBRSxTQUFTLEVBQUU7b0JBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsQ0FBQztnQkFDUCxNQUFNLENBQUMsV0FBVyxDQUNkLFFBQVEsRUFBRSxRQUFRLEVBQUU7b0JBQ2hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUMsQ0FBQztnQkFDUCxNQUFNLENBQUMsV0FBVyxDQUNkLE9BQU8sRUFBRSxRQUFRLEVBQUU7b0JBQ2YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxXQUFXLENBQ2QsT0FBTyxFQUFFLE9BQU8sRUFBRTtvQkFDZCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxRQUFRO2dCQUNmLE9BQU8sRUFBRSxDQUFDLDJNQUEyTSxDQUFDO2FBQ3pOO1NBQ0osQ0FBQztRQUNGLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHO2dCQUNiLHFOQUFxTjthQUN4TixDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyw2TkFBNk4sQ0FBQztZQUMvTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyw4RUFBOEUsQ0FBQztZQUN2RyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO2FBQ0ksSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQywyTUFBMk0sQ0FBQyxDQUFDO1lBQy9OLE1BQU0sQ0FBQyxPQUFPLEdBQUcseU1BQXlNLENBQUM7WUFDM04sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsOEVBQThFLENBQUM7WUFDdkcsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNoQyxPQUFPLE1BQU0sQ0FBQztTQUNqQjthQUNJLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUN2QixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsMk1BQTJNLENBQUMsQ0FBQztZQUMvTixNQUFNLENBQUMsT0FBTyxHQUFHLDhFQUE4RSxDQUFDO1lBQ2hHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLDhFQUE4RSxDQUFDO1NBQzFHO1FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLDJNQUEyTSxDQUFDLENBQUM7UUFDL04sTUFBTSxDQUFDLE9BQU8sR0FBRywrSEFBK0gsQ0FBQztRQUNqSixNQUFNLENBQUMsT0FBTyxHQUFHLDhFQUE4RSxDQUFDO1FBQ2hHLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFlLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDckQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNmLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNiLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkY7WUFFRCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hGLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQU0sRUFBRSxLQUFhO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBRztRQUNSLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSztRQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDM0IsTUFBTSxRQUFRLEdBQUc7Z0JBQ2IsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUM1QixJQUFJLGNBQWMsRUFBRTt3QkFDaEIsY0FBYyxHQUFHLEtBQUssQ0FBQzt3QkFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7d0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMzQixPQUFPLEdBQUcsQ0FBQztxQkFDZDt5QkFDSSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNoQixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssRUFBRTs0QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQzNCLE9BQU8sR0FBRyxDQUFDO3lCQUNkOzZCQUNJOzRCQUNELGNBQWMsR0FBRyxJQUFJLENBQUM7eUJBQ3pCO3FCQUNKO2dCQUNMLENBQUM7YUFDSixDQUFDO1lBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFFcEMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzSCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUMzQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3ZCO3FCQUNJO29CQUNELElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDekgsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3dCQUNqRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7NEJBQy9CLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7NEJBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDVixPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtnQ0FDZixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDMUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBQy9DLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztvQ0FBRSxNQUFNO3FDQUNsQjtvQ0FDRCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztvQ0FDNUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO29DQUNsQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dDQUNuQixRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FDQUN4QjtvQ0FDRCxVQUFVLEdBQUcsRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUM7b0NBQ2hDLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29DQUM1QyxDQUFDLEVBQUUsQ0FBQztpQ0FDUDs2QkFDSjs0QkFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3hCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2xCLENBQUMsQ0FBQyxDQUFDO3FCQUNOO2lCQUNKO2FBQ0o7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELFdBQVc7UUFDUCxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFHO1FBQ3JCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO0lBQ3hELENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFHO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFHO1FBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFHO1FBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7K0dBcGJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9TQVRoQjtRQUNQO1lBQ0ksT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7UUFDRCx1QkFBdUI7S0FDMUIsd0VBSVUsdUJBQXVCLHVFQy9CdEMsa2xGQTBDWTsyRkRiQyxrQkFBa0I7a0JBYjlCLFNBQVM7K0JBQ0ksWUFBWSxhQUdYO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRCx1QkFBdUI7cUJBQzFCO2tPQUltQyxZQUFZO3NCQUEvQyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFFekIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgRU1GSlMsIFJURkpTLCBXTUZKUyB9IGZyb20gJ3J0Zi5qcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFcXVhdGlvbkVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2VxdWF0aW9uLWVkaXRvci9lcXVhdGlvbi1lZGl0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVyU2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcclxuXHJcbmRlY2xhcmUgbGV0IHRpbnltY2U6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0bi10aW55bWNlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90bi10aW55bWNlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RuLXRpbnltY2UuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRuVGlueW1jZUNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG5UaW55bWNlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZChFcXVhdGlvbkVkaXRvckNvbXBvbmVudCkgZXF1YXRpb25Gb3JtOiBFcXVhdGlvbkVkaXRvckNvbXBvbmVudDtcclxuXHJcbiAgICBASW5wdXQoKSBtb2RlPzogJ2Jhc2ljJyB8ICdtZWRpdW0nIHwgJ2Z1bGwnIHwgJ3NpbXBsZScgPSAnYmFzaWMnO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBoZWlnaHQgPSAyMDA7XHJcbiAgICBASW5wdXQoKSBmaWVsZCA9ICcnO1xyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgbGFuZ3VhZ2VDb2RlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBrZXlkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgbW9kZWw6IGFueSA9ICcnO1xyXG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xyXG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcclxuICAgIGlkID0gbmFub2lkKDgpO1xyXG4gICAgZWRpdG9yOiBhbnk7XHJcbiAgICBkYXRhRXF1YXRpb246IGFueSA9IHt9O1xyXG5cclxuICAgIGlzU2hvdyA9IGZhbHNlO1xyXG4gICAgaXNBZGROZXdzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG1vZGVzID0ge307XHJcbiAgICBpc0FkZEZpbGUgPSBmYWxzZTtcclxuICAgIGFkZEZpbGVGb3JtRm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBpcyA9IGZhbHNlO1xyXG4gICAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgICBlcXVhdGlvbkZvcm1Nb2RlbDogYW55ID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgcG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgd2lkdGg6IDExMDAsXHJcbiAgICAgICAgaGVpZ2h0OiA2NTBcclxuICAgIH0pO1xyXG4gICAgc2hvd1RlbXBsYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjdXN0b21UZW1wbGF0ZToge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICB9ID0ge307XHJcbiAgICB0aW55TWNlQWRkTmV3czogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIHRpbnlNY2VGaWxlUGlja2VyRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgICAgIFJURkpTLmxvZ2dpbmdFbmFibGVkKGZhbHNlKTtcclxuICAgICAgICBXTUZKUy5sb2dnaW5nRW5hYmxlZChmYWxzZSk7XHJcbiAgICAgICAgRU1GSlMubG9nZ2luZ0VuYWJsZWQoZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBtID0gWydiYXNpYycsICdtZWRpdW0nLCAnZnVsbCcsICdzaW1wbGUnXTtcclxuICAgICAgICBtLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZXNbeF0gPSB0aGlzLmdldFRpbnlNY2VDb25maWdCeU1vZGUoeCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDb250ZW50SW5zZXJ0KCk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZSA9IHRoaXMuX2NvbXBvbmVudFNlcnZpY2UuZGljVGVtcGxhdGU7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW55TWNlQWRkTmV3cyA9IHRoaXMuY3VzdG9tVGVtcGxhdGVbJ3RpbnlNY2VBZGROZXdzJ107XHJcbiAgICAgICAgICAgIHRoaXMudGlueU1jZUZpbGVQaWNrZXJEaWFsb2cgPSB0aGlzLmN1c3RvbVRlbXBsYXRlWyd0aW55TWNlRmlsZVBpY2tlckRpYWxvZyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbW9kZSA9IHRoaXMubW9kZTtcclxuICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICBtb2RlID0gJ3NpbXBsZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubW9kZXNbbW9kZV07XHJcbiAgICAgICAgY29uZmlnLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aW55bWNlLmluaXQoY29uZmlnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSBvYmogPSAnJztcclxuICAgICAgICB0aGlzLm1vZGVsID0gb2JqO1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRGlhbG9nKGRhdGEgPSB7fSkge1xyXG4gICAgICAgIHRoaXMuZXF1YXRpb25Gb3JtTW9kZWwuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lcXVhdGlvbkZvcm1Nb2RlbC5kYXRhID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUaW55TWNlQ29uZmlnQnlNb2RlKG1vZGUpIHtcclxuICAgICAgICBjb25zdCAkdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ2FkZE5ld3MnLCBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EaWFsb2cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnVGjDqm0vQ2jhu41uIHRpbiBiw6BpJztcclxuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkTmV3cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZEZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdhZGROZXdzJywge1xyXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogJ1Row6ptL0Now6huIHRpbiBiw6BpIHbDoG8gbuG7mWkgZHVuZycsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnbm9uLWJyZWFraW5nJyxcclxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ3RlbXBsYXRlJywgZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBvcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaGVhZGVyID0gJ1Row6ptL0No4buNbiB0ZW1wbGF0ZSc7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5zaG93VGVtcGxhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMucG9wdXBTaXplID0geyB3aWR0aDogMTIwMCwgaGVpZ2h0OiA3MDAgfTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ3RlbXBsYXRlJywge1xyXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogJ1RlbXBsYXRlJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdub24tYnJlYWtpbmcnLFxyXG4gICAgICAgICAgICAgICAgb25BY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVuRGlhbG9nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdlZGl0RmlsZU5ldycsIGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICR0aGlzLmhlYWRlciA9ICdUaMOqbS9DaOG7iW5oIHPhu61hIGZpbGUgY8OhIG5ow6JuJztcclxuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkTmV3cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuaXNBZGRGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdlZGl0RmlsZU5ldycsIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUaMOqbS9DaMOobiDhuqNuaCwgdmlkZW8sIGZpbGUgdsOgbyBu4buZaSBkdW5nJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdkdXBsaWNhdGUnLFxyXG4gICAgICAgICAgICAgICAgb25BY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVuRGlhbG9nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBjYWxsYmFja0Z1bmMgPSBlZGl0b3IgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRNb2RlKCdyZWFkb25seScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVkQm9keSA9IGVkaXRvci5pZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckhvbGRlciA9IGVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICBlZEJvZHkuYWRkQ2xhc3MoJ21vYmlsZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlZEJvZHkuYWRkRXZlbnRMaXN0ZW5lci5vbignYmx1cicsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9ySG9sZGVyLmNsYXNzTGlzdC5yZW1vdmUoJ3RpbnltY2UtZm9jdXMnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVkQm9keS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9ySG9sZGVyLmNsYXNzTGlzdC5hZGQoJ3RpbnltY2UtZm9jdXMnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVkQm9keS5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoKCh0eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QpICYmIHR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKHR5cGVzLmluZGV4T2YgJiYgdHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhc3RlKGUub3JpZ2luYWxFdmVudCkudGhlbigoY29udGVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC88IVxcW2lmW1xcc1xcU10qPz4vZ20sICcnKS5yZXBsYWNlKC88IVxcW2VuZGlmW1xcc1xcU10qPz4vZ20sICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFzdXBwb3J0TGlzdHNdPicsICc8IVtlbmRpZl0+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5ub3JtYWxpemVIVE1MKGNvbnRlbnQsICc8IVtpZiAhbXNFcXVhdGlvbl0+JywgJzwhW2VuZGlmXT4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVkQm9keS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RG93bihlLCBDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9DVFJMX1MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS53aGljaCA9PSAyNykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlEb3duKGUsIENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWRCb2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbWcnICYmIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbGF0ZXgnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkRpYWxvZyh7IGNvbnRlbnQ6IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0JyksIHN0eWxlOiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyksIGhlaWdodDogZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlZGl0b3Iub24oJ2JsdXInLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XHJcbiAgICAgICAgICAgIH0pLm9uKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRDb250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdChjb250ZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBjb25maWc6IGFueSA9IHtcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICcjJyArIHRoaXMuaWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgIGNvbnRlbnRfY3NzOiBbXHJcbiAgICAgICAgICAgICAgICAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZS9jdXN0b20uY3NzJ1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBpbWFnZXRvb2xzX3Rvb2xiYXI6ICdyb3RhdGVsZWZ0IHJvdGF0ZXJpZ2h0IHwgZmxpcHYgZmxpcGggfCBlZGl0aW1hZ2UgaW1hZ2VvcHRpb25zJyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICd2aV9WTicsXHJcbiAgICAgICAgICAgIHN0YXR1c2JhcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbGF0aXZlX3VybHM6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb252ZXJ0X3VybHM6IGZhbHNlLFxyXG4gICAgICAgICAgICB0YWJmb2N1c19lbGVtZW50czogJzpwcmV2LDpuZXh0JyxcclxuICAgICAgICAgICAgaW5pdF9pbnN0YW5jZV9jYWxsYmFjazogY2FsbGJhY2tGdW5jLFxyXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICdjdHJsK0UnLCAnQ2FuR2l1YScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5Q2VudGVyJywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICdjdHJsK0wnLCAnQ2FuVHJhaScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5TGVmdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dChcclxuICAgICAgICAgICAgICAgICAgICAnY3RybCtSJywgJ0NhblBoYWknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeVJpZ2h0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICdjdHJsK0onLCAnQ2FuRGV1JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlGdWxsJywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICdBbHQrTScsICdMdWlWYW8nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnaW5kZW50JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICdBbHQrTicsICdMdWlSYScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdvdXRkZW50JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtb2JpbGU6IHtcclxuICAgICAgICAgICAgICAgIHRoZW1lOiAnc2lsdmVyJyxcclxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yJ10sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChtb2RlID09ICdmdWxsJykge1xyXG4gICAgICAgICAgICBjb25maWcucGx1Z2lucyA9IFtcclxuICAgICAgICAgICAgICAgICdhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyBlZGl0RmlsZU5ldyBhZGROZXdzJ1xyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCBhbGlnbmp1c3RpZnkgfCBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgfCB0YWJsZSBsaW5rIGVkaXRGaWxlTmV3IGFkZE5ld3MgfCBwcmludCByZW1vdmVmb3JtYXQgdW5kbyByZWRvIHwgZnVsbHNjcmVlbiAnO1xyXG4gICAgICAgICAgICBjb25maWcubW9iaWxlLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wYXN0ZV9kYXRhX2ltYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gJ21lZGl1bScpIHtcclxuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciddO1xyXG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCBhbGlnbmp1c3RpZnkgfCBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgfCB0YWJsZSBsaW5rICB8IHByaW50IHJlbW92ZWZvcm1hdCB1bmRvIHJlZG8gfCBmdWxsc2NyZWVuJztcclxuICAgICAgICAgICAgY29uZmlnLm1vYmlsZS50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xyXG4gICAgICAgICAgICBjb25maWcucGFzdGVfZGF0YV9pbWFnZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChtb2RlID09ICdzaW1wbGUnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcclxuICAgICAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUudG9vbGJhciA9ICdmdWxsc2NyZWVuIHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcclxuICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3J8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCc7XHJcbiAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XHJcbiAgICAgICAgY29uZmlnLnBhc3RlX2RhdGFfaW1hZ2VzID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUhUTUwoY29udGVudDogc3RyaW5nLCBiZWdpbjogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gY29udGVudC5pbmRleE9mKGJlZ2luKTtcclxuICAgICAgICB3aGlsZSAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleDIgPSBjb250ZW50LmluZGV4T2YoZW5kLCBpbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleDIgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4MikgKyBjb250ZW50LnN1YnN0cmluZyhpbmRleDIgKyBlbmQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4KSArIGNvbnRlbnQuc3Vic3RyaW5nKGluZGV4ICsgYmVnaW4ubGVuZ3RoKTtcclxuICAgICAgICAgICAgaW5kZXggPSBjb250ZW50LmluZGV4T2YoYmVnaW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLm5leHQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25LZXlEb3duKGU6IGFueSwgdG9waWM6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMua2V5ZG93bi5uZXh0KHsgZXZlbnQ6IGUsIHRvcGljIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU9rKGV2dCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmVxdWF0aW9uRm9ybS5wcmV2aWV3Lm5hdGl2ZUVsZW1lbnQub3V0ZXJIVE1MO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDb250ZW50JywgdHJ1ZSwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNUcmFwKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmlmcmFtZUVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0aW55bWNlLWZvY3VzJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgaGFuZGxlUGFzdGUoZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZXMgPSBbXTtcclxuICAgICAgICAgICAgbGV0IG9sZExlZ2FjeVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICAgICAgb25QaWN0dXJlOiAoaXNMZWdhY3ksIGNyZWF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRMZWdhY3lWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRMZWdhY3lWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBjcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goZG9tLm91dGVySFRNTCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb207XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0xlZ2FjeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBjcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS50YWdOYW1lID09ICdJTUcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChkb20ub3V0ZXJIVE1MKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb207XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRMZWdhY3lWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGUuY2xpcGJvYXJkRGF0YS50eXBlcztcclxuXHJcbiAgICAgICAgICAgIGlmICgoKHR5cGVzIGluc3RhbmNlb2YgRE9NU3RyaW5nTGlzdCkgJiYgdHlwZXMuY29udGFpbnMoJ3RleHQvaHRtbCcpKSB8fCAodHlwZXMuaW5kZXhPZiAmJiB0eXBlcy5pbmRleE9mKCd0ZXh0L2h0bWwnKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFzdGVkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGFzdGVkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCh0eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QpICYmIHR5cGVzLmNvbnRhaW5zKCd0ZXh0L3J0ZicpKSB8fCAodHlwZXMuaW5kZXhPZiAmJiB0eXBlcy5pbmRleE9mKCd0ZXh0L3J0ZicpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkUnRmRGF0YSA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3J0ZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgUlRGSlMuRG9jdW1lbnQodGhpcy5fY29tbW9uU2VydmljZS5zdHJpbmdUb0FycmF5QnVmZmVyKHBhc3RlZFJ0ZkRhdGEpLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5yZW5kZXIoKS50aGVuKChodG1sRWxlbWVudHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhc3RlZERhdGEuaW5kZXhPZignPHY6aW1hZ2VkYXRhICcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMSA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKDAsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleDIgPSBwYXN0ZWREYXRhLmluZGV4T2YoJy8+JywgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcGFzdGVkRGF0YS5zdWJzdHJpbmcoaW5kZXgyICsgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZVN0ciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VzLmxlbmd0aCA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyID0gaW1hZ2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZERhdGEgPSBwMSArIGltYWdlU3RyICsgcDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHBhc3RlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5GaWxlTWFuYWdlcigpIHtcclxuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBzdWJzY3JpYmVDb250ZW50SW5zZXJ0KCkge1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKCdJTlNFUlRfQ09OVEVOVF9CT0RZJywgeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmluc2VydENvbnRlbnQoeC5jb250ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRpbnltY2UuRWRpdG9yTWFuYWdlci5yZW1vdmUoJyMnICsgdGhpcy5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSW5pdEZvcm1BZGRGaWxlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsZUZvcm1Gb290ZXJUZW1wbGF0ZSA9IGV2dC5idXR0b25UZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDbG9zZUZvcm1BZGRGaWxlKCkge1xyXG4gICAgICAgIHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUkZDYW5jZWwoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5pc0FkZEZpbGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Q2hhbmdlZChldnQpIHtcclxuICAgICAgICB0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBZGROZXdzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRlbXBsYXRlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1RlbXBsYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudChldnQpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxpbnB1dCAqbmdJZj1cIiFfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXCIgY2xhc3M9XCJpbnB1dC10YWItdHJhcFwiIChmb2N1cyk9XCJmb2N1c1RyYXAoJGV2ZW50KVwiIC8+XHJcbjx0ZXh0YXJlYSBjbGFzcz1cInRpbnltY2UtY29udHJvbFwiIGlkPXt7aWR9fSBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBoZWlnaHQrJ3B4J31cIj5cclxuPC90ZXh0YXJlYT5cclxuPHRuLWRpYWxvZyAjZGlhbG9nICpuZ0lmPVwiZXF1YXRpb25Gb3JtTW9kZWwuc2hvd1wiIFtjbG9zZU9uRXNjYXBlXT1cImZhbHNlXCJcclxuICAgIFtoZWFkZXJdPVwiJ0PDtG5nIHRo4bupYyB0b8OhbiBo4buNYyAoZMO5bmcgbGFUZXgpJyB8IHRyYW5zbGF0ZVwiIFtwb3B1cFNpemVdPVwicG9wdXBTaXplXCI+XHJcbiAgICA8dG4tY3VzdG9tLXNjcm9sbGJhciAjc2Nyb2xsYmFyPlxyXG4gICAgICAgIDxlcXVhdGlvbi1lZGl0b3IgW2RhdGFdPVwiZGF0YUVxdWF0aW9uXCI+XHJcbiAgICAgICAgPC9lcXVhdGlvbi1lZGl0b3I+XHJcbiAgICA8L3RuLWN1c3RvbS1zY3JvbGxiYXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Zvb3Rlcj5cclxuICAgICAgICA8YnV0dG9uIGljb249XCJmYXMgZmEtY2hlY2tcIiBbZGlzYWJsZWRdPVwibW9kZWwuc3VibWl0dGluZ1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJoYW5kbGVPaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIidPaycgfCB0cmFuc2xhdGVcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGljb249XCJmYXMgZmEtdW5kb1wiIFtkaXNhYmxlZF09XCJtb2RlbC5zdWJtaXR0aW5nXCIgcEJ1dHRvbiBjbGFzcz1cInVpLWJ1dHRvbi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVxdWF0aW9uRm9ybU1vZGVsLnNob3cgPSBmYWxzZVwiIFtsYWJlbF09XCInRk9STS5DQU5DRUwnIHwgdHJhbnNsYXRlXCI+PC9idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJpc0FkZE5ld3NcIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidhZGRyZXNzLWZvcm0nXCIgW2hlYWRlcl09XCJoZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cImlzQWRkTmV3cyA9IGZhbHNlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGlueU1jZUFkZE5ld3M7IGNvbnRleHQ6IHtcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IGxhbmd1YWdlQ29kZSwgc2hvd0NoYW5nZTogc2hvd0NoYW5nZWRcclxuICAgIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gPGFkZC1uZXdzICNsaXN0QmFzZSBbbGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZVwiIChzaG93Q2hhbmdlKT1cInNob3dDaGFuZ2VkKCRldmVudClcIj48L2FkZC1uZXdzPiAtLT5cclxuPC90bi1kaWFsb2c+XHJcblxyXG48dG4tZGlhbG9nICpuZ0lmPVwic2hvd1RlbXBsYXRlXCIgI2RpYWxvZyBbc3R5bGVDbGFzc109XCInYWRkcmVzcy1mb3JtJ1wiIFtoZWFkZXJdPVwiaGVhZGVyIHwgdHJhbnNsYXRlXCJcclxuICAgIFtwb3B1cFNpemVdPVwicG9wdXBTaXplXCIgKG9uSGlkZSk9XCJzaG93VGVtcGxhdGUgPSBmYWxzZVwiPlxyXG4gICAgPHRuLXRlbXBsYXRlIChvbkNoYW5nZWQpPVwiYWRkVGVtcGxhdGUoJGV2ZW50KVwiPjwvdG4tdGVtcGxhdGU+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPHRuLWRpYWxvZyAqbmdJZj1cImlzQWRkRmlsZVwiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2FkZHJlc3MtZm9ybSdcIiBbaGVhZGVyXT1cImhlYWRlciB8IHRyYW5zbGF0ZVwiIFtwb3B1cFNpemVdPVwicG9wdXBTaXplXCJcclxuICAgIChvbkhpZGUpPVwiaXNBZGRGaWxlID0gZmFsc2VcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW55TWNlRmlsZVBpY2tlckRpYWxvZzsgY29udGV4dDoge1xyXG4gICAgICAgIHBhcmVudE1vZGVsOiBtb2RlbCwgcGFyZW50Q29udGV4dDogY29udGV4dCwgY2xvc2VGb3JtOiBoYW5kbGVDbG9zZUZvcm1BZGRGaWxlLCBvbkNhbmNlbDogaGFuZGxlUkZDYW5jZWwsXHJcbiAgICAgICAgb25DaGFuZ2VkOiBzaG93Q2hhbmdlZCwgb25Jbml0OiBoYW5kbGVJbml0Rm9ybUFkZEZpbGVcclxuICAgIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRGaWxlRm9ybUZvb3RlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPCEtLSA8ZmlsZS1waWNrZXItZGlhbG9nICNmb3JtQmFzZSBbcGFyZW50TW9kZWxdPVwiIG1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiIChjbG9zZUZvcm0pPVwiaXNBZGRGaWxlID0gZmFsc2VcIlxyXG4gICAgICAgIChvbkNhbmNlbCk9XCJoYW5kbGVSRkNhbmNlbCgkZXZlbnQpXCIgKG9uQ2hhbmdlZCk9XCJzaG93Q2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICA8L2ZpbGUtcGlja2VyLWRpYWxvZz4gLS0+XHJcbjwvdG4tZGlhbG9nPiJdfQ==
|