@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
101 lines • 14.1 kB
JavaScript
import { Injectable } from '@angular/core';
import { SimpleFilter } from '../../filter/models/simple-filter';
import { HttpParams } from '@angular/common/http';
import { map, switchMap } from 'rxjs/operators';
import { BehaviorSubject, of } from 'rxjs';
import { PaginationParams } from '../../utility/pagination/pagination-params';
import * as i0 from "@angular/core";
import * as i1 from "../../user/services/user.service";
import * as i2 from "../../resources/engine-endpoint/case-resource.service";
/**
* This service allows access to information about the groups of the currently logged user.
*
* If no user is logged an empty array is provided.
*
* If a user can be owner of at most one group, this service provides utility methods to access this group directly.
*
* The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
*/
export class NextGroupService {
_userService;
_caseResourceService;
_memberGroups$;
_ownerGroups$;
_userSub;
constructor(_userService, _caseResourceService) {
this._userService = _userService;
this._caseResourceService = _caseResourceService;
this._ownerGroups$ = new BehaviorSubject([]);
this._memberGroups$ = new BehaviorSubject([]);
this._userSub = this._userService.user$.pipe(switchMap(user => {
if (!user || user.id === '') {
return of([]);
}
const params = new HttpParams().set(PaginationParams.PAGE_SIZE, `${user.nextGroups.length}`);
return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery({ id: user.nextGroups }), params)
.pipe(map(page => page.content ? page.content : []), map(groups => groups.filter(group => group.author.fullName !== 'application engine')));
})).subscribe(groups => {
const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email);
this._ownerGroups$.next(ownerGroups);
this._memberGroups$.next(groups);
});
}
ngOnDestroy() {
this._userSub.unsubscribe();
this._memberGroups$.complete();
this._ownerGroups$.complete();
}
/**
* @returns an Observable of all the groups the currently logged user is a member of
*/
get memberGroups$() {
return this._memberGroups$.asObservable();
}
/**
* @returns an Observable of all the groups the currently logged user is an owner of
*/
get ownerGroups$() {
return this._ownerGroups$.asObservable();
}
/**
* @returns an Array of all the groups the currently logged user is a member of
*/
get memberGroups() {
return this._memberGroups$.getValue();
}
/**
* @returns an Array of all the groups the currently logged user is an owner of
*/
get ownerGroups() {
return this._ownerGroups$.getValue();
}
/**
* @returns an Observable containing the first element of the [ownerGroups$]{@link NextGroupService#ownerGroups$} observable,
* or `undefined` if the contained array is empty
*/
get firstOwnerGroup$() {
return this._ownerGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
}
/**
* @returns the first element of the [ownerGroups]{@link NextGroupService#ownerGroups} array, or `undefined` if the array is empty
*/
get firstOwnerGroup() {
const ownerGroups = this.ownerGroups;
return ownerGroups.length > 0 ? ownerGroups[0] : undefined;
}
/**
* @deprecated in NAE 5.6.0 - use [ownerGroups]{@link NextGroupService#ownerGroups} instead
*/
get groupOfUser() {
return this.ownerGroups;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NextGroupService, deps: [{ token: i1.UserService }, { token: i2.CaseResourceService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NextGroupService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NextGroupService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.UserService }, { type: i2.CaseResourceService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dC1ncm91cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9ncm91cHMvc2VydmljZXMvbmV4dC1ncm91cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFHcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDOzs7O0FBRTVFOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLGdCQUFnQjtJQU9IO0lBQXFDO0lBTGpELGNBQWMsQ0FBK0I7SUFDN0MsYUFBYSxDQUErQjtJQUU5QyxRQUFRLENBQWU7SUFFL0IsWUFBc0IsWUFBeUIsRUFBWSxvQkFBeUM7UUFBOUUsaUJBQVksR0FBWixZQUFZLENBQWE7UUFBWSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ2hHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDeEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDakI7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBSSxJQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFdEcsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBQyxFQUFFLEVBQUcsSUFBWSxDQUFDLFVBQVUsRUFBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO2lCQUMzRyxJQUFJLENBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzdDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQ3hGLENBQUM7UUFDVixDQUFDLENBQUMsQ0FDTCxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzt3R0F2RlEsZ0JBQWdCOzRHQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtQYWdpbmF0aW9uUGFyYW1zfSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXMnO1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSBhbGxvd3MgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0IHRoZSBncm91cHMgb2YgdGhlIGN1cnJlbnRseSBsb2dnZWQgdXNlci5cbiAqXG4gKiBJZiBubyB1c2VyIGlzIGxvZ2dlZCBhbiBlbXB0eSBhcnJheSBpcyBwcm92aWRlZC5cbiAqXG4gKiBJZiBhIHVzZXIgY2FuIGJlIG93bmVyIG9mIGF0IG1vc3Qgb25lIGdyb3VwLCB0aGlzIHNlcnZpY2UgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGFjY2VzcyB0aGlzIGdyb3VwIGRpcmVjdGx5LlxuICpcbiAqIFRoZSBncm91cHMgYXJlIGFzc3VtZWQgdG8gYmUgaW5zdGFuY2VzIG9mIHRoZSBlbmdpbmUgZ3JvdXAgcHJvY2VzcywgdGhpcyBpcyBuZXZlciBjaGVja2VkIG5vciBlbmZvcmNlZC5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmV4dEdyb3VwU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwcm90ZWN0ZWQgX21lbWJlckdyb3VwcyQ6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDYXNlPj47XG4gICAgcHJvdGVjdGVkIF9vd25lckdyb3VwcyQ6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDYXNlPj47XG5cbiAgICBwcml2YXRlIF91c2VyU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSwgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX293bmVyR3JvdXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q2FzZT4+KFtdKTtcbiAgICAgICAgdGhpcy5fbWVtYmVyR3JvdXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q2FzZT4+KFtdKTtcblxuICAgICAgICB0aGlzLl91c2VyU3ViID0gdGhpcy5fdXNlclNlcnZpY2UudXNlciQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh1c2VyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZXIgfHwgdXNlci5pZCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgYCR7KHVzZXIgYXMgYW55KS5uZXh0R3JvdXBzLmxlbmd0aH1gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaENhc2VzKFNpbXBsZUZpbHRlci5mcm9tQ2FzZVF1ZXJ5KHtpZDogKHVzZXIgYXMgYW55KS5uZXh0R3JvdXBzfSksIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAocGFnZSA9PiBwYWdlLmNvbnRlbnQgPyBwYWdlLmNvbnRlbnQgOiBbXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoZ3JvdXBzID0+IGdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuYXV0aG9yLmZ1bGxOYW1lICE9PSAnYXBwbGljYXRpb24gZW5naW5lJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZShncm91cHMgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3duZXJHcm91cHMgPSBncm91cHMuZmlsdGVyKGcgPT4gZy5hdXRob3IuZW1haWwgPT09IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIuZW1haWwpO1xuICAgICAgICAgICAgdGhpcy5fb3duZXJHcm91cHMkLm5leHQob3duZXJHcm91cHMpO1xuICAgICAgICAgICAgdGhpcy5fbWVtYmVyR3JvdXBzJC5uZXh0KGdyb3Vwcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21lbWJlckdyb3VwcyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fb3duZXJHcm91cHMkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgdGhlIGdyb3VwcyB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGEgbWVtYmVyIG9mXG4gICAgICovXG4gICAgcHVibGljIGdldCBtZW1iZXJHcm91cHMkKCk6IE9ic2VydmFibGU8QXJyYXk8Q2FzZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbWJlckdyb3VwcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgdGhlIGdyb3VwcyB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGFuIG93bmVyIG9mXG4gICAgICovXG4gICAgcHVibGljIGdldCBvd25lckdyb3VwcyQoKTogT2JzZXJ2YWJsZTxBcnJheTxDYXNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJHcm91cHMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IG9mIGFsbCB0aGUgZ3JvdXBzIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXIgaXMgYSBtZW1iZXIgb2ZcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1lbWJlckdyb3VwcygpOiBBcnJheTxDYXNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW1iZXJHcm91cHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gQXJyYXkgb2YgYWxsIHRoZSBncm91cHMgdGhlIGN1cnJlbnRseSBsb2dnZWQgdXNlciBpcyBhbiBvd25lciBvZlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgb3duZXJHcm91cHMoKTogQXJyYXk8Q2FzZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJHcm91cHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBbb3duZXJHcm91cHMkXXtAbGluayBOZXh0R3JvdXBTZXJ2aWNlI293bmVyR3JvdXBzJH0gb2JzZXJ2YWJsZSxcbiAgICAgKiBvciBgdW5kZWZpbmVkYCBpZiB0aGUgY29udGFpbmVkIGFycmF5IGlzIGVtcHR5XG4gICAgICovXG4gICAgcHVibGljIGdldCBmaXJzdE93bmVyR3JvdXAkKCk6IE9ic2VydmFibGU8Q2FzZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJHcm91cHMkLnBpcGUobWFwKGFycmF5ID0+IGFycmF5Lmxlbmd0aCA+IDAgPyBhcnJheVswXSA6IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBbb3duZXJHcm91cHNde0BsaW5rIE5leHRHcm91cFNlcnZpY2Ujb3duZXJHcm91cHN9IGFycmF5LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgYXJyYXkgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZpcnN0T3duZXJHcm91cCgpOiBDYXNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgb3duZXJHcm91cHMgPSB0aGlzLm93bmVyR3JvdXBzO1xuICAgICAgICByZXR1cm4gb3duZXJHcm91cHMubGVuZ3RoID4gMCA/IG93bmVyR3JvdXBzWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGluIE5BRSA1LjYuMCAtIHVzZSBbb3duZXJHcm91cHNde0BsaW5rIE5leHRHcm91cFNlcnZpY2Ujb3duZXJHcm91cHN9IGluc3RlYWRcbiAgICAgKi9cbiAgICBnZXQgZ3JvdXBPZlVzZXIoKTogQXJyYXk8Q2FzZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lckdyb3VwcztcbiAgICB9XG59XG4iXX0=