@universis/common
Version:
Universis - common directives and services
138 lines • 16.5 kB
JavaScript
import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from '@angular/core';
import { DialogComponent, DIALOG_BUTTONS } from '../components/modal/dialog.component';
import { BsModalService } from 'ngx-bootstrap/modal';
import * as i0 from "@angular/core";
import * as i1 from "ngx-bootstrap/modal";
/**
*
* Displays a Modal window or a type of Notification (based on choice the color changes)
* @export
* @class ModalService
*/
export class ModalService {
constructor(componentFactoryResolver, appRef, injector, modalService) {
this.componentFactoryResolver = componentFactoryResolver;
this.appRef = appRef;
this.injector = injector;
this.modalService = modalService;
this.config = {
ignoreBackdropClick: true,
keyboard: false,
initialState: null,
class: 'modal-content-base'
};
}
showDialog(title, message, buttons = DIALOG_BUTTONS.Ok, extras) {
const componentRef = this.componentFactoryResolver
.resolveComponentFactory(DialogComponent)
.create(this.injector);
componentRef.instance.title = title;
componentRef.instance.message = message;
componentRef.instance.buttons = buttons;
if (extras) {
componentRef.instance.theme = extras.theme;
}
// attach component to the appRef so that it's inside the ng component tree
this.appRef.attachView(componentRef.hostView);
// get DOM element from component
const modalElement = componentRef.hostView
.rootNodes[0];
// append DOM element to the body
document.body.appendChild(modalElement);
return componentRef.instance.ngOnInit().then(() => {
// show dialog
return componentRef.instance.show().then(result => {
// detach view
this.appRef.detachView(componentRef.hostView);
// destroy component ref
componentRef.destroy();
//
return Promise.resolve(result);
});
});
}
showWarningDialog(title, message, buttons = DIALOG_BUTTONS.OkCancel) {
return this.showDialog('', `<div class="text-center">
<div class="icon-circle icon-circle-warning">
<i class="fa fa-exclamation"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-warning'
});
}
showSuccessDialog(title, message, buttons = DIALOG_BUTTONS.Ok) {
return this.showDialog('', `<div class="text-center">
<div class="icon-circle icon-circle-success">
<i class="fa fa-check"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-success'
});
}
showErrorDialog(title, message, buttons = DIALOG_BUTTONS.Ok) {
return this.showDialog('', `<div class="text-center">
<div class="icon-circle icon-circle-danger">
<i class="fa fa-times"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-danger'
});
}
showInfoDialog(title, message, buttons = DIALOG_BUTTONS.Ok) {
return this.showDialog('', `<div class="text-center">
<div class="icon-circle icon-circle-info">
<i class="fa fa-info"></i>
</div>
<div class="font-2xl font-weight-bold mt-2">
${title}
</div>
<p class="mt-2">
${message}
</p>
</div>
`, buttons, {
theme: 'modal-dialog-info'
});
}
openModal(template, customClass) {
let config;
if (customClass) {
config = JSON.parse(JSON.stringify(this.config));
config.class = customClass;
}
else {
config = this.config;
}
return this.modalRef = this.modalService.show(template, config);
}
openModalComponent(template, options) {
return this.modalRef = this.modalService.show(template, options);
}
}
ModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ModalService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i1.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable });
ModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ModalService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ModalService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i1.BsModalService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFFLHdCQUF3QixFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFPckQ7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVN2QixZQUFvQix3QkFBa0QsRUFDbEQsTUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsWUFBNEI7UUFINUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQVZoRCxXQUFNLEdBQUc7WUFDUCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLG9CQUFvQjtTQUM1QixDQUFDO0lBS2tELENBQUM7SUFFckQsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsVUFBMEIsY0FBYyxDQUFDLEVBQUUsRUFBRSxNQUE4QjtRQUNwSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCO2FBQzdDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQzthQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDeEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3hDLElBQUksTUFBTSxFQUFFO1lBQ1YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUM1QztRQUNELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsaUNBQWlDO1FBQ2pDLE1BQU0sWUFBWSxHQUFJLFlBQVksQ0FBQyxRQUFpQzthQUMvRCxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBQ2pDLGlDQUFpQztRQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNoRCxjQUFjO1lBQ2QsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBRSxNQUFNLENBQUMsRUFBRTtnQkFDakQsY0FBYztnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLHdCQUF3QjtnQkFDeEIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixFQUFFO2dCQUNGLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsVUFBMEIsY0FBYyxDQUFDLFFBQVE7UUFDL0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUNwQixFQUFFLEVBQ0Y7Ozs7O2tCQUtVLEtBQUs7OztrQkFHTCxPQUFPOzs7YUFHWixFQUNMLE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRSxzQkFBc0I7U0FDOUIsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsVUFBMEIsY0FBYyxDQUFDLEVBQUU7UUFDM0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUNsQixFQUFFLEVBQ0Y7Ozs7O2tCQUtVLEtBQUs7OztrQkFHTCxPQUFPOzs7YUFHWixFQUNMLE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRSxzQkFBc0I7U0FDOUIsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFFLFVBQTBCLGNBQWMsQ0FBQyxFQUFFO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FDbEIsRUFBRSxFQUNGOzs7OztrQkFLVSxLQUFLOzs7a0JBR0wsT0FBTzs7O2FBR1osRUFDTCxPQUFPLEVBQUU7WUFDUCxLQUFLLEVBQUUscUJBQXFCO1NBQzdCLENBQUMsQ0FBQztJQUNULENBQUM7SUFFQyxjQUFjLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxVQUEwQixjQUFjLENBQUMsRUFBRTtRQUN0RixPQUFPLElBQUksQ0FBQyxVQUFVLENBQ2xCLEVBQUUsRUFDRjs7Ozs7a0JBS00sS0FBSzs7O2tCQUdMLE9BQU87OzthQUdaLEVBQ0QsT0FBTyxFQUFFO1lBQ0wsS0FBSyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUgsU0FBUyxDQUFDLFFBQWEsRUFBRSxXQUFvQjtRQUMzQyxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztTQUM1QjthQUFNO1lBQ0wsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDdEI7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFhLEVBQUUsT0FBYTtRQUN6QyxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLENBQUM7OzBHQXpJUSxZQUFZOzhHQUFaLFlBQVk7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25SZWYsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRW1iZWRkZWRWaWV3UmVmLCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpYWxvZ0NvbXBvbmVudCwgRElBTE9HX0JVVFRPTlN9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9kYWwvZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwvYnMtbW9kYWwtcmVmLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0NvbXBvbmVudEV4dHJhcyB7XG4gIHRoZW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqXG4gKiBEaXNwbGF5cyBhIE1vZGFsIHdpbmRvdyBvciBhIHR5cGUgb2YgTm90aWZpY2F0aW9uIChiYXNlZCBvbiBjaG9pY2UgdGhlIGNvbG9yIGNoYW5nZXMpXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTW9kYWxTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICBtb2RhbFJlZjogYW55O1xuICBjb25maWcgPSB7XG4gICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgaW5pdGlhbFN0YXRlOiBudWxsLFxuICAgIGNsYXNzOiAnbW9kYWwtY29udGVudC1iYXNlJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkgeyB9XG5cbiAgc2hvd0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2ssIGV4dHJhcz86IERpYWxvZ0NvbXBvbmVudEV4dHJhcykge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShEaWFsb2dDb21wb25lbnQpXG4gICAgICAgIC5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnRpdGxlID0gdGl0bGU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5idXR0b25zID0gYnV0dG9ucztcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudGhlbWUgPSBleHRyYXMudGhlbWU7XG4gICAgfVxuICAgIC8vIGF0dGFjaCBjb21wb25lbnQgdG8gdGhlIGFwcFJlZiBzbyB0aGF0IGl0J3MgaW5zaWRlIHRoZSBuZyBjb21wb25lbnQgdHJlZVxuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAvLyBnZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcbiAgICBjb25zdCBtb2RhbEVsZW1lbnQgPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KVxuICAgICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIC8vIGFwcGVuZCBET00gZWxlbWVudCB0byB0aGUgYm9keVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWxFbGVtZW50KTtcbiAgICByZXR1cm4gY29tcG9uZW50UmVmLmluc3RhbmNlLm5nT25Jbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAvLyBzaG93IGRpYWxvZ1xuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zaG93KCkudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgICAgLy8gZGV0YWNoIHZpZXdcbiAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAvLyBkZXN0cm95IGNvbXBvbmVudCByZWZcbiAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93V2FybmluZ0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2tDYW5jZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dEaWFsb2coXG4gICAgICAgICcnLFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLXdhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC0yeGwgZm9udC13ZWlnaHQtYm9sZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgJHt0aXRsZX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAke21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgLFxuICAgICAgICBidXR0b25zLCB7XG4gICAgICAgICAgdGhlbWU6ICdtb2RhbC1kaWFsb2ctd2FybmluZydcbiAgICAgICAgfSk7XG4gIH1cblxuICBzaG93U3VjY2Vzc0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2spIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RGlhbG9nKFxuICAgICAgICAnJyxcbiAgICAgICAgYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBpY29uLWNpcmNsZS1zdWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtMnhsIGZvbnQtd2VpZ2h0LWJvbGQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICR7dGl0bGV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgJHttZXNzYWdlfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYCxcbiAgICAgICAgYnV0dG9ucywge1xuICAgICAgICAgIHRoZW1lOiAnbW9kYWwtZGlhbG9nLXN1Y2Nlc3MnXG4gICAgICAgIH0pO1xuICB9XG5cbiAgc2hvd0Vycm9yRGlhbG9nKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYnV0dG9uczogRElBTE9HX0JVVFRPTlMgPSBESUFMT0dfQlVUVE9OUy5Paykge1xuICAgIHJldHVybiB0aGlzLnNob3dEaWFsb2coXG4gICAgICAgICcnLFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGJ1dHRvbnMsIHtcbiAgICAgICAgICB0aGVtZTogJ21vZGFsLWRpYWxvZy1kYW5nZXInXG4gICAgICAgIH0pO1xuICB9XG5cbiAgICBzaG93SW5mb0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0RpYWxvZyhcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBpY29uLWNpcmNsZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mb1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC0yeGwgZm9udC13ZWlnaHQtYm9sZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgJHt0aXRsZX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAke21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgYnV0dG9ucywge1xuICAgICAgICAgICAgICAgIHRoZW1lOiAnbW9kYWwtZGlhbG9nLWluZm8nXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgb3Blbk1vZGFsKHRlbXBsYXRlOiBhbnksIGN1c3RvbUNsYXNzPzogc3RyaW5nKTogQnNNb2RhbFJlZiB7XG4gICAgbGV0IGNvbmZpZztcbiAgICBpZiAoY3VzdG9tQ2xhc3MpIHtcbiAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpKTtcbiAgICAgIGNvbmZpZy5jbGFzcyA9IGN1c3RvbUNsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCBjb25maWcpO1xuICB9XG5cbiAgb3Blbk1vZGFsQ29tcG9uZW50KHRlbXBsYXRlOiBhbnksIG9wdGlvbnM/OiBhbnkpOiBCc01vZGFsUmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCBvcHRpb25zKTtcbiAgICB9XG59XG4iXX0=