guachos-user-panel
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.9.
102 lines • 27 kB
JavaScript
import { Component, Input, EventEmitter, Output, ViewChild } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/menu";
import * as i2 from "@angular/material/button";
import * as i3 from "@angular/material/divider";
import * as i4 from "@angular/material/icon";
import * as i5 from "@angular/flex-layout/flex";
import * as i6 from "@angular/common";
import * as i7 from "@angular/flex-layout/extended";
import * as i8 from "@ngx-translate/core";
export class GuachosUserPanelComponent {
constructor(cdRef) {
this.cdRef = cdRef;
this.onEditProfile = new EventEmitter();
this.onLogout = new EventEmitter();
this.onLogoutAlternative = new EventEmitter();
this.onCustomButtonClick = new EventEmitter();
this._apiUrl = '';
this._imagePath = null;
this._loggedInUser = '';
this._options = {
showProfile: true,
showSecondaryLogout: true
};
}
set customButtons(value) {
this._customButtons = value;
}
get customButtons() {
return this._customButtons;
}
set options(value) {
this._options = value;
}
get options() {
return this._options;
}
set loggedInUser(value) {
this._loggedInUser = value;
}
get loggedInUser() {
return this._loggedInUser;
}
set apiUrl(value) {
this._apiUrl = value;
}
get apiUrl() {
return this._apiUrl;
}
set imagePath(value) {
this._imagePath = value;
}
get imagePath() {
return this._imagePath;
}
ngAfterViewInit() {
this.primaryColor = getComputedStyle(this.primary.nativeElement).color;
this.cdRef.detectChanges();
}
ngOnInit() {
}
editProfile() {
this.onEditProfile.emit(true);
}
logout() {
this.onLogout.emit(true);
}
logoutSecondarySession() {
this.onLogoutAlternative.emit(true);
}
clickCustomButton(button) {
this.onCustomButtonClick.emit(button);
}
}
GuachosUserPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GuachosUserPanelComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
GuachosUserPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: GuachosUserPanelComponent, selector: "guachos-user-panel", inputs: { customButtons: "customButtons", options: "options", loggedInUser: "loggedInUser", apiUrl: "apiUrl", imagePath: "imagePath" }, outputs: { onEditProfile: "onEditProfile", onLogout: "onLogout", onLogoutAlternative: "onLogoutAlternative", onCustomButtonClick: "onCustomButtonClick" }, viewQueries: [{ propertyName: "primary", first: true, predicate: ["primary"], descendants: true }], ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutAlign=\"end center\">\r\n <div #primary class=\"mat-button mat-primary\" style=\"display:none\"></div>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mega-menu\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <div class=\"large-default-avatar cursor-pointer\" fxLayout=\"row\" fxLayoutAlign=\"center center\"\r\n [ngStyle]=\"{'background-color': primaryColor}\"\r\n *ngIf=\"(!loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath]))\r\n || (loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath]))))\">\r\n <span style=\"text-transform: uppercase;\">{{loggedInUser.name[0]}}</span>\r\n </div>\r\n <img class=\"large-default-avatar cursor-pointer\"\r\n *ngIf=\"loggedInUser && ((!imagePath && loggedInUser.image) || (imagePath && loggedInUser[imagePath]))\"\r\n src=\"{{apiUrl+ (imagePath? loggedInUser[imagePath] :loggedInUser.image)}}\" alt=\"user\"\r\n onerror=\"onerror=null;src='assets/images/users/profile2.png';\">\r\n\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"cursor-pointer mt-3\">\r\n <span class=\"mat-body-2\">{{loggedInUser ? loggedInUser.name + ' ' + (loggedInUser.lastName || '') : ''}}</span>\r\n <span class=\"color-grey-800 mat-caption\">{{loggedInUser ? loggedInUser.username : ''}}</span>\r\n </div>\r\n\r\n <button mat-stroked-button style=\"border-radius: 2px;\" class=\"my-3\" *ngIf=\"options.showProfile\"\r\n (click)=\"editProfile()\">\r\n {{\"Gestiona tu perfil\" | translate}}\r\n </button>\r\n\r\n <div style=\"width: 100%;\">\r\n <mat-divider></mat-divider>\r\n </div>\r\n\r\n <div style=\"width: 100%;\" *ngFor=\"let item of customButtons\">\r\n <button mat-button (click)=\"clickCustomButton(item)\" style=\"width: 100%;\">\r\n <mat-icon [ngStyle]=\"{'color': primaryColor}\" style=\"margin-right: 8px;\">{{item.icon}}</mat-icon>\r\n <span [ngStyle]=\"{'color': primaryColor}\">{{item.name}}</span>\r\n </button>\r\n <mat-divider></mat-divider>\r\n </div>\r\n\r\n <button mat-stroked-button *ngIf=\"options.showSecondaryLogout\" (click)=\"logoutSecondarySession()\" class=\"my-3\">\r\n {{\"Cerrar la sesi\u00F3n alternativa\" | translate}}\r\n </button>\r\n\r\n <button mat-stroked-button (click)=\"logout()\" class=\"my-3\">\r\n {{\"Cerrar la sesi\u00F3n\" | translate}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n\r\n <div fxLayout=\"row\" class=\"py-1\" fxLayoutAlign=\"start center\">\r\n <div class=\"small-default-avatar cursor-pointer\" fxLayout=\"row\" fxLayoutAlign=\"center center\"\r\n [ngStyle]=\"{'color': primaryColor, 'background-color': 'white'}\"\r\n *ngIf=\"(!loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath])) || (loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath]))))\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <span style=\"text-transform: uppercase;\">{{loggedInUser.name[0]}}</span>\r\n </div>\r\n <img class=\"ImageAvatar cursor-pointer\"\r\n *ngIf=\"loggedInUser && ((!imagePath && loggedInUser.image) || (imagePath && loggedInUser[imagePath]))\"\r\n [matMenuTriggerFor]=\"menu\" src=\"{{apiUrl+ (imagePath? loggedInUser[imagePath] :loggedInUser.image)}}\"\r\n alt=\"user\" onerror=\"onerror=null;src='../../../assets/images/users/profile2.png';\">\r\n </div>\r\n\r\n</div>\r\n", styles: [".m-3{margin:16px}.my-3{margin-top:16px;margin-bottom:16px}.mb-3{margin-bottom:16px}.mt-3{margin-top:16px}.mx-3{margin-left:16px;margin-right:16px}.ml-3{margin-left:16px}.mr-3{margin-right:16px}.p-3{padding:16px}.py-3{padding-top:16px;padding-bottom:16px}.pb-3{padding-bottom:16px}.pt-3{padding-top:16px}.px-3{padding-left:16px;padding-right:16px}.pl-3{padding-left:16px}.pr-3{padding-right:16px}.my-mega-menu{width:400px!important;max-width:400px!important;margin-top:16px}.large-default-avatar{color:#fff;width:100px;height:100px;border-radius:50%;text-align:center}.large-default-avatar span{font-size:60px}.small-default-avatar{color:#fff;width:32px;height:32px;border-radius:50%;text-align:center}.small-default-avatar span{font-size:20px}\n"], components: [{ type: i1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }], pipes: { "translate": i8.TranslatePipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: GuachosUserPanelComponent, decorators: [{
type: Component,
args: [{ selector: 'guachos-user-panel', template: "<div fxLayout=\"row\" fxLayoutAlign=\"end center\">\r\n <div #primary class=\"mat-button mat-primary\" style=\"display:none\"></div>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mega-menu\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <div class=\"large-default-avatar cursor-pointer\" fxLayout=\"row\" fxLayoutAlign=\"center center\"\r\n [ngStyle]=\"{'background-color': primaryColor}\"\r\n *ngIf=\"(!loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath]))\r\n || (loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath]))))\">\r\n <span style=\"text-transform: uppercase;\">{{loggedInUser.name[0]}}</span>\r\n </div>\r\n <img class=\"large-default-avatar cursor-pointer\"\r\n *ngIf=\"loggedInUser && ((!imagePath && loggedInUser.image) || (imagePath && loggedInUser[imagePath]))\"\r\n src=\"{{apiUrl+ (imagePath? loggedInUser[imagePath] :loggedInUser.image)}}\" alt=\"user\"\r\n onerror=\"onerror=null;src='assets/images/users/profile2.png';\">\r\n\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"cursor-pointer mt-3\">\r\n <span class=\"mat-body-2\">{{loggedInUser ? loggedInUser.name + ' ' + (loggedInUser.lastName || '') : ''}}</span>\r\n <span class=\"color-grey-800 mat-caption\">{{loggedInUser ? loggedInUser.username : ''}}</span>\r\n </div>\r\n\r\n <button mat-stroked-button style=\"border-radius: 2px;\" class=\"my-3\" *ngIf=\"options.showProfile\"\r\n (click)=\"editProfile()\">\r\n {{\"Gestiona tu perfil\" | translate}}\r\n </button>\r\n\r\n <div style=\"width: 100%;\">\r\n <mat-divider></mat-divider>\r\n </div>\r\n\r\n <div style=\"width: 100%;\" *ngFor=\"let item of customButtons\">\r\n <button mat-button (click)=\"clickCustomButton(item)\" style=\"width: 100%;\">\r\n <mat-icon [ngStyle]=\"{'color': primaryColor}\" style=\"margin-right: 8px;\">{{item.icon}}</mat-icon>\r\n <span [ngStyle]=\"{'color': primaryColor}\">{{item.name}}</span>\r\n </button>\r\n <mat-divider></mat-divider>\r\n </div>\r\n\r\n <button mat-stroked-button *ngIf=\"options.showSecondaryLogout\" (click)=\"logoutSecondarySession()\" class=\"my-3\">\r\n {{\"Cerrar la sesi\u00F3n alternativa\" | translate}}\r\n </button>\r\n\r\n <button mat-stroked-button (click)=\"logout()\" class=\"my-3\">\r\n {{\"Cerrar la sesi\u00F3n\" | translate}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n\r\n <div fxLayout=\"row\" class=\"py-1\" fxLayoutAlign=\"start center\">\r\n <div class=\"small-default-avatar cursor-pointer\" fxLayout=\"row\" fxLayoutAlign=\"center center\"\r\n [ngStyle]=\"{'color': primaryColor, 'background-color': 'white'}\"\r\n *ngIf=\"(!loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath])) || (loggedInUser && ((!imagePath && !loggedInUser.image) || (imagePath && !loggedInUser[imagePath]))))\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <span style=\"text-transform: uppercase;\">{{loggedInUser.name[0]}}</span>\r\n </div>\r\n <img class=\"ImageAvatar cursor-pointer\"\r\n *ngIf=\"loggedInUser && ((!imagePath && loggedInUser.image) || (imagePath && loggedInUser[imagePath]))\"\r\n [matMenuTriggerFor]=\"menu\" src=\"{{apiUrl+ (imagePath? loggedInUser[imagePath] :loggedInUser.image)}}\"\r\n alt=\"user\" onerror=\"onerror=null;src='../../../assets/images/users/profile2.png';\">\r\n </div>\r\n\r\n</div>\r\n", styles: [".m-3{margin:16px}.my-3{margin-top:16px;margin-bottom:16px}.mb-3{margin-bottom:16px}.mt-3{margin-top:16px}.mx-3{margin-left:16px;margin-right:16px}.ml-3{margin-left:16px}.mr-3{margin-right:16px}.p-3{padding:16px}.py-3{padding-top:16px;padding-bottom:16px}.pb-3{padding-bottom:16px}.pt-3{padding-top:16px}.px-3{padding-left:16px;padding-right:16px}.pl-3{padding-left:16px}.pr-3{padding-right:16px}.my-mega-menu{width:400px!important;max-width:400px!important;margin-top:16px}.large-default-avatar{color:#fff;width:100px;height:100px;border-radius:50%;text-align:center}.large-default-avatar span{font-size:60px}.small-default-avatar{color:#fff;width:32px;height:32px;border-radius:50%;text-align:center}.small-default-avatar span{font-size:20px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { primary: [{
type: ViewChild,
args: ['primary']
}], onEditProfile: [{
type: Output
}], onLogout: [{
type: Output
}], onLogoutAlternative: [{
type: Output
}], onCustomButtonClick: [{
type: Output
}], customButtons: [{
type: Input
}], options: [{
type: Input
}], loggedInUser: [{
type: Input
}], apiUrl: [{
type: Input
}], imagePath: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhY2hvcy11c2VyLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtdXNlci1wYW5lbC9zcmMvbGliL2d1YWNob3MtdXNlci1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLXVzZXItcGFuZWwvc3JjL2xpYi9ndWFjaG9zLXVzZXItcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFFTixTQUFTLEVBR1YsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFpQnZCLE1BQU0sT0FBTyx5QkFBeUI7SUErRHBDLFlBQW9CLEtBQXdCO1FBQXhCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBNURsQyxrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzNELGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0RCx3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRSx3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUzRSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGVBQVUsR0FBUSxJQUFJLENBQUM7UUFDdkIsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFxQjtZQUMzQixXQUFXLEVBQUUsSUFBSTtZQUNqQixtQkFBbUIsRUFBRSxJQUFJO1NBQzFCLENBQUM7SUFrREYsQ0FBQztJQTlDRCxJQUNJLGFBQWEsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQ0ksT0FBTyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDSSxZQUFZLENBQUMsS0FBVTtRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUNJLE1BQU0sQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksU0FBUyxDQUFDLEtBQVU7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBS0QsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQU07UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDOztzSEF4RlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsaWNDM0J0QyxvbUhBNkRBOzJGRGxDYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0Usb0JBQW9CO3dHQU9SLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDVixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFhSCxhQUFhO3NCQURoQixLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFVRixZQUFZO3NCQURmLEtBQUs7Z0JBVUYsTUFBTTtzQkFEVCxLQUFLO2dCQVVGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmRlY2xhcmUgbGV0IGdldENvbXB1dGVkU3R5bGU6IGFueTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhbmVsT3B0aW9ucyB7XHJcbiAgc2hvd1Byb2ZpbGU/OiBib29sZWFuO1xyXG4gIHNob3dTZWNvbmRhcnlMb2dvdXQ/OiBib29sZWFuO1xyXG4gIGNvbG9yPzogc3RyaW5nO1xyXG4gIHdpZHRoPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d1YWNob3MtdXNlci1wYW5lbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2d1YWNob3MtdXNlci1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3VhY2hvcy11c2VyLXBhbmVsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBHdWFjaG9zVXNlclBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgncHJpbWFyeScpIHByaW1hcnk6IEVsZW1lbnRSZWY7XHJcbiAgQE91dHB1dCgpIG9uRWRpdFByb2ZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG9uTG9nb3V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvbkxvZ291dEFsdGVybmF0aXZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvbkN1c3RvbUJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBfYXBpVXJsOiBhbnkgPSAnJztcclxuICBfaW1hZ2VQYXRoOiBhbnkgPSBudWxsO1xyXG4gIF9sb2dnZWRJblVzZXI6IGFueSA9ICcnO1xyXG4gIF9vcHRpb25zOiBVc2VyUGFuZWxPcHRpb25zID0ge1xyXG4gICAgc2hvd1Byb2ZpbGU6IHRydWUsXHJcbiAgICBzaG93U2Vjb25kYXJ5TG9nb3V0OiB0cnVlXHJcbiAgfTtcclxuICBfY3VzdG9tQnV0dG9uczogYW55O1xyXG4gIHByaW1hcnlDb2xvcjogYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjdXN0b21CdXR0b25zKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2N1c3RvbUJ1dHRvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBjdXN0b21CdXR0b25zKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tQnV0dG9ucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG9wdGlvbnModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9wdGlvbnMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbG9nZ2VkSW5Vc2VyKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2xvZ2dlZEluVXNlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvZ2dlZEluVXNlcigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvZ2dlZEluVXNlcjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFwaVVybCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9hcGlVcmwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBhcGlVcmwoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9hcGlVcmw7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpbWFnZVBhdGgodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5faW1hZ2VQYXRoID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaW1hZ2VQYXRoKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VQYXRoO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucHJpbWFyeUNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnByaW1hcnkubmF0aXZlRWxlbWVudCkuY29sb3I7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgZWRpdFByb2ZpbGUoKSB7XHJcbiAgICB0aGlzLm9uRWRpdFByb2ZpbGUuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIHRoaXMub25Mb2dvdXQuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGxvZ291dFNlY29uZGFyeVNlc3Npb24oKSB7XHJcbiAgICB0aGlzLm9uTG9nb3V0QWx0ZXJuYXRpdmUuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGNsaWNrQ3VzdG9tQnV0dG9uKGJ1dHRvbikge1xyXG4gICAgdGhpcy5vbkN1c3RvbUJ1dHRvbkNsaWNrLmVtaXQoYnV0dG9uKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCI+XHJcbiAgPGRpdiAjcHJpbWFyeSBjbGFzcz1cIm1hdC1idXR0b24gbWF0LXByaW1hcnlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjwvZGl2PlxyXG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm15LW1lZ2EtbWVudVwiPlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYXJnZS1kZWZhdWx0LWF2YXRhciBjdXJzb3ItcG9pbnRlclwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IHByaW1hcnlDb2xvcn1cIlxyXG4gICAgICAgICAgICpuZ0lmPVwiKCFsb2dnZWRJblVzZXIgJiYgKCghaW1hZ2VQYXRoICYmICFsb2dnZWRJblVzZXIuaW1hZ2UpIHx8IChpbWFnZVBhdGggJiYgIWxvZ2dlZEluVXNlcltpbWFnZVBhdGhdKSlcclxuICAgICAgICAgICB8fCAobG9nZ2VkSW5Vc2VyICYmICgoIWltYWdlUGF0aCAmJiAhbG9nZ2VkSW5Vc2VyLmltYWdlKSB8fCAoaW1hZ2VQYXRoICYmICFsb2dnZWRJblVzZXJbaW1hZ2VQYXRoXSkpKSlcIj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XCI+e3tsb2dnZWRJblVzZXIubmFtZVswXX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGltZyBjbGFzcz1cImxhcmdlLWRlZmF1bHQtYXZhdGFyIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAqbmdJZj1cImxvZ2dlZEluVXNlciAmJiAoKCFpbWFnZVBhdGggJiYgbG9nZ2VkSW5Vc2VyLmltYWdlKSB8fCAoaW1hZ2VQYXRoICYmIGxvZ2dlZEluVXNlcltpbWFnZVBhdGhdKSlcIlxyXG4gICAgICAgICAgIHNyYz1cInt7YXBpVXJsKyAoaW1hZ2VQYXRoPyBsb2dnZWRJblVzZXJbaW1hZ2VQYXRoXSA6bG9nZ2VkSW5Vc2VyLmltYWdlKX19XCIgYWx0PVwidXNlclwiXHJcbiAgICAgICAgICAgb25lcnJvcj1cIm9uZXJyb3I9bnVsbDtzcmM9J2Fzc2V0cy9pbWFnZXMvdXNlcnMvcHJvZmlsZTIucG5nJztcIj5cclxuXHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbXQtM1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7bG9nZ2VkSW5Vc2VyID8gbG9nZ2VkSW5Vc2VyLm5hbWUgKyAnICcgKyAobG9nZ2VkSW5Vc2VyLmxhc3ROYW1lIHx8ICcnKSA6ICcnfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1ncmV5LTgwMCBtYXQtY2FwdGlvblwiPnt7bG9nZ2VkSW5Vc2VyID8gbG9nZ2VkSW5Vc2VyLnVzZXJuYW1lIDogJyd9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDJweDtcIiBjbGFzcz1cIm15LTNcIiAqbmdJZj1cIm9wdGlvbnMuc2hvd1Byb2ZpbGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJlZGl0UHJvZmlsZSgpXCI+XHJcbiAgICAgICAge3tcIkdlc3Rpb25hIHR1IHBlcmZpbFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGN1c3RvbUJ1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImNsaWNrQ3VzdG9tQnV0dG9uKGl0ZW0pXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogcHJpbWFyeUNvbG9yfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHg7XCI+e3tpdGVtLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogcHJpbWFyeUNvbG9yfVwiPnt7aXRlbS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKm5nSWY9XCJvcHRpb25zLnNob3dTZWNvbmRhcnlMb2dvdXRcIiAoY2xpY2spPVwibG9nb3V0U2Vjb25kYXJ5U2Vzc2lvbigpXCIgY2xhc3M9XCJteS0zXCI+XHJcbiAgICAgICAge3tcIkNlcnJhciBsYSBzZXNpw7NuIGFsdGVybmF0aXZhXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJsb2dvdXQoKVwiIGNsYXNzPVwibXktM1wiPlxyXG4gICAgICAgIHt7XCJDZXJyYXIgbGEgc2VzacOzblwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1tZW51PlxyXG5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgY2xhc3M9XCJweS0xXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtYWxsLWRlZmF1bHQtYXZhdGFyIGN1cnNvci1wb2ludGVyXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiXHJcbiAgICAgICAgIFtuZ1N0eWxlXT1cInsnY29sb3InOiBwcmltYXJ5Q29sb3IsICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3doaXRlJ31cIlxyXG4gICAgICAgICAqbmdJZj1cIighbG9nZ2VkSW5Vc2VyICYmICgoIWltYWdlUGF0aCAmJiAhbG9nZ2VkSW5Vc2VyLmltYWdlKSB8fCAoaW1hZ2VQYXRoICYmICFsb2dnZWRJblVzZXJbaW1hZ2VQYXRoXSkpIHx8IChsb2dnZWRJblVzZXIgJiYgKCghaW1hZ2VQYXRoICYmICFsb2dnZWRJblVzZXIuaW1hZ2UpIHx8IChpbWFnZVBhdGggJiYgIWxvZ2dlZEluVXNlcltpbWFnZVBhdGhdKSkpKVwiXHJcbiAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCI+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcIj57e2xvZ2dlZEluVXNlci5uYW1lWzBdfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxpbWcgY2xhc3M9XCJJbWFnZUF2YXRhciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICpuZ0lmPVwibG9nZ2VkSW5Vc2VyICYmICgoIWltYWdlUGF0aCAmJiBsb2dnZWRJblVzZXIuaW1hZ2UpIHx8IChpbWFnZVBhdGggJiYgbG9nZ2VkSW5Vc2VyW2ltYWdlUGF0aF0pKVwiXHJcbiAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgc3JjPVwie3thcGlVcmwrIChpbWFnZVBhdGg/IGxvZ2dlZEluVXNlcltpbWFnZVBhdGhdIDpsb2dnZWRJblVzZXIuaW1hZ2UpfX1cIlxyXG4gICAgICAgICBhbHQ9XCJ1c2VyXCIgb25lcnJvcj1cIm9uZXJyb3I9bnVsbDtzcmM9Jy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvdXNlcnMvcHJvZmlsZTIucG5nJztcIj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG4iXX0=