@abp/ng.permission-management 8.0.2 → 8.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -257,12 +257,12 @@ export class PermissionManagementComponent {
257
257
  return currentUser.id === this.providerKey;
258
258
  return false;
259
259
  }
260
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component }); }
261
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: PermissionManagementComponent, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\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: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
260
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component }); }
261
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PermissionManagementComponent, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\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: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
262
262
  }
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementComponent, decorators: [{
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementComponent, decorators: [{
264
264
  type: Component,
265
- args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\n"] }]
265
+ args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\n"] }]
266
266
  }], ctorParameters: () => [{ type: i1.PermissionsService }, { type: i2.ConfigStateService }], propDecorators: { providerName: [{
267
267
  type: Input
268
268
  }], providerKey: [{
@@ -296,4 +296,4 @@ function getPermissions(groups) {
296
296
  ...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),
297
297
  ], []);
298
298
  }
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUE0QmhFLE1BQU0sT0FBTyw2QkFBNkI7SUFrQnhDLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBYztRQUN4QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFcEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElB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QUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0tBQzlEO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQTRCO0lBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNaLEdBQUcsR0FBRztRQUNOLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDNUYsRUFDRCxFQUErQixDQUNoQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgQ3VycmVudFVzZXJEdG8gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7IExvY2FsZURpcmVjdGlvbiB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6YXV0bztcclxuICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTVyZW0pXHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50SW5wdXRzLFxyXG4gIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50T3V0cHV0cyB7XHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlck5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJLZXkhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgaGlkZUJhZGdlcyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBlbnRpdHlEaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl92aXNpYmxlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3Blbk1vZGFsKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgICAgICBjb25jYXQodGhpcy5zZWxlY3RBbGxJbkFsbFRhYnNSZWYuY2hhbmdlcywgdGhpcy5zZWxlY3RBbGxJblRoaXNUYWJzUmVmLmNoYW5nZXMpXHJcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdE1vZGFsKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAobnVsbCk7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluVGhpc1RhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluVGhpc1RhYnNSZWYhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5BbGxUYWJzUmVmJylcclxuICBzZWxlY3RBbGxJbkFsbFRhYnNSZWYhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XHJcblxyXG4gIGRhdGE6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvID0geyBncm91cHM6IFtdLCBlbnRpdHlEaXNwbGF5TmFtZTogJycgfTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cD86IFBlcm1pc3Npb25Hcm91cER0byB8IG51bGw7XHJcblxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdID0gW107XHJcblxyXG4gIHNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcblxyXG4gIGRpc2FibGVTZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnMgPSBmYWxzZTtcclxuXHJcbiAgbW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gIHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9uczogUGVybWlzc2lvbldpdGhTdHlsZVtdID0gW107XHJcblxyXG4gIHRyYWNrQnlGbjogVHJhY2tCeUZ1bmN0aW9uPFBlcm1pc3Npb25Hcm91cER0bz4gPSAoXywgaXRlbSkgPT4gaXRlbS5uYW1lO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLCBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSkgeyB9XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hcmdpbiA9IGBtYXJnaW4tJHsoZG9jdW1lbnQuYm9keS5kaXIgYXMgTG9jYWxlRGlyZWN0aW9uKSA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnXHJcbiAgICAgIH0ucHhgO1xyXG5cclxuICAgIGNvbnN0IHBlcm1pc3Npb25zID1cclxuICAgICAgKHRoaXMuZGF0YS5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5uYW1lID09PSB0aGlzLnNlbGVjdGVkR3JvdXA/Lm5hbWUpIHx8IHt9KS5wZXJtaXNzaW9ucyB8fFxyXG4gICAgICBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gcGVybWlzc2lvbnMubWFwKFxyXG4gICAgICBwZXJtaXNzaW9uID0+XHJcbiAgICAgICh7XHJcbiAgICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgICBzdHlsZTogeyBbbWFyZ2luXTogZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGVybWlzc2lvbikgfSxcclxuICAgICAgICBpc0dyYW50ZWQ6ICh0aGlzLnBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpIHx8IHt9KS5pc0dyYW50ZWQsXHJcbiAgICAgIH0gYXMgdW5rbm93biBhcyBQZXJtaXNzaW9uV2l0aFN0eWxlKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZChwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdKSB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IHBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAgIHBlcm1pc3Npb24uaXNHcmFudGVkICYmXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnM/LmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzOiBQcm92aWRlckluZm9EdG9bXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyYW50ZWRQcm92aWRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBncmFudGVkUHJvdmlkZXJzLmZpbmRJbmRleChwID0+IHAucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDaGVja2JveChjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgaWYgKFxyXG4gICAgICBjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGNsaWNrZWRQZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpXHJcbiAgICApXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICAgIGlmIChjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXIubmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6ICFwZXIuaXNHcmFudGVkIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXIucGFyZW50TmFtZSAmJiBjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSA9PT0gcGVyLm5hbWUgJiYgIWNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0UGFyZW50Q2xpY2tlZChjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBsZXQgY2hpbGRQZXJtaXNzaW9uR3JhbnRlZENvdW50ID0gMDtcclxuICAgIGxldCBwYXJlbnRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvO1xyXG5cclxuICAgIGlmIChjbGlja2VkUGVybWlzc2lvbnMucGFyZW50TmFtZSkge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2gocGVyID0+IHtcclxuICAgICAgICBpZiAocGVyLm5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9ucy5wYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICBwYXJlbnRQZXJtaXNzaW9uID0gcGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKHBlciA9PiB7XHJcbiAgICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb24ubmFtZSA9PT0gcGVyLnBhcmVudE5hbWUpIHtcclxuICAgICAgICAgIHBlci5pc0dyYW50ZWQgJiYgY2hpbGRQZXJtaXNzaW9uR3JhbnRlZENvdW50Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoY2hpbGRQZXJtaXNzaW9uR3JhbnRlZENvdW50ID09PSAxICYmICFwYXJlbnRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICAgICAgaWYgKHBlci5uYW1lID09PSBwYXJlbnRQZXJtaXNzaW9uLm5hbWUpIHtcclxuICAgICAgICAgICAgcGVyLmlzR3JhbnRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcGVyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGlmIChwZXIucGFyZW50TmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLm5hbWUpIHtcclxuICAgICAgICBwZXIuaXNHcmFudGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMoY2xpY2tlZFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICBpZiAocGVyLm5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9ucy5uYW1lKSB7XHJcbiAgICAgICAgcGVyLmlzR3JhbnRlZCA9ICFwZXIuaXNHcmFudGVkXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZUdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+XHJcbiAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgPT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFBlcm1pc3Npb25zID0gc2VsZWN0YWJsZUdyb3VwUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi10aGlzLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlR3JvdXBQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRHcmFudENoZWNrYm94U3RhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWxsUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLWFsbC10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0VGhpc1RhYigpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgIGlmIChwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGVybWlzc2lvbnMuZmluZEluZGV4KHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKTtcclxuXHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZSgwLCBpbmRleCksXHJcbiAgICAgICAgeyAuLi50aGlzLnBlcm1pc3Npb25zW2luZGV4XSwgaXNHcmFudGVkOiAhdGhpcy5zZWxlY3RUaGlzVGFiIH0sXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZShpbmRleCArIDEpLFxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xyXG4gICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICBpc0dyYW50ZWQ6XHJcbiAgICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykgfHwgIXRoaXMuc2VsZWN0QWxsVGFiLFxyXG4gICAgfSkpO1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gIXRoaXMuc2VsZWN0QWxsVGFiO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2VHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cChncm91cDogUGVybWlzc2lvbkdyb3VwRHRvKSB7XHJcbiAgICB0aGlzLnNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cCk7XHJcbiAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IHVuY2hhbmdlZFBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnModGhpcy5kYXRhLmdyb3Vwcyk7XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZFBlcm1pc3Npb25zOiBVcGRhdGVQZXJtaXNzaW9uRHRvW10gPSB0aGlzLnBlcm1pc3Npb25zXHJcbiAgICAgIC5maWx0ZXIocGVyID0+XHJcbiAgICAgICAgKHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkgfHwge30pLmlzR3JhbnRlZCA9PT1cclxuICAgICAgICAgIHBlci5pc0dyYW50ZWRcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogdHJ1ZSxcclxuICAgICAgKVxyXG4gICAgICAubWFwKCh7IG5hbWUsIGlzR3JhbnRlZCB9KSA9PiAoeyBuYW1lLCBpc0dyYW50ZWQgfSkpO1xyXG5cclxuICAgIGlmICghY2hhbmdlZFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubW9kYWxCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5LCB7IHBlcm1pc3Npb25zOiBjaGFuZ2VkUGVybWlzc2lvbnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLnNob3VsZEZldGNoQXBwQ29uZmlnKCkgPyB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpIDogb2YobnVsbCksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMocGVybWlzc2lvblJlcy5ncm91cHMpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChwZXJtaXNzaW9uUmVzLmdyb3Vwc1swXSk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IHRoaXMucGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgICBwZXIgPT5cclxuICAgICAgICAgICAgcGVyLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwcm92aWRlciA9PiBwcm92aWRlci5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQodGhpcy5zZWxlY3RlZEdyb3VwPy5wZXJtaXNzaW9ucyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hcmdpbihcclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLFxyXG4gIHBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbik6IG51bWJlciB7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG5cclxuICBpZiAocGFyZW50UGVybWlzc2lvbiAmJiBwYXJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGxldCBtYXJnaW4gPSAyMDtcclxuICAgIHJldHVybiAobWFyZ2luICs9IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBhcmVudFBlcm1pc3Npb24pKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9uID8gMjAgOiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhncm91cHM6IFBlcm1pc3Npb25Hcm91cER0b1tdKTogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSB7XHJcbiAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAoYWNjLCB2YWwpID0+IFtcclxuICAgICAgLi4uYWNjLFxyXG4gICAgICAuLi52YWwucGVybWlzc2lvbnMubWFwPFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lPihwID0+ICh7IC4uLnAsIGdyb3VwTmFtZTogdmFsLm5hbWUgfHwgJycgfSkpLFxyXG4gICAgXSxcclxuICAgIFtdIGFzIFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10sXHJcbiAgKTtcclxufVxyXG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtidXN5XT1cIm1vZGFsQnVzeVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJyAsc2Nyb2xsYWJsZTpmYWxzZSB9XCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEuZW50aXR5RGlzcGxheU5hbWUgfHwgZW50aXR5RGlzcGxheU5hbWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgICA8aDQ+XHJcbiAgICAgICAge3sgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpQZXJtaXNzaW9ucycgfCBhYnBMb2NhbGl6YXRpb24gfX0gLVxyXG4gICAgICAgIHt7IGVudGl0eURpc3BsYXlOYW1lIHx8IGRhdGEuZW50aXR5RGlzcGxheU5hbWUgfX1cclxuICAgICAgPC9oND5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICNzZWxlY3RBbGxJbkFsbFRhYnNSZWZcclxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxUYWJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VsZWN0QWxsKClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFic1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCI+e3tcclxuICAgICAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluQWxsVGFicycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGhyIGNsYXNzPVwibXQtMiBtYi0yXCIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtcGlsbHMgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGRhdGEuZ3JvdXBzOyB0cmFja0J5OiB0cmFja0J5Rm5cIiBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInsgYXNzaWduZWRDb3VudDogZ2V0QXNzaWduZWRDb3VudChncm91cC5uYW1lKSB9IGFzIGNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEdyb3VwPy5uYW1lID09PSBncm91cD8ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoYW5nZUdyb3VwKGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3QpPVwic2V0RGlzYWJsZWQoZ3JvdXAucGVybWlzc2lvbnMpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuZm9udC13ZWlnaHQtYm9sZF09XCJjb3VudC5hc3NpZ25lZENvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXA/LmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb3VudC5hc3NpZ25lZENvdW50ID4gMFwiPih7eyBjb3VudC5hc3NpZ25lZENvdW50IH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IHNjcm9sbC1pbi1tb2RhbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI3NlbGVjdEFsbEluVGhpc1RhYnNSZWZcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RUaGlzVGFiXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VsZWN0VGhpc1RhYigpXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluVGhpc1RhYicgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwZXJtaXNzaW9uIG9mIHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9uczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJwZXJtaXNzaW9uLnN0eWxlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICNwZXJtaXNzaW9uQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRDaGVja2VkKHBlcm1pc3Npb24ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDaGVja2JveChwZXJtaXNzaW9uLCBwZXJtaXNzaW9uQ2hlY2tib3gudmFsdWUpXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbYXR0ci5mb3JdPVwicGVybWlzc2lvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgID57eyBwZXJtaXNzaW9uLmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVCYWRnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHByb3ZpZGVyLnByb3ZpZGVyTmFtZSB9fToge3sgcHJvdmlkZXIucHJvdmlkZXJLZXkgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT5cclxuICAgICAgICB7eyAnQWJwSWRlbnRpdHk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCI+e3tcclxuICAgICAgICAnQWJwSWRlbnRpdHk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgIH19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUE0QmhFLE1BQU0sT0FBTyw2QkFBNkI7SUFrQnhDLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBYztRQUN4QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFcEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFD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QkFHdEMscUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLHVCQUF1Qjs7QUErUnZDLFNBQVMsVUFBVSxDQUNqQixXQUFxQyxFQUNyQyxVQUFrQztJQUVsQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyRixJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBNEI7SUFDbEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1osR0FBRyxHQUFHO1FBQ04sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM1RixFQUNELEVBQStCLENBQ2hDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU3RhdGVTZXJ2aWNlLCBDdXJyZW50VXNlckR0byB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8sXHJcbiAgUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuICBQZXJtaXNzaW9uR3JvdXBEdG8sXHJcbiAgUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gIFByb3ZpZGVySW5mb0R0byxcclxuICBVcGRhdGVQZXJtaXNzaW9uRHRvLFxyXG59IGZyb20gJ0BhYnAvbmcucGVybWlzc2lvbi1tYW5hZ2VtZW50L3Byb3h5JztcclxuaW1wb3J0IHsgTG9jYWxlRGlyZWN0aW9uIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFRyYWNrQnlGdW5jdGlvbixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbmNhdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTWFuYWdlbWVudCB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLW1hbmFnZW1lbnQnO1xyXG5cclxudHlwZSBQZXJtaXNzaW9uV2l0aFN0eWxlID0gUGVybWlzc2lvbkdyYW50SW5mb0R0byAmIHtcclxuICBzdHlsZTogc3RyaW5nO1xyXG59O1xyXG5cclxudHlwZSBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1wZXJtaXNzaW9uLW1hbmFnZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9uLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnYWJwUGVybWlzc2lvbk1hbmFnZW1lbnQnLFxyXG4gIHN0eWxlczogW1xyXG4gICAgYFxyXG4gICAgICAub3ZlcmZsb3ctc2Nyb2xsIHtcclxuICAgICAgICBtYXgtaGVpZ2h0OiA3MHZoO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcclxuICAgICAgfVxyXG4gICAgICAuc2Nyb2xsLWluLW1vZGFsIHtcclxuICAgICAgICBvdmVyZmxvdzphdXRvO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxNXJlbSlcclxuICAgICAgfVxyXG4gICAgYCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXHJcbiAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRPdXRwdXRzIHtcclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlcktleSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBoaWRlQmFkZ2VzID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVudGl0eURpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Zpc2libGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChudWxsKTtcclxuICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5UaGlzVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5UaGlzVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuXHJcbiAgZGF0YTogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8gPSB7IGdyb3VwczogW10sIGVudGl0eURpc3BsYXlOYW1lOiAnJyB9O1xyXG5cclxuICBzZWxlY3RlZEdyb3VwPzogUGVybWlzc2lvbkdyb3VwRHRvIHwgbnVsbDtcclxuXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IGZhbHNlO1xyXG5cclxuICBtb2RhbEJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aFN0eWxlW10gPSBbXTtcclxuXHJcbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248UGVybWlzc2lvbkdyb3VwRHRvPiA9IChfLCBpdGVtKSA9PiBpdGVtLm5hbWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsIHByb3RlY3RlZCBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgZ2V0Q2hlY2tlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gbmFtZSkgfHwgeyBpc0dyYW50ZWQ6IGZhbHNlIH0pLmlzR3JhbnRlZDtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkR3JvdXAoZ3JvdXA6IFBlcm1pc3Npb25Hcm91cER0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0keyhkb2N1bWVudC5ib2R5LmRpciBhcyBMb2NhbGVEaXJlY3Rpb24pID09PSAncnRsJyA/ICdyaWdodCcgOiAnbGVmdCdcclxuICAgICAgfS5weGA7XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPVxyXG4gICAgICAodGhpcy5kYXRhLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8ubmFtZSkgfHwge30pLnBlcm1pc3Npb25zIHx8XHJcbiAgICAgIFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucy5tYXAoXHJcbiAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgKHtcclxuICAgICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICAgIHN0eWxlOiB7IFttYXJnaW5dOiBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uKSB9LFxyXG4gICAgICAgIGlzR3JhbnRlZDogKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ubmFtZSkgfHwge30pLmlzR3JhbnRlZCxcclxuICAgICAgfSBhcyB1bmtub3duIGFzIFBlcm1pc3Npb25XaXRoU3R5bGUpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10pIHtcclxuICAgIGlmIChwZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gcGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICAgcGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgICAgIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycz8uZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGdyYW50ZWRQcm92aWRlcnM6IFByb3ZpZGVySW5mb0R0b1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ3JhbnRlZFByb3ZpZGVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGdyYW50ZWRQcm92aWRlcnMuZmluZEluZGV4KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NoZWNrYm94KGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCAmJlxyXG4gICAgICB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoY2xpY2tlZFBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcclxuICAgIClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgaWYgKGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgPT09IHBlci5uYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogIXBlci5pc0dyYW50ZWQgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgPT09IHBlci5wYXJlbnROYW1lICYmIGNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lID09PSBwZXIubmFtZSAmJiAhY2xpY2tlZFBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGVyO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFyZW50Q2xpY2tlZChjbGlja2VkUGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIGxldCBjaGlsZFBlcm1pc3Npb25HcmFudGVkQ291bnQgPSAwO1xyXG4gICAgbGV0IHBhcmVudFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG87XHJcblxyXG4gICAgaWYgKGNsaWNrZWRQZXJtaXNzaW9ucy5wYXJlbnROYW1lKSB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuZm9yRWFjaChwZXIgPT4ge1xyXG4gICAgICAgIGlmIChwZXIubmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLnBhcmVudE5hbWUpIHtcclxuICAgICAgICAgIHBhcmVudFBlcm1pc3Npb24gPSBwZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2gocGVyID0+IHtcclxuICAgICAgICBpZiAocGFyZW50UGVybWlzc2lvbi5uYW1lID09PSBwZXIucGFyZW50TmFtZSkge1xyXG4gICAgICAgICAgcGVyLmlzR3JhbnRlZCAmJiBjaGlsZFBlcm1pc3Npb25HcmFudGVkQ291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChjaGlsZFBlcm1pc3Npb25HcmFudGVkQ291bnQgPT09IDEgJiYgIXBhcmVudFBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgICBpZiAocGVyLm5hbWUgPT09IHBhcmVudFBlcm1pc3Npb24ubmFtZSkge1xyXG4gICAgICAgICAgICBwZXIuaXNHcmFudGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBwZXI7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgaWYgKHBlci5wYXJlbnROYW1lID09PSBjbGlja2VkUGVybWlzc2lvbnMubmFtZSkge1xyXG4gICAgICAgIHBlci5pc0dyYW50ZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGVyO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyhjbGlja2VkUGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGlmIChwZXIubmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLm5hbWUpIHtcclxuICAgICAgICBwZXIuaXNHcmFudGVkID0gIXBlci5pc0dyYW50ZWRcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGVyO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNldFRhYkNoZWNrYm94U3RhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlR3JvdXBQZXJtaXNzaW9ucyA9IHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlR3JvdXBQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLXRoaXMtdGFicycpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IHNlbGVjdGFibGVHcm91cFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEdyYW50Q2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgY2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NlbGVjdC1hbGwtaW4tYWxsLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RUaGlzVGFiKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgaWYgKHBlcm1pc3Npb24uaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kSW5kZXgocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKDAsIGluZGV4KSxcclxuICAgICAgICB7IC4uLnRoaXMucGVybWlzc2lvbnNbaW5kZXhdLCBpc0dyYW50ZWQ6ICF0aGlzLnNlbGVjdFRoaXNUYWIgfSxcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKGluZGV4ICsgMSksXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdEFsbCgpIHtcclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+ICh7XHJcbiAgICAgIC4uLnBlcm1pc3Npb24sXHJcbiAgICAgIGlzR3JhbnRlZDpcclxuICAgICAgICB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSB8fCAhdGhpcy5zZWxlY3RBbGxUYWIsXHJcbiAgICB9KSk7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYikge1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSAhdGhpcy5zZWxlY3RBbGxUYWI7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZUdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2V0RGlzYWJsZWQoZ3JvdXAucGVybWlzc2lvbnMpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKGdyb3VwKTtcclxuICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgY29uc3QgdW5jaGFuZ2VkUGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9ucyh0aGlzLmRhdGEuZ3JvdXBzKTtcclxuXHJcbiAgICBjb25zdCBjaGFuZ2VkUGVybWlzc2lvbnM6IFVwZGF0ZVBlcm1pc3Npb25EdG9bXSA9IHRoaXMucGVybWlzc2lvbnNcclxuICAgICAgLmZpbHRlcihwZXIgPT5cclxuICAgICAgICAodW5jaGFuZ2VkUGVybWlzc2lvbnMuZmluZCh1bmNoYW5nZWQgPT4gdW5jaGFuZ2VkLm5hbWUgPT09IHBlci5uYW1lKSB8fCB7fSkuaXNHcmFudGVkID09PVxyXG4gICAgICAgICAgcGVyLmlzR3JhbnRlZFxyXG4gICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgOiB0cnVlLFxyXG4gICAgICApXHJcbiAgICAgIC5tYXAoKHsgbmFtZSwgaXNHcmFudGVkIH0pID0+ICh7IG5hbWUsIGlzR3JhbnRlZCB9KSk7XHJcblxyXG4gICAgaWYgKCFjaGFuZ2VkUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC51cGRhdGUodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXksIHsgcGVybWlzc2lvbnM6IGNoYW5nZWRQZXJtaXNzaW9ucyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cclxuICAgICAgICAgIHRoaXMuc2hvdWxkRmV0Y2hBcHBDb25maWcoKSA/IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkgOiBvZihudWxsKSxcclxuICAgICAgICApLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLm1vZGFsQnVzeSA9IGZhbHNlKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLnByb3ZpZGVyS2V5IHx8ICF0aGlzLnByb3ZpZGVyTmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVyIEtleSBhbmQgUHJvdmlkZXIgTmFtZSBhcmUgcmVxdWlyZWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXQodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXkpLnBpcGUoXHJcbiAgICAgIHRhcCgocGVybWlzc2lvblJlczogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8pID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBwZXJtaXNzaW9uUmVzO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9uUmVzLmdyb3Vwcyk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKHBlcm1pc3Npb25SZXMuZ3JvdXBzWzBdKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gdGhpcy5wZXJtaXNzaW9ucy5ldmVyeShcclxuICAgICAgICAgIHBlciA9PlxyXG4gICAgICAgICAgICBwZXIuaXNHcmFudGVkICYmXHJcbiAgICAgICAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHByb3ZpZGVyID0+IHByb3ZpZGVyLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRNb2RhbCgpIHtcclxuICAgIC8vIFRPRE86IFJlZmFjdG9yXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXREaXNhYmxlZCh0aGlzLnNlbGVjdGVkR3JvdXA/LnBlcm1pc3Npb25zIHx8IFtdKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbmVkQ291bnQoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLnJlZHVjZShcclxuICAgICAgKGFjYywgdmFsKSA9PiAodmFsLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lICYmIHZhbC5pc0dyYW50ZWQgPyBhY2MgKyAxIDogYWNjKSxcclxuICAgICAgMCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRGZXRjaEFwcENvbmZpZygpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2N1cnJlbnRVc2VyJykgYXMgQ3VycmVudFVzZXJEdG87XHJcblxyXG4gICAgaWYgKHRoaXMucHJvdmlkZXJOYW1lID09PSAnUicpIHJldHVybiBjdXJyZW50VXNlci5yb2xlcy5zb21lKHJvbGUgPT4gcm9sZSA9PT0gdGhpcy5wcm92aWRlcktleSk7XHJcblxyXG4gICAgaWYgKHRoaXMucHJvdmlkZXJOYW1lID09PSAnVScpIHJldHVybiBjdXJyZW50VXNlci5pZCA9PT0gdGhpcy5wcm92aWRlcktleTtcclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTWFyZ2luKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogbnVtYmVyIHtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcblxyXG4gIGlmIChwYXJlbnRQZXJtaXNzaW9uICYmIHBhcmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgbGV0IG1hcmdpbiA9IDIwO1xyXG4gICAgcmV0dXJuIChtYXJnaW4gKz0gZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGFyZW50UGVybWlzc2lvbikpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb24gPyAyMCA6IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25zKGdyb3VwczogUGVybWlzc2lvbkdyb3VwRHRvW10pOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdIHtcclxuICByZXR1cm4gZ3JvdXBzLnJlZHVjZShcclxuICAgIChhY2MsIHZhbCkgPT4gW1xyXG4gICAgICAuLi5hY2MsXHJcbiAgICAgIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXA8UGVybWlzc2lvbldpdGhHcm91cE5hbWU+KHAgPT4gKHsgLi4ucCwgZ3JvdXBOYW1lOiB2YWwubmFtZSB8fCAnJyB9KSksXHJcbiAgICBdLFxyXG4gICAgW10gYXMgUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnICxzY3JvbGxhYmxlOmZhbHNlIH1cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBzY3JvbGwtaW4tbW9kYWxcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgI3NlbGVjdEFsbEluQWxsVGFic1JlZlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5BbGxUYWJzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8aHIgY2xhc3M9XCJtdC0yIG1iLTJcIiAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1waWxscyBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZGF0YS5ncm91cHM7IHRyYWNrQnk6IHRyYWNrQnlGblwiIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwieyBhc3NpZ25lZENvdW50OiBnZXRBc3NpZ25lZENvdW50KGdyb3VwLm5hbWUpIH0gYXMgY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXA/Lm5hbWUgPT09IGdyb3VwPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlR3JvdXAoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJzZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucylcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5mb250LXdlaWdodC1ib2xkXT1cImNvdW50LmFzc2lnbmVkQ291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBncm91cD8uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvdW50LmFzc2lnbmVkQ291bnQgPiAwXCI+KHt7IGNvdW50LmFzc2lnbmVkQ291bnQgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHMtMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5UaGlzVGFic1JlZlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdFRoaXNUYWJcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTZWxlY3RBbGxUYWJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RUaGlzVGFiKClcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCI+e3tcclxuICAgICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5UaGlzVGFiJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBlcm1pc3Npb24gb2Ygc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInBlcm1pc3Npb24uc3R5bGVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI3Blcm1pc3Npb25DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Q2hlY2tlZChwZXJtaXNzaW9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0NoZWNrYm94KHBlcm1pc3Npb24sIHBlcm1pc3Npb25DaGVja2JveC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFthdHRyLmZvcl09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHBlcm1pc3Npb24uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUJhZGdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgcHJvdmlkZXIucHJvdmlkZXJOYW1lIH19OiB7eyBwcm92aWRlci5wcm92aWRlcktleSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2FicC1tb2RhbD5cclxuIl19
@@ -4,11 +4,11 @@ import { NgModule } from '@angular/core';
4
4
  import { PermissionManagementComponent } from './components/permission-management.component';
5
5
  import * as i0 from "@angular/core";
6
6
  export class PermissionManagementModule {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent] }); }
9
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, imports: [CoreModule, ThemeSharedModule] }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent] }); }
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, imports: [CoreModule, ThemeSharedModule] }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, decorators: [{
12
12
  type: NgModule,
13
13
  args: [{
14
14
  declarations: [PermissionManagementComponent],
@@ -18,10 +18,10 @@ export class PermissionsService {
18
18
  body: input,
19
19
  }, { apiName: this.apiName });
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionsService, providedIn: 'root' }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionsService, providedIn: 'root' }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionsService, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionsService, decorators: [{
25
25
  type: Injectable,
26
26
  args: [{
27
27
  providedIn: 'root',
@@ -18,10 +18,10 @@ class PermissionsService {
18
18
  body: input,
19
19
  }, { apiName: this.apiName });
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionsService, providedIn: 'root' }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionsService, providedIn: 'root' }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionsService, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionsService, decorators: [{
25
25
  type: Injectable,
26
26
  args: [{
27
27
  providedIn: 'root',
@@ -258,12 +258,12 @@ class PermissionManagementComponent {
258
258
  return currentUser.id === this.providerKey;
259
259
  return false;
260
260
  }
261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component }); }
262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: PermissionManagementComponent, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\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: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component }); }
262
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PermissionManagementComponent, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\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: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
263
263
  }
264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementComponent, decorators: [{
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementComponent, decorators: [{
265
265
  type: Component,
266
- args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\n"] }]
266
+ args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}.scroll-in-modal{overflow:auto;max-height:calc(100vh - 15rem)}\n"] }]
267
267
  }], ctorParameters: () => [{ type: i1.PermissionsService }, { type: i2.ConfigStateService }], propDecorators: { providerName: [{
268
268
  type: Input
269
269
  }], providerKey: [{
@@ -299,11 +299,11 @@ function getPermissions(groups) {
299
299
  }
300
300
 
301
301
  class PermissionManagementModule {
302
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
303
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent] }); }
304
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, imports: [CoreModule, ThemeSharedModule] }); }
302
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
303
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent] }); }
304
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, imports: [CoreModule, ThemeSharedModule] }); }
305
305
  }
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PermissionManagementModule, decorators: [{
306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PermissionManagementModule, decorators: [{
307
307
  type: NgModule,
308
308
  args: [{
309
309
  declarations: [PermissionManagementComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n .scroll-in-modal {\r\n overflow:auto;\r\n max-height: calc(100vh - 15rem)\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs {\r\n @Input()\r\n readonly providerName!: string;\r\n\r\n @Input()\r\n readonly providerKey!: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n constructor(protected service: PermissionsService, protected configState: ConfigStateService) { }\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${(document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n } as unknown as PermissionWithStyle),\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n return per;\r\n });\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n this.setParentClicked(clickedPermission);\r\n }, 0);\r\n }\r\n\r\n setParentClicked(clickedPermissions: PermissionGrantInfoDto) {\r\n let childPermissionGrantedCount = 0;\r\n let parentPermission: PermissionGrantInfoDto;\r\n\r\n if (clickedPermissions.parentName) {\r\n this.permissions.forEach(per => {\r\n if (per.name === clickedPermissions.parentName) {\r\n parentPermission = per;\r\n }\r\n })\r\n this.permissions.forEach(per => {\r\n if (parentPermission.name === per.parentName) {\r\n per.isGranted && childPermissionGrantedCount++;\r\n }\r\n })\r\n if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) {\r\n this.permissions = this.permissions.map(per => {\r\n if (per.name === parentPermission.name) {\r\n per.isGranted = true;\r\n }\r\n return per;\r\n })\r\n }\r\n return;\r\n }\r\n this.permissions = this.permissions.map(per => {\r\n if (per.parentName === clickedPermissions.name) {\r\n per.isGranted = false;\r\n }\r\n return per;\r\n })\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted\r\n }\r\n return per;\r\n })\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectableGroupPermissions = this.selectedGroupPermissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedPermissions = selectableGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === selectableGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.permissions = getPermissions(permissionRes.groups);\r\n this.setSelectedGroup(permissionRes.groups[0]);\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== this.providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n .scroll-in-modal {\r\n overflow:auto;\r\n max-height: calc(100vh - 15rem)\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs {\r\n @Input()\r\n readonly providerName!: string;\r\n\r\n @Input()\r\n readonly providerKey!: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n constructor(protected service: PermissionsService, protected configState: ConfigStateService) { }\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${(document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n } as unknown as PermissionWithStyle),\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n return per;\r\n });\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n this.setParentClicked(clickedPermission);\r\n }, 0);\r\n }\r\n\r\n setParentClicked(clickedPermissions: PermissionGrantInfoDto) {\r\n let childPermissionGrantedCount = 0;\r\n let parentPermission: PermissionGrantInfoDto;\r\n\r\n if (clickedPermissions.parentName) {\r\n this.permissions.forEach(per => {\r\n if (per.name === clickedPermissions.parentName) {\r\n parentPermission = per;\r\n }\r\n })\r\n this.permissions.forEach(per => {\r\n if (parentPermission.name === per.parentName) {\r\n per.isGranted && childPermissionGrantedCount++;\r\n }\r\n })\r\n if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) {\r\n this.permissions = this.permissions.map(per => {\r\n if (per.name === parentPermission.name) {\r\n per.isGranted = true;\r\n }\r\n return per;\r\n })\r\n }\r\n return;\r\n }\r\n this.permissions = this.permissions.map(per => {\r\n if (per.parentName === clickedPermissions.name) {\r\n per.isGranted = false;\r\n }\r\n return per;\r\n })\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted\r\n }\r\n return per;\r\n })\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectableGroupPermissions = this.selectedGroupPermissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedPermissions = selectableGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === selectableGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.permissions = getPermissions(permissionRes.groups);\r\n this.setSelectedGroup(permissionRes.groups[0]);\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== this.providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' ,scrollable:false }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 scroll-in-modal\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@abp/ng.permission-management",
3
- "version": "8.0.2",
3
+ "version": "8.1.0-rc.1",
4
4
  "homepage": "https://abp.io",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/abpframework/abp.git"
8
8
  },
9
9
  "dependencies": {
10
- "@abp/ng.theme.shared": "~8.0.2",
10
+ "@abp/ng.theme.shared": "~8.1.0-rc.1",
11
11
  "tslib": "^2.0.0"
12
12
  },
13
13
  "publishConfig": {