UNPKG

@netgrif/components

Version:

Netgrif Application Engine frontend Angular components

39 lines 45.2 kB
import { Component } from '@angular/core'; import { AbstractUserInviteComponent } from '@netgrif/components-core'; import * as i0 from "@angular/core"; import * as i1 from "@netgrif/components-core"; import * as i2 from "@ngx-translate/core"; import * as i3 from "@angular/common"; import * as i4 from "@ngbracket/ngx-layout"; import * as i5 from "@angular/material/button"; import * as i6 from "@angular/material/divider"; import * as i7 from "@angular/material/expansion"; import * as i8 from "@angular/material/icon"; import * as i9 from "@angular/material/input"; import * as i10 from "@angular/material/form-field"; import * as i11 from "@angular/material/progress-bar"; import * as i12 from "@angular/material/progress-spinner"; import * as i13 from "@angular/material/toolbar"; import * as i14 from "@angular/forms"; export class UserInviteComponent extends AbstractUserInviteComponent { _userInviteService; _orgList; _signUpService; _snackBar; _translate; constructor(_userInviteService, _orgList, _signUpService, _snackBar, _translate) { super(_userInviteService, _orgList, _signUpService, _snackBar, _translate); this._userInviteService = _userInviteService; this._orgList = _orgList; this._signUpService = _signUpService; this._snackBar = _snackBar; this._translate = _translate; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserInviteComponent, deps: [{ token: i1.UserInviteService }, { token: i1.OrganizationListService }, { token: i1.SignUpService }, { token: i1.SnackBarService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserInviteComponent, selector: "nc-user-invite", usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"row\" fxLayout.lt-sm=\"column\" fxLayoutAlign=\"start start\" class=\"full-height full-width padding-default user-invite-container\">\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"40\" class=\"role-height margin-right-16px\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-72 margin-bottom-16px\">\n <span>{{'admin.user-invite.newUser' | translate}}</span>\n <div fxFlex></div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFlex=\"40\" class=\"padding-right-16px netgrif-input netgrif-input-fix netgrif-input-primary-search-fix netgrif-input-primary-fix netgrif-input-search-fix\">\n <mat-icon fxFlex class=\"mail-icon\">email</mat-icon>\n <mat-form-field fxFlex=\"100\" class=\"user-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-label>{{ 'admin.user-invite.mail' | translate }}</mat-label>\n <input matInput [formControl]=\"invitedEmailControl\">\n <button mat-button *ngIf=\"invitedEmailControl.value\" matSuffix mat-icon-button\n (click)=\"invitedEmailControl.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n </mat-toolbar>\n\n\n <div fxLayout=\"column\" class=\"invited-card margin-bottom-16px\" fxLayoutAlign=\"start stretch\">\n\n <span class=\"invited-card-font padding-16px\">{{'admin.user-invite.selectedOrgs' | translate}}</span>\n\n <mat-divider class=\"inherited-divider\"></mat-divider>\n\n <div class=\"padding-16px\" fxLayout=\"column\" *ngIf=\"invitedGroups.length !== 0\">\n <div *ngFor=\"let org of invitedGroups\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <span>{{org.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"removeGroup(org)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n\n <span class=\"padding-16px\"\n *ngIf=\"invitedGroups.length === 0\">{{'admin.user-invite.noSelectedOrgs' | translate}}</span>\n </div>\n\n\n <div fxLayout=\"column\" class=\"invited-card margin-bottom-16px\" fxLayoutAlign=\"start stretch\">\n\n <span class=\"invited-card-font padding-16px\">{{'admin.user-invite.selectedRoles' | translate}}</span>\n\n <mat-divider class=\"inherited-divider\"></mat-divider>\n\n <div class=\"padding-16px\" fxLayout=\"column\" *ngIf=\"invitedRoles.length !== 0\">\n <div *ngFor=\"let role of invitedRoles\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <span>{{role.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"removeRole(role)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n\n <span class=\"padding-16px\"\n *ngIf=\"invitedRoles.length === 0\">{{'admin.user-invite.noSelectedRoles' | translate}}</span>\n </div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n <button mat-raised-button color=\"primary\" (click)=\"invite()\">\n <span>{{'admin.user-invite.invite-user' | translate}}</span>\n </button>\n </div>\n </div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"30\" class=\"role-height margin-right-16px\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-72 margin-bottom-16px\">\n <span>{{'admin.user-invite.orgs' | translate}}</span>\n </mat-toolbar>\n\n <div *ngIf=\"groups.length === 0\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex>\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-user-icon\">groups</mat-icon>\n <span class=\"font-size-20\">{{'admin.user-invite.noGroups' | translate}}</span>\n </div>\n\n <div fxLayout=\"column\" class=\"invited-card \" *ngIf=\"groups.length !== 0\">\n <div fxLayout=\"column\">\n <div *ngFor=\"let group of groups\" fxFlex fxLayout=\"row\"\n fxLayoutAlign=\"start center\">\n <span>{{group.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"addGroup(group)\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"30\" class=\"role-height\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-72 margin-bottom-16px\">\n <span>{{'admin.process-list.listTitle' | translate}}</span>\n\n <div fxFlex=\"5\"></div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"netgrif-input netgrif-input-search-fix\">\n <mat-form-field fxFlex=\"100\" class=\"user-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-icon matPrefix class=\"prefix-icon\">search</mat-icon>\n <mat-label>{{ 'side-menu.import-net.search' | translate }}</mat-label>\n <input matInput [formControl]=\"searchNetControl\">\n <button *ngIf=\"searchNetControl.value\" matSuffix mat-icon-button\n (click)=\"searchNetControl.setValue('')\" color=\"warn\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n </mat-toolbar>\n\n <div *ngIf=\"nets.processes.length === 0\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"margin-top-x2\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-user-icon\">timeline</mat-icon>\n <span class=\"font-size-20\">{{ 'admin.process-list.noProcessesWereFound' | translate}}</span>\n </div>\n\n <mat-accordion class=\"full-width margin-top-default process-list-accordion\" multi fxFlex>\n\n <mat-expansion-panel *ngFor=\"let item of filteredProcesses\" (afterExpand)=\"nets.loadProcessItemRoles(item)\"\n (afterCollapse)=\"nets.prepareToTryAgainToLoadRoles(item)\">\n\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon *ngIf=\"item.someRolesSelected\" color=\"accent\" class=\"margin-right-x2\">tour</mat-icon>\n <span>{{item.initials}} - {{item.title}}</span>\n </mat-panel-title>\n <mat-panel-description class=\"process-item-description\">\n <span\n class=\"process-item-description full-width\">{{'admin.process-list.newestVersion' | translate}}\n : {{item.newestVersion}}</span>\n </mat-panel-description>\n </mat-expansion-panel-header>\n\n <div *ngIf=\"item.loading\" fxFlex=\"100\" class=\"full-width\">\n <mat-progress-bar mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n </div>\n\n <div *ngIf=\"!item.loading && item.emptyRoles\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"full-width full-height net-panel-content\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default\">account_circle</mat-icon>\n <span class=\"font-size-15\">{{ 'admin.process-list.noRoles' | translate}}</span>\n </div>\n\n <div *ngIf=\"!item.loading && !item.emptyRoles\" fxLayout=\"column\" fxLayoutAlign=\"start center\"\n class=\"full-height full-width net-panel-content padding-0-16px\">\n <h3>Roles</h3>\n <div *ngFor=\"let net of item.processes; let first = first\" fxLayout=\"column\"\n fxLayoutAlign=\"start center\" class=\"full-width\">\n <mat-divider *ngIf=\"!first\" style=\"position: relative\"></mat-divider>\n\n <span>{{'admin.user-invite.version' | translate }} - {{net.version}}</span>\n\n <div fxLayout=\"column\" class=\"full-width padding-16px\">\n <div *ngFor=\"let role of net.roles\" fxFlex fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n <span>{{role.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"addRole(role)\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n </mat-expansion-panel>\n\n </mat-accordion>\n\n <div *ngIf=\"nets.loading$ | async\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex=\"100\">\n <mat-spinner color=\"primary\" diameter=\"65\"></mat-spinner>\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}.flex-class{flex:1 1 auto}.min-height-72{min-height:72px}.mail-icon{margin-right:10px}.invited-card{padding:0 16px;width:100%;white-space:nowrap;border:1px solid #eeeeee;background:#fff}.user-assign-search{width:100%;color:#64748b;min-width:250px;border-radius:6px}.invited-card-font,.invited-card-font h1,.invited-card-font h2,.invited-card-font h3,.invited-card-font h4,.invited-card-font h5,.invited-card-font h6{font:500 20px/32px Roboto,sans-serif;letter-spacing:normal;margin:0}.inherited-divider{position:inherit}.padding-16px{padding:16px}.padding-0-16px{padding:0 16px}.padding-16px-0{padding:16px 0}.padding-right-16px{padding-right:16px}.margin-right-16px{margin-right:16px}.margin-bottom-16px{margin-bottom:16px}.font-size-20{font-size:20px}.role-height{height:100%;min-height:100%}@media only screen and (max-width: 599.99px){.role-height{height:33%;min-height:33%;width:100%}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.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: i4.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: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i7.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i7.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserInviteComponent, decorators: [{ type: Component, args: [{ selector: 'nc-user-invite', template: "<div fxLayout=\"row\" fxLayout.lt-sm=\"column\" fxLayoutAlign=\"start start\" class=\"full-height full-width padding-default user-invite-container\">\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"40\" class=\"role-height margin-right-16px\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-72 margin-bottom-16px\">\n <span>{{'admin.user-invite.newUser' | translate}}</span>\n <div fxFlex></div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFlex=\"40\" class=\"padding-right-16px netgrif-input netgrif-input-fix netgrif-input-primary-search-fix netgrif-input-primary-fix netgrif-input-search-fix\">\n <mat-icon fxFlex class=\"mail-icon\">email</mat-icon>\n <mat-form-field fxFlex=\"100\" class=\"user-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-label>{{ 'admin.user-invite.mail' | translate }}</mat-label>\n <input matInput [formControl]=\"invitedEmailControl\">\n <button mat-button *ngIf=\"invitedEmailControl.value\" matSuffix mat-icon-button\n (click)=\"invitedEmailControl.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n </mat-toolbar>\n\n\n <div fxLayout=\"column\" class=\"invited-card margin-bottom-16px\" fxLayoutAlign=\"start stretch\">\n\n <span class=\"invited-card-font padding-16px\">{{'admin.user-invite.selectedOrgs' | translate}}</span>\n\n <mat-divider class=\"inherited-divider\"></mat-divider>\n\n <div class=\"padding-16px\" fxLayout=\"column\" *ngIf=\"invitedGroups.length !== 0\">\n <div *ngFor=\"let org of invitedGroups\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <span>{{org.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"removeGroup(org)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n\n <span class=\"padding-16px\"\n *ngIf=\"invitedGroups.length === 0\">{{'admin.user-invite.noSelectedOrgs' | translate}}</span>\n </div>\n\n\n <div fxLayout=\"column\" class=\"invited-card margin-bottom-16px\" fxLayoutAlign=\"start stretch\">\n\n <span class=\"invited-card-font padding-16px\">{{'admin.user-invite.selectedRoles' | translate}}</span>\n\n <mat-divider class=\"inherited-divider\"></mat-divider>\n\n <div class=\"padding-16px\" fxLayout=\"column\" *ngIf=\"invitedRoles.length !== 0\">\n <div *ngFor=\"let role of invitedRoles\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <span>{{role.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"removeRole(role)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n\n <span class=\"padding-16px\"\n *ngIf=\"invitedRoles.length === 0\">{{'admin.user-invite.noSelectedRoles' | translate}}</span>\n </div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n <button mat-raised-button color=\"primary\" (click)=\"invite()\">\n <span>{{'admin.user-invite.invite-user' | translate}}</span>\n </button>\n </div>\n </div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"30\" class=\"role-height margin-right-16px\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-72 margin-bottom-16px\">\n <span>{{'admin.user-invite.orgs' | translate}}</span>\n </mat-toolbar>\n\n <div *ngIf=\"groups.length === 0\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex>\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-user-icon\">groups</mat-icon>\n <span class=\"font-size-20\">{{'admin.user-invite.noGroups' | translate}}</span>\n </div>\n\n <div fxLayout=\"column\" class=\"invited-card \" *ngIf=\"groups.length !== 0\">\n <div fxLayout=\"column\">\n <div *ngFor=\"let group of groups\" fxFlex fxLayout=\"row\"\n fxLayoutAlign=\"start center\">\n <span>{{group.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"addGroup(group)\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"30\" class=\"role-height\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-72 margin-bottom-16px\">\n <span>{{'admin.process-list.listTitle' | translate}}</span>\n\n <div fxFlex=\"5\"></div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"netgrif-input netgrif-input-search-fix\">\n <mat-form-field fxFlex=\"100\" class=\"user-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-icon matPrefix class=\"prefix-icon\">search</mat-icon>\n <mat-label>{{ 'side-menu.import-net.search' | translate }}</mat-label>\n <input matInput [formControl]=\"searchNetControl\">\n <button *ngIf=\"searchNetControl.value\" matSuffix mat-icon-button\n (click)=\"searchNetControl.setValue('')\" color=\"warn\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n </mat-toolbar>\n\n <div *ngIf=\"nets.processes.length === 0\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"margin-top-x2\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-user-icon\">timeline</mat-icon>\n <span class=\"font-size-20\">{{ 'admin.process-list.noProcessesWereFound' | translate}}</span>\n </div>\n\n <mat-accordion class=\"full-width margin-top-default process-list-accordion\" multi fxFlex>\n\n <mat-expansion-panel *ngFor=\"let item of filteredProcesses\" (afterExpand)=\"nets.loadProcessItemRoles(item)\"\n (afterCollapse)=\"nets.prepareToTryAgainToLoadRoles(item)\">\n\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon *ngIf=\"item.someRolesSelected\" color=\"accent\" class=\"margin-right-x2\">tour</mat-icon>\n <span>{{item.initials}} - {{item.title}}</span>\n </mat-panel-title>\n <mat-panel-description class=\"process-item-description\">\n <span\n class=\"process-item-description full-width\">{{'admin.process-list.newestVersion' | translate}}\n : {{item.newestVersion}}</span>\n </mat-panel-description>\n </mat-expansion-panel-header>\n\n <div *ngIf=\"item.loading\" fxFlex=\"100\" class=\"full-width\">\n <mat-progress-bar mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n </div>\n\n <div *ngIf=\"!item.loading && item.emptyRoles\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"full-width full-height net-panel-content\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default\">account_circle</mat-icon>\n <span class=\"font-size-15\">{{ 'admin.process-list.noRoles' | translate}}</span>\n </div>\n\n <div *ngIf=\"!item.loading && !item.emptyRoles\" fxLayout=\"column\" fxLayoutAlign=\"start center\"\n class=\"full-height full-width net-panel-content padding-0-16px\">\n <h3>Roles</h3>\n <div *ngFor=\"let net of item.processes; let first = first\" fxLayout=\"column\"\n fxLayoutAlign=\"start center\" class=\"full-width\">\n <mat-divider *ngIf=\"!first\" style=\"position: relative\"></mat-divider>\n\n <span>{{'admin.user-invite.version' | translate }} - {{net.version}}</span>\n\n <div fxLayout=\"column\" class=\"full-width padding-16px\">\n <div *ngFor=\"let role of net.roles\" fxFlex fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n <span>{{role.name}}</span>\n\n <div fxFlex></div>\n\n <button mat-icon-button color=\"primary\" (click)=\"addRole(role)\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n </mat-expansion-panel>\n\n </mat-accordion>\n\n <div *ngIf=\"nets.loading$ | async\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex=\"100\">\n <mat-spinner color=\"primary\" diameter=\"65\"></mat-spinner>\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}.flex-class{flex:1 1 auto}.min-height-72{min-height:72px}.mail-icon{margin-right:10px}.invited-card{padding:0 16px;width:100%;white-space:nowrap;border:1px solid #eeeeee;background:#fff}.user-assign-search{width:100%;color:#64748b;min-width:250px;border-radius:6px}.invited-card-font,.invited-card-font h1,.invited-card-font h2,.invited-card-font h3,.invited-card-font h4,.invited-card-font h5,.invited-card-font h6{font:500 20px/32px Roboto,sans-serif;letter-spacing:normal;margin:0}.inherited-divider{position:inherit}.padding-16px{padding:16px}.padding-0-16px{padding:0 16px}.padding-16px-0{padding:16px 0}.padding-right-16px{padding-right:16px}.margin-right-16px{margin-right:16px}.margin-bottom-16px{margin-bottom:16px}.font-size-20{font-size:20px}.role-height{height:100%;min-height:100%}@media only screen and (max-width: 599.99px){.role-height{height:33%;min-height:33%;width:100%}}\n"] }] }], ctorParameters: () => [{ type: i1.UserInviteService }, { type: i1.OrganizationListService }, { type: i1.SignUpService }, { type: i1.SnackBarService }, { type: i2.TranslateService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbnZpdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvYWRtaW4vdXNlci1pbnZpdGUvdXNlci1pbnZpdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvYWRtaW4vdXNlci1pbnZpdGUvdXNlci1pbnZpdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQ0gsMkJBQTJCLEVBSzlCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRbEMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLDJCQUEyQjtJQUUxQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBSnRCLFlBQXNCLGtCQUFxQyxFQUNyQyxRQUFpQyxFQUNqQyxjQUE2QixFQUM3QixTQUEwQixFQUMxQixVQUE0QjtRQUM5QyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFMekQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtJQUVsRCxDQUFDO3dHQVJRLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDZFQ2ZoQyxtNlNBeUxBOzs0RkQxS2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RVc2VySW52aXRlQ29tcG9uZW50LFxuICAgIE9yZ2FuaXphdGlvbkxpc3RTZXJ2aWNlLFxuICAgIFNpZ25VcFNlcnZpY2UsXG4gICAgU25hY2tCYXJTZXJ2aWNlLFxuICAgIFVzZXJJbnZpdGVTZXJ2aWNlXG59IGZyb20gJ0BuZXRncmlmL2NvbXBvbmVudHMtY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jLXVzZXItaW52aXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci1pbnZpdGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VzZXItaW52aXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVXNlckludml0ZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0VXNlckludml0ZUNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3VzZXJJbnZpdGVTZXJ2aWNlOiBVc2VySW52aXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX29yZ0xpc3Q6IE9yZ2FuaXphdGlvbkxpc3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc2lnblVwU2VydmljZTogU2lnblVwU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoX3VzZXJJbnZpdGVTZXJ2aWNlLCBfb3JnTGlzdCwgX3NpZ25VcFNlcnZpY2UsIF9zbmFja0JhciwgX3RyYW5zbGF0ZSk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXQubHQtc209XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RhcnRcIiBjbGFzcz1cImZ1bGwtaGVpZ2h0IGZ1bGwtd2lkdGggcGFkZGluZy1kZWZhdWx0IHVzZXItaW52aXRlLWNvbnRhaW5lclwiPlxuXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZsZXg9XCI0MFwiIGNsYXNzPVwicm9sZS1oZWlnaHQgbWFyZ2luLXJpZ2h0LTE2cHhcIj5cblxuICAgICAgICA8bWF0LXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtaW4taGVpZ2h0LTcyIG1hcmdpbi1ib3R0b20tMTZweFwiPlxuICAgICAgICAgICAgPHNwYW4+e3snYWRtaW4udXNlci1pbnZpdGUubmV3VXNlcicgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZsZXg9XCI0MFwiICBjbGFzcz1cInBhZGRpbmctcmlnaHQtMTZweCBuZXRncmlmLWlucHV0IG5ldGdyaWYtaW5wdXQtZml4IG5ldGdyaWYtaW5wdXQtcHJpbWFyeS1zZWFyY2gtZml4IG5ldGdyaWYtaW5wdXQtcHJpbWFyeS1maXggbmV0Z3JpZi1pbnB1dC1zZWFyY2gtZml4XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4RmxleCBjbGFzcz1cIm1haWwtaWNvblwiPmVtYWlsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwXCIgY2xhc3M9XCJ1c2VyLWFzc2lnbi1zZWFyY2hcIiBjb2xvcj1cInByaW1hcnlcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdhZG1pbi51c2VyLWludml0ZS5tYWlsJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImludml0ZWRFbWFpbENvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiaW52aXRlZEVtYWlsQ29udHJvbC52YWx1ZVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW52aXRlZEVtYWlsQ29udHJvbC5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cblxuXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImludml0ZWQtY2FyZCBtYXJnaW4tYm90dG9tLTE2cHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxuXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludml0ZWQtY2FyZC1mb250IHBhZGRpbmctMTZweFwiPnt7J2FkbWluLnVzZXItaW52aXRlLnNlbGVjdGVkT3JncycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiaW5oZXJpdGVkLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGluZy0xNnB4XCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiAqbmdJZj1cImludml0ZWRHcm91cHMubGVuZ3RoICE9PSAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3JnIG9mIGludml0ZWRHcm91cHNcIiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7b3JnLm5hbWV9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwicmVtb3ZlR3JvdXAob3JnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWRkaW5nLTE2cHhcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbnZpdGVkR3JvdXBzLmxlbmd0aCA9PT0gMFwiPnt7J2FkbWluLnVzZXItaW52aXRlLm5vU2VsZWN0ZWRPcmdzJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImludml0ZWQtY2FyZCBtYXJnaW4tYm90dG9tLTE2cHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxuXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludml0ZWQtY2FyZC1mb250IHBhZGRpbmctMTZweFwiPnt7J2FkbWluLnVzZXItaW52aXRlLnNlbGVjdGVkUm9sZXMnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cImluaGVyaXRlZC1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZGRpbmctMTZweFwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCJpbnZpdGVkUm9sZXMubGVuZ3RoICE9PSAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm9sZSBvZiBpbnZpdGVkUm9sZXNcIiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7cm9sZS5uYW1lfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInJlbW92ZVJvbGUocm9sZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFkZGluZy0xNnB4XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW52aXRlZFJvbGVzLmxlbmd0aCA9PT0gMFwiPnt7J2FkbWluLnVzZXItaW52aXRlLm5vU2VsZWN0ZWRSb2xlcycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJpbnZpdGUoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7J2FkbWluLnVzZXItaW52aXRlLmludml0ZS11c2VyJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZsZXg9XCIzMFwiIGNsYXNzPVwicm9sZS1oZWlnaHQgbWFyZ2luLXJpZ2h0LTE2cHhcIj5cblxuICAgICAgICA8bWF0LXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtaW4taGVpZ2h0LTcyIG1hcmdpbi1ib3R0b20tMTZweFwiPlxuICAgICAgICAgICAgPHNwYW4+e3snYWRtaW4udXNlci1pbnZpdGUub3JncycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aCA9PT0gMFwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cIm1hcmdpbi1ib3R0b20tZGVmYXVsdCBuby11c2VyLWljb25cIj5ncm91cHM8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNpemUtMjBcIj57eydhZG1pbi51c2VyLWludml0ZS5ub0dyb3VwcycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiaW52aXRlZC1jYXJkIFwiICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiIGZ4RmxleCBmeExheW91dD1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Z3JvdXAubmFtZX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJhZGRHcm91cChncm91cClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGbGV4PVwiMzBcIiBjbGFzcz1cInJvbGUtaGVpZ2h0XCI+XG5cbiAgICAgICAgPG1hdC10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwibWluLWhlaWdodC03MiBtYXJnaW4tYm90dG9tLTE2cHhcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7J2FkbWluLnByb2Nlc3MtbGlzdC5saXN0VGl0bGUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiNVwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwibmV0Z3JpZi1pbnB1dCBuZXRncmlmLWlucHV0LXNlYXJjaC1maXhcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwXCIgY2xhc3M9XCJ1c2VyLWFzc2lnbi1zZWFyY2hcIiBjb2xvcj1cInByaW1hcnlcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4IGNsYXNzPVwicHJlZml4LWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzaWRlLW1lbnUuaW1wb3J0LW5ldC5zZWFyY2gnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoTmV0Q29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoTmV0Q29udHJvbC52YWx1ZVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoTmV0Q29udHJvbC5zZXRWYWx1ZSgnJylcIiBjb2xvcj1cIndhcm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibmV0cy5wcm9jZXNzZXMubGVuZ3RoID09PSAwXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIlxuICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhGbGV4IGNsYXNzPVwibWFyZ2luLXRvcC14MlwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJtYXJnaW4tYm90dG9tLWRlZmF1bHQgbm8tdXNlci1pY29uXCI+dGltZWxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNpemUtMjBcIj57eyAnYWRtaW4ucHJvY2Vzcy1saXN0Lm5vUHJvY2Vzc2VzV2VyZUZvdW5kJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LWFjY29yZGlvbiBjbGFzcz1cImZ1bGwtd2lkdGggbWFyZ2luLXRvcC1kZWZhdWx0IHByb2Nlc3MtbGlzdC1hY2NvcmRpb25cIiBtdWx0aSBmeEZsZXg+XG5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkUHJvY2Vzc2VzXCIgKGFmdGVyRXhwYW5kKT1cIm5ldHMubG9hZFByb2Nlc3NJdGVtUm9sZXMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFmdGVyQ29sbGFwc2UpPVwibmV0cy5wcmVwYXJlVG9UcnlBZ2FpblRvTG9hZFJvbGVzKGl0ZW0pXCI+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpdGVtLnNvbWVSb2xlc1NlbGVjdGVkXCIgY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cIm1hcmdpbi1yaWdodC14MlwiPnRvdXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpdGVtLmluaXRpYWxzfX0gLSB7e2l0ZW0udGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24gY2xhc3M9XCJwcm9jZXNzLWl0ZW0tZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9jZXNzLWl0ZW0tZGVzY3JpcHRpb24gZnVsbC13aWR0aFwiPnt7J2FkbWluLnByb2Nlc3MtbGlzdC5uZXdlc3RWZXJzaW9uJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7e2l0ZW0ubmV3ZXN0VmVyc2lvbn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0ubG9hZGluZ1wiIGZ4RmxleD1cIjEwMFwiIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5sb2FkaW5nICYmIGl0ZW0uZW1wdHlSb2xlc1wiIGZ4TGF5b3V0PVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhGbGV4IGNsYXNzPVwiZnVsbC13aWR0aCBmdWxsLWhlaWdodCBuZXQtcGFuZWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cIm1hcmdpbi1ib3R0b20tZGVmYXVsdFwiPmFjY291bnRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNpemUtMTVcIj57eyAnYWRtaW4ucHJvY2Vzcy1saXN0Lm5vUm9sZXMnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWl0ZW0ubG9hZGluZyAmJiAhaXRlbS5lbXB0eVJvbGVzXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnVsbC1oZWlnaHQgZnVsbC13aWR0aCBuZXQtcGFuZWwtY29udGVudCBwYWRkaW5nLTAtMTZweFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDM+Um9sZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBuZXQgb2YgaXRlbS5wcm9jZXNzZXM7IGxldCBmaXJzdCA9IGZpcnN0XCIgZnhMYXlvdXQ9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cIiFmaXJzdFwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+PC9tYXQtZGl2aWRlcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3snYWRtaW4udXNlci1pbnZpdGUudmVyc2lvbicgfCB0cmFuc2xhdGUgfX0gLSB7e25ldC52ZXJzaW9ufX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImZ1bGwtd2lkdGggcGFkZGluZy0xNnB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm9sZSBvZiBuZXQucm9sZXNcIiBmeEZsZXggZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tyb2xlLm5hbWV9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYWRkUm9sZShyb2xlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJuZXRzLmxvYWRpbmckIHwgYXN5bmNcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhGbGV4PVwiMTAwXCI+XG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJwcmltYXJ5XCIgZGlhbWV0ZXI9XCI2NVwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=