@netgrif/components
Version:
Netgrif Application Engine frontend Angular components
26 lines • 29.9 kB
JavaScript
import { Component } from '@angular/core';
import { AbstractProfileComponent } from '@netgrif/components-core';
import * as i0 from "@angular/core";
import * as i1 from "@netgrif/components-core";
import * as i2 from "@angular/common";
import * as i3 from "@ngbracket/ngx-layout";
import * as i4 from "@angular/material/card";
import * as i5 from "@angular/material/chips";
import * as i6 from "@angular/material/input";
import * as i7 from "@angular/material/form-field";
import * as i8 from "@angular/material/core";
import * as i9 from "@ngx-translate/core";
export class ProfileComponent extends AbstractProfileComponent {
_userService;
constructor(_userService) {
super(_userService);
this._userService = _userService;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProfileComponent, deps: [{ token: i1.UserService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ProfileComponent, selector: "nc-user-profile", usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"!user\">\n <div fxLayout=\"row\" fxFlex=\"50\" fxLayoutAlign=\"center center\">\n <mat-card fxLayoutAlign=\"center center\">\n <h1>{{ 'profile.notLogged' | translate }}</h1>\n </mat-card>\n </div>\n</div>\n<div *ngIf=\"user\" fxLayout=\"column\" fxLayoutAlign=\"center start\">\n <div [style.backgroundImage]=\"'url('+userBanner+')'\" fxLayout=\"row wrap\" class=\"full-width banner mat-elevation-z6\"\n matRipple fxLayoutAlign=\"start center\">\n <div class=\"user-avatar-large mat-elevation-z6 margin-banner\" matRipple>\n <img [src]=\"userAvatar\" alt=\"user avatar\" class=\"full-width full-height\">\n </div>\n <h1 class=\"white-name\">{{ user.fullName }}</h1>\n </div>\n <div fxLayout=\"row\" fxFlex fxLayoutAlign=\"center end\" class=\"full-width div-background netgrif-input\">\n <div fxFlex=\"100\" fxFlex.gt-sm=\"80\" class=\"tab-group margin-bottom-x2 mat-elevation-z4\">\n <div fxLayout=\"row wrap\">\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.personal' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <mat-form-field appearance=\"outline\" class=\"full-width form-field\">\n <mat-label>{{ 'profile.name' | translate }}</mat-label>\n <input matInput disabled [value]=\"user.firstName\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width form-field\">\n <mat-label>{{ 'profile.surname' | translate }}</mat-label>\n <input matInput disabled [value]=\"user.lastName\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width form-field\">\n <mat-label>Email</mat-label>\n <input matInput disabled [value]=\"user.email\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.authority' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <div class=\"user-chip-list full-width\" *ngIf=\"user.authorities?.length > 0\">\n <mat-chip-listbox class=\"chip-listbox\" [disabled]=\"true\">\n <mat-chip-option class=\"chip-option\" color=\"primary\"\n *ngFor=\"let authority of user.authorities\">\n {{ authority }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div fxLayout=\"row wrap\">\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.roles' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <div class=\"user-chip-list full-width\" *ngIf=\"user.roles?.length > 0\">\n <mat-chip-listbox class=\"chip-listbox margin-top-default\" [disabled]=\"true\">\n <mat-chip-option class=\"chip-option\" color=\"primary\"\n *ngFor=\"let role of user.roles\">\n {{ role.name }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n </div>\n </div>\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.groups' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <div class=\"user-chip-list full-width\" *ngIf=\"user.groups?.length > 0\">\n <mat-chip-listbox class=\"chip-listbox\" [disabled]=\"true\">\n <mat-chip-option class=\"chip-option\" color=\"primary\"\n *ngFor=\"let group of user.groups\">\n {{ group }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".full-height{height:100%;min-height:100%}.full-width{width:100%;min-width:100%}.padding-default{padding:8px}.padding-half{padding:4px}.padding-x2{padding:16px}.margin-default{margin:8px}.margin-half{margin:4px}.margin-x2{margin:16px}.margin-top-default{margin-top:8px}.margin-top-half{margin-top:4px}.margin-top-x2{margin-top:16px}.margin-bottom-default{margin-bottom:8px}.margin-bottom-half{margin-bottom:4px}.margin-bottom-x2{margin-bottom:16px}.margin-left-default{margin-left:8px}.margin-left-half{margin-left:4px}.margin-left-x2{margin-left:16px}.margin-right-default{margin-right:8px}.margin-right-half{margin-right:4px}.margin-right-x2{margin-right:16px}.user-avatar-large{width:100px;height:100px;border-radius:100px}.banner{height:250px;background-repeat:no-repeat;background-size:cover}.margin-banner{margin-left:10%;margin-right:32px}.white-name{color:#fff}.tab-group{margin-top:-48px;z-index:100;background:#f0f0f0}.div-background{background:#ddd}.user-chip-list{width:100%;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-start;padding:8px}.chip-listbox{width:100%;max-height:200px;overflow-y:auto}.chip-option{white-space:normal;word-break:break-word;overflow:hidden;text-overflow:ellipsis;max-width:100%}.form-field{min-width:200px;max-width:100%;width:100%}.border{border:1px solid #dddddd;border-radius:6px;background:#fff}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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"] }, { kind: "directive", type: i3.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"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i5.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProfileComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-user-profile', template: "<div *ngIf=\"!user\">\n <div fxLayout=\"row\" fxFlex=\"50\" fxLayoutAlign=\"center center\">\n <mat-card fxLayoutAlign=\"center center\">\n <h1>{{ 'profile.notLogged' | translate }}</h1>\n </mat-card>\n </div>\n</div>\n<div *ngIf=\"user\" fxLayout=\"column\" fxLayoutAlign=\"center start\">\n <div [style.backgroundImage]=\"'url('+userBanner+')'\" fxLayout=\"row wrap\" class=\"full-width banner mat-elevation-z6\"\n matRipple fxLayoutAlign=\"start center\">\n <div class=\"user-avatar-large mat-elevation-z6 margin-banner\" matRipple>\n <img [src]=\"userAvatar\" alt=\"user avatar\" class=\"full-width full-height\">\n </div>\n <h1 class=\"white-name\">{{ user.fullName }}</h1>\n </div>\n <div fxLayout=\"row\" fxFlex fxLayoutAlign=\"center end\" class=\"full-width div-background netgrif-input\">\n <div fxFlex=\"100\" fxFlex.gt-sm=\"80\" class=\"tab-group margin-bottom-x2 mat-elevation-z4\">\n <div fxLayout=\"row wrap\">\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.personal' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <mat-form-field appearance=\"outline\" class=\"full-width form-field\">\n <mat-label>{{ 'profile.name' | translate }}</mat-label>\n <input matInput disabled [value]=\"user.firstName\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width form-field\">\n <mat-label>{{ 'profile.surname' | translate }}</mat-label>\n <input matInput disabled [value]=\"user.lastName\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width form-field\">\n <mat-label>Email</mat-label>\n <input matInput disabled [value]=\"user.email\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.authority' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <div class=\"user-chip-list full-width\" *ngIf=\"user.authorities?.length > 0\">\n <mat-chip-listbox class=\"chip-listbox\" [disabled]=\"true\">\n <mat-chip-option class=\"chip-option\" color=\"primary\"\n *ngFor=\"let authority of user.authorities\">\n {{ authority }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div fxLayout=\"row wrap\">\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.roles' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <div class=\"user-chip-list full-width\" *ngIf=\"user.roles?.length > 0\">\n <mat-chip-listbox class=\"chip-listbox margin-top-default\" [disabled]=\"true\">\n <mat-chip-option class=\"chip-option\" color=\"primary\"\n *ngFor=\"let role of user.roles\">\n {{ role.name }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n </div>\n </div>\n <div fxFlex=\"100\" fxFlex.gt-sm=\"50\" class=\"padding-x2\" fxLayout=\"column\">\n <div fxLayout=\"column\" class=\"full-height border\">\n <div fxLayoutAlign=\"center start\" class=\"card-title margin-bottom-default\" matRipple>\n <h2>{{ 'profile.groups' | translate }}</h2>\n </div>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"padding-default\">\n <div class=\"user-chip-list full-width\" *ngIf=\"user.groups?.length > 0\">\n <mat-chip-listbox class=\"chip-listbox\" [disabled]=\"true\">\n <mat-chip-option class=\"chip-option\" color=\"primary\"\n *ngFor=\"let group of user.groups\">\n {{ group }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".full-height{height:100%;min-height:100%}.full-width{width:100%;min-width:100%}.padding-default{padding:8px}.padding-half{padding:4px}.padding-x2{padding:16px}.margin-default{margin:8px}.margin-half{margin:4px}.margin-x2{margin:16px}.margin-top-default{margin-top:8px}.margin-top-half{margin-top:4px}.margin-top-x2{margin-top:16px}.margin-bottom-default{margin-bottom:8px}.margin-bottom-half{margin-bottom:4px}.margin-bottom-x2{margin-bottom:16px}.margin-left-default{margin-left:8px}.margin-left-half{margin-left:4px}.margin-left-x2{margin-left:16px}.margin-right-default{margin-right:8px}.margin-right-half{margin-right:4px}.margin-right-x2{margin-right:16px}.user-avatar-large{width:100px;height:100px;border-radius:100px}.banner{height:250px;background-repeat:no-repeat;background-size:cover}.margin-banner{margin-left:10%;margin-right:32px}.white-name{color:#fff}.tab-group{margin-top:-48px;z-index:100;background:#f0f0f0}.div-background{background:#ddd}.user-chip-list{width:100%;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-start;padding:8px}.chip-listbox{width:100%;max-height:200px;overflow-y:auto}.chip-option{white-space:normal;word-break:break-word;overflow:hidden;text-overflow:ellipsis;max-width:100%}.form-field{min-width:200px;max-width:100%;width:100%}.border{border:1px solid #dddddd;border-radius:6px;background:#fff}\n"] }]
}], ctorParameters: () => [{ type: i1.UserService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi91c2VyL3Byb2ZpbGUvcHJvZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi91c2VyL3Byb2ZpbGUvcHJvZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyx3QkFBd0IsRUFBYyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7OztBQU8vRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsd0JBQXdCO0lBQ3BDO0lBQXRCLFlBQXNCLFlBQXlCO1FBQzNDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQURGLGlCQUFZLEdBQVosWUFBWSxDQUFhO0lBRS9DLENBQUM7d0dBSFEsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsOEVDUjdCLCttTUFnR0E7OzRGRHhGYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0ksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdFByb2ZpbGVDb21wb25lbnQsIFVzZXJTZXJ2aWNlfSBmcm9tICdAbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jLXVzZXItcHJvZmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2ZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2ZpbGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RQcm9maWxlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge1xuICAgICAgICBzdXBlcihfdXNlclNlcnZpY2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhdXNlclwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeEZsZXg9XCI1MFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gICAgICAgIDxtYXQtY2FyZCBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuICAgICAgICAgICAgPGgxPnt7ICdwcm9maWxlLm5vdExvZ2dlZCcgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidXNlclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiPlxuICAgIDxkaXYgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCIndXJsKCcrdXNlckJhbm5lcisnKSdcIiBmeExheW91dD1cInJvdyB3cmFwXCIgY2xhc3M9XCJmdWxsLXdpZHRoIGJhbm5lciBtYXQtZWxldmF0aW9uLXo2XCJcbiAgICAgICAgIG1hdFJpcHBsZSBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWF2YXRhci1sYXJnZSBtYXQtZWxldmF0aW9uLXo2IG1hcmdpbi1iYW5uZXJcIiBtYXRSaXBwbGU+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwidXNlckF2YXRhclwiIGFsdD1cInVzZXIgYXZhdGFyXCIgY2xhc3M9XCJmdWxsLXdpZHRoIGZ1bGwtaGVpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aDEgY2xhc3M9XCJ3aGl0ZS1uYW1lXCI+e3sgdXNlci5mdWxsTmFtZSB9fTwvaDE+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4RmxleCBmeExheW91dEFsaWduPVwiY2VudGVyIGVuZFwiIGNsYXNzPVwiZnVsbC13aWR0aCBkaXYtYmFja2dyb3VuZCBuZXRncmlmLWlucHV0XCI+XG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMTAwXCIgZnhGbGV4Lmd0LXNtPVwiODBcIiBjbGFzcz1cInRhYi1ncm91cCBtYXJnaW4tYm90dG9tLXgyIG1hdC1lbGV2YXRpb24tejRcIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTAwXCIgZnhGbGV4Lmd0LXNtPVwiNTBcIiBjbGFzcz1cInBhZGRpbmcteDJcIiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJmdWxsLWhlaWdodCBib3JkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiIGNsYXNzPVwiY2FyZC10aXRsZSBtYXJnaW4tYm90dG9tLWRlZmF1bHRcIiBtYXRSaXBwbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPnt7ICdwcm9maWxlLnBlcnNvbmFsJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInBhZGRpbmctZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3Byb2ZpbGUubmFtZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGRpc2FibGVkIFt2YWx1ZV09XCJ1c2VyLmZpcnN0TmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmdWxsLXdpZHRoIGZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAncHJvZmlsZS5zdXJuYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZGlzYWJsZWQgW3ZhbHVlXT1cInVzZXIubGFzdE5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RW1haWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGRpc2FibGVkIFt2YWx1ZV09XCJ1c2VyLmVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwMFwiIGZ4RmxleC5ndC1zbT1cIjUwXCIgY2xhc3M9XCJwYWRkaW5nLXgyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiZnVsbC1oZWlnaHQgYm9yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgc3RhcnRcIiBjbGFzcz1cImNhcmQtdGl0bGUgbWFyZ2luLWJvdHRvbS1kZWZhdWx0XCIgbWF0UmlwcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj57eyAncHJvZmlsZS5hdXRob3JpdHknIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicGFkZGluZy1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItY2hpcC1saXN0IGZ1bGwtd2lkdGhcIiAqbmdJZj1cInVzZXIuYXV0aG9yaXRpZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9XCJjaGlwLWxpc3Rib3hcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLW9wdGlvbiBjbGFzcz1cImNoaXAtb3B0aW9uXCIgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGF1dGhvcml0eSBvZiB1c2VyLmF1dGhvcml0aWVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXV0aG9yaXR5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwMFwiIGZ4RmxleC5ndC1zbT1cIjUwXCIgY2xhc3M9XCJwYWRkaW5nLXgyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiZnVsbC1oZWlnaHQgYm9yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgc3RhcnRcIiBjbGFzcz1cImNhcmQtdGl0bGUgbWFyZ2luLWJvdHRvbS1kZWZhdWx0XCIgbWF0UmlwcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj57eyAncHJvZmlsZS5yb2xlcycgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJwYWRkaW5nLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1jaGlwLWxpc3QgZnVsbC13aWR0aFwiICpuZ0lmPVwidXNlci5yb2xlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz1cImNoaXAtbGlzdGJveCBtYXJnaW4tdG9wLWRlZmF1bHRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLW9wdGlvbiBjbGFzcz1cImNoaXAtb3B0aW9uXCIgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvbGUgb2YgdXNlci5yb2xlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvbGUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwMFwiIGZ4RmxleC5ndC1zbT1cIjUwXCIgY2xhc3M9XCJwYWRkaW5nLXgyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiZnVsbC1oZWlnaHQgYm9yZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgc3RhcnRcIiBjbGFzcz1cImNhcmQtdGl0bGUgbWFyZ2luLWJvdHRvbS1kZWZhdWx0XCIgbWF0UmlwcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj57eyAncHJvZmlsZS5ncm91cHMnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicGFkZGluZy1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItY2hpcC1saXN0IGZ1bGwtd2lkdGhcIiAqbmdJZj1cInVzZXIuZ3JvdXBzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPVwiY2hpcC1saXN0Ym94XCIgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1vcHRpb24gY2xhc3M9XCJjaGlwLW9wdGlvblwiIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiB1c2VyLmdyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=