@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
346 lines • 41.4 kB
JavaScript
import { __decorate, __extends, __metadata, __param } from "tslib";
import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, Input, QueryList, OnInit, Inject, ElementRef, ChangeDetectorRef, ComponentFactoryResolver, IterableDiffers, ViewContainerRef, NgZone, AfterViewInit, OnChanges, Output, EventEmitter, Optional, OnDestroy, DoCheck } from '@angular/core';
import { IgxGridTransaction } from '../grid-base.directive';
import { GridBaseAPIService } from '../api.service';
import { DOCUMENT } from '@angular/common';
import { IgxFilteringService } from '../filtering/grid-filtering.service';
import { DisplayDensityToken } from '../../core/displayDensity';
import { IgxGridSummaryService } from '../summaries/grid-summary.service';
import { IgxHierarchicalGridBaseDirective } from './hierarchical-grid-base.directive';
import { IgxHierarchicalGridNavigationService } from './hierarchical-grid-navigation.service';
import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/selection.service';
import { IgxOverlayService } from '../../services/index';
import { takeUntil } from 'rxjs/operators';
import { IgxColumnComponent } from '../columns/column.component';
import { IgxRowIslandAPIService } from './row-island-api.service';
import { IgxColumnResizingService } from '../resizing/resizing.service';
var IgxRowIslandComponent = /** @class */ (function (_super) {
__extends(IgxRowIslandComponent, _super);
function IgxRowIslandComponent(selectionService, crudService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, rowIslandAPI) {
var _this = _super.call(this, selectionService, crudService, colResizingService, gridAPI, typeof transactionFactory === 'function' ? transactionFactory() : transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions) || this;
_this.selectionService = selectionService;
_this.colResizingService = colResizingService;
_this.transactionFactory = transactionFactory;
_this.document = document;
_this.overlayService = overlayService;
_this.summaryService = summaryService;
_this._displayDensityOptions = _displayDensityOptions;
_this.rowIslandAPI = rowIslandAPI;
/**
* @hidden
*/
_this.children = new QueryList();
/**
* @hidden
*/
_this.childColumns = new QueryList();
/**
* @hidden
*/
_this.onLayoutChange = new EventEmitter();
/**
* Event emmited when a grid is being created based on this row island.
* ```html
* <igx-hierarchical-grid [data]="Data" [autoGenerate]="true">
* <igx-row-island [key]="'childData'" (onGridCreated)="gridCreated($event)" #rowIsland>
* <!-- ... -->
* </igx-row-island>
* </igx-hierarchical-grid>
* ```
* @memberof IgxRowIslandComponent
*/
_this.onGridCreated = new EventEmitter();
/**
* @hidden
*/
_this.initialChanges = [];
/**
* @hidden
*/
_this.rootGrid = null;
_this.layout_id = "igx-row-island-";
_this.isInit = false;
_this.hgridAPI = gridAPI;
return _this;
}
IgxRowIslandComponent_1 = IgxRowIslandComponent;
Object.defineProperty(IgxRowIslandComponent.prototype, "expandChildren", {
/**
* Gets if all immediate children of the grids for this `IgxRowIslandComponent` have been set to be expanded/collapsed.
* ```typescript
* const expanded = this.rowIsland.expandChildren;
* ```
* @memberof IgxRowIslandComponent
*/
get: function () {
return this._expandChildren;
},
/**
* Sets if all immediate children of the grids for this `IgxRowIslandComponent` should be expanded/collapsed.
* ```html
* <igx-hierarchical-grid [data]="Data" [autoGenerate]="true">
* <igx-row-island [key]="'childData'" [expandChildren]="true" #rowIsland>
* <!-- ... -->
* </igx-row-island>
* </igx-hierarchical-grid>
* ```
* @memberof IgxRowIslandComponent
*/
set: function (value) {
this._expandChildren = value;
this.rowIslandAPI.getChildGrids().forEach(function (grid) {
if (document.body.contains(grid.nativeElement)) {
// Detect changes right away if the grid is visible
grid.expandChildren = value;
grid.markForCheck();
}
else {
// Else defer the detection on changes when the grid gets into view for performance.
grid.updateOnRender = true;
}
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxRowIslandComponent.prototype, "id", {
/**
* @hidden
*/
get: function () {
var pId = this.parentId ? this.parentId.substring(this.parentId.indexOf(this.layout_id) + this.layout_id.length) + '-' : '';
return this.layout_id + pId + this.key;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxRowIslandComponent.prototype, "parentId", {
/**
* @hidden
*/
get: function () {
return this.parentIsland ? this.parentIsland.id : null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxRowIslandComponent.prototype, "level", {
/**
* @hidden
*/
get: function () {
var ptr = this.parentIsland;
var lvl = 0;
while (ptr) {
lvl++;
ptr = ptr.parentIsland;
}
return lvl + 1;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxRowIslandComponent.prototype.ngOnInit = function () {
this.rootGrid = this.hgridAPI.grid;
this.rowIslandAPI.rowIsland = this;
};
/**
* @hidden
*/
IgxRowIslandComponent.prototype.ngDoCheck = function () {
};
/**
* @hidden
*/
IgxRowIslandComponent.prototype.ngAfterContentInit = function () {
var _this = this;
this.updateChildren();
this.children.notifyOnChanges();
this.children.changes.pipe(takeUntil(this.destroy$))
.subscribe(function (change) {
_this.updateChildren();
// update existing grids since their child ri have been changed.
_this.getGridsForIsland(_this.key).forEach(function (grid) {
grid.onRowIslandChange(_this.children);
});
});
var nestedColumns = this.children.map(function (layout) { return layout.columnList.toArray(); });
var colsArray = [].concat.apply([], nestedColumns);
var topCols = this.columnList.filter(function (item) {
return colsArray.indexOf(item) === -1;
});
this.childColumns.reset(topCols);
this.columnList.changes.pipe(takeUntil(this.destroy$)).subscribe(function () { _this.updateColumnList(); });
};
IgxRowIslandComponent.prototype.updateChildren = function () {
var _this = this;
if (this.children.first === this) {
this.children.reset(this.children.toArray().slice(1));
}
this.children.forEach(function (child) {
child.parentIsland = _this;
});
};
/**
* @hidden
*/
IgxRowIslandComponent.prototype.ngAfterViewInit = function () {
this.rowIslandAPI.register(this);
if (this.parentIsland) {
this.parentIsland.rowIslandAPI.registerChildRowIsland(this);
}
else {
this.rootGrid.hgridAPI.registerChildRowIsland(this);
}
this._init = false;
};
/**
* @hidden
*/
IgxRowIslandComponent.prototype.ngOnChanges = function (changes) {
this.onLayoutChange.emit(changes);
if (!this.isInit) {
this.initialChanges.push(changes);
}
};
/**
* @hidden
*/
IgxRowIslandComponent.prototype.ngOnDestroy = function () {
var _this = this;
// Override the base destroy because we don't have rendered anything to use removeEventListener on
this.destroy$.next(true);
this.destroy$.complete();
this._destroyed = true;
this.rowIslandAPI.unset(this.id);
if (this.parentIsland) {
this.getGridsForIsland(this.key).forEach(function (grid) {
_this.cleanGridState(grid);
grid.hgridAPI.unsetChildRowIsland(_this);
});
this.parentIsland.rowIslandAPI.unsetChildRowIsland(this);
}
else {
this.rootGrid.hgridAPI.unsetChildRowIsland(this);
this.cleanGridState(this.rootGrid);
}
};
IgxRowIslandComponent.prototype.cleanGridState = function (grid) {
grid.childGridTemplates.forEach(function (tmpl) {
tmpl.owner.cleanView(tmpl.context.templateID);
});
grid.childGridTemplates.clear();
grid.onRowIslandChange();
};
/**
* @hidden
*/
IgxRowIslandComponent.prototype.reflow = function () { };
/**
* @hidden
*/
IgxRowIslandComponent.prototype.calculateGridHeight = function () { };
IgxRowIslandComponent.prototype.updateColumnList = function () {
var _this = this;
var nestedColumns = this.children.map(function (layout) { return layout.columnList.toArray(); });
var colsArray = [].concat.apply([], nestedColumns);
var topCols = this.columnList.filter(function (item) {
if (colsArray.indexOf(item) === -1) {
/* Reset the default width of the columns that come into this row island,
because the root catches them first during the detectChanges() and sets their defaultWidth. */
item.defaultWidth = undefined;
return true;
}
return false;
});
this.childColumns.reset(topCols);
if (this.parentIsland) {
this.parentIsland.columnList.notifyOnChanges();
}
else {
this.rootGrid.columnList.notifyOnChanges();
}
this.rowIslandAPI.getChildGrids().forEach(function (grid) {
grid.createColumnsList(_this.childColumns.toArray());
if (!document.body.contains(grid.nativeElement)) {
grid.updateOnRender = true;
}
});
};
var IgxRowIslandComponent_1;
IgxRowIslandComponent.ctorParameters = function () { return [
{ type: IgxGridSelectionService },
{ type: IgxGridCRUDService },
{ type: IgxColumnResizingService },
{ type: GridBaseAPIService },
{ type: undefined, decorators: [{ type: Inject, args: [IgxGridTransaction,] }] },
{ type: ElementRef },
{ type: NgZone },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: ChangeDetectorRef },
{ type: ComponentFactoryResolver },
{ type: IterableDiffers },
{ type: ViewContainerRef },
{ type: IgxHierarchicalGridNavigationService },
{ type: IgxFilteringService },
{ type: IgxOverlayService, decorators: [{ type: Inject, args: [IgxOverlayService,] }] },
{ type: IgxGridSummaryService },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] },
{ type: IgxRowIslandAPIService }
]; };
__decorate([
Input(),
__metadata("design:type", String)
], IgxRowIslandComponent.prototype, "key", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Boolean])
], IgxRowIslandComponent.prototype, "expandChildren", null);
__decorate([
ContentChildren(IgxRowIslandComponent_1, { read: IgxRowIslandComponent_1, descendants: false }),
__metadata("design:type", Object)
], IgxRowIslandComponent.prototype, "children", void 0);
__decorate([
ContentChildren(IgxColumnComponent, { read: IgxColumnComponent, descendants: false }),
__metadata("design:type", Object)
], IgxRowIslandComponent.prototype, "childColumns", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxRowIslandComponent.prototype, "onLayoutChange", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxRowIslandComponent.prototype, "onGridCreated", void 0);
IgxRowIslandComponent = IgxRowIslandComponent_1 = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'igx-row-island',
template: "",
providers: [IgxRowIslandAPIService]
}),
__param(4, Inject(IgxGridTransaction)),
__param(7, Inject(DOCUMENT)),
__param(14, Inject(IgxOverlayService)),
__param(16, Optional()), __param(16, Inject(DisplayDensityToken)),
__metadata("design:paramtypes", [IgxGridSelectionService,
IgxGridCRUDService,
IgxColumnResizingService,
GridBaseAPIService, Object, ElementRef,
NgZone, Object, ChangeDetectorRef,
ComponentFactoryResolver,
IterableDiffers,
ViewContainerRef,
IgxHierarchicalGridNavigationService,
IgxFilteringService,
IgxOverlayService,
IgxGridSummaryService, Object, IgxRowIslandAPIService])
], IgxRowIslandComponent);
return IgxRowIslandComponent;
}(IgxHierarchicalGridBaseDirective));
export { IgxRowIslandComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWlzbGFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL3Jvdy1pc2xhbmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixhQUFhLEVBQ2IsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osUUFBUSxFQUNSLFNBQVMsRUFDVCxPQUFPLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUF3QixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FB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aUJBQWlCLENBQUMsQ0FBQTtRQUV6QixZQUFBLFFBQVEsRUFBRSxDQUFBLEVBQUUsWUFBQSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTt5Q0FoQmYsdUJBQXVCO1lBQ25DLGtCQUFrQjtZQUNKLHdCQUF3QjtZQUMxQyxrQkFBa0IsVUFFZixVQUFVO1lBQ2hCLE1BQU0sVUFFUCxpQkFBaUI7WUFDWix3QkFBd0I7WUFDekIsZUFBZTtZQUNmLGdCQUFnQjtZQUNiLG9DQUFvQztZQUM5QixtQkFBbUI7WUFDZ0IsaUJBQWlCO1lBQy9DLHFCQUFxQixVQUV2QixzQkFBc0I7T0FqSnRDLHFCQUFxQixDQStTakM7SUFBRCw0QkFBQztDQUFBLEFBL1NELENBQTJDLGdDQUFnQyxHQStTMUU7U0EvU1kscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIE9uSW5pdCxcbiAgICBJbmplY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgTmdab25lLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3B0aW9uYWwsXG4gICAgT25EZXN0cm95LFxuICAgIERvQ2hlY2tcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZFRyYW5zYWN0aW9uLCBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuIH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblNlcnZpY2UsIFRyYW5zYWN0aW9uLCBTdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsIElneEdyaWRDUlVEU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IElneE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW5kZXgnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0lzbGFuZEFQSVNlcnZpY2UgfSBmcm9tICcuL3Jvdy1pc2xhbmQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Jlc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuZXhwb3J0IGludGVyZmFjZSBJR3JpZENyZWF0ZWRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgb3duZXI6IElneFJvd0lzbGFuZENvbXBvbmVudDtcbiAgICBwYXJlbnRJRDogYW55O1xuICAgIGdyaWQ6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LXJvdy1pc2xhbmQnLFxuICAgIHRlbXBsYXRlOiBgYCxcbiAgICBwcm92aWRlcnM6IFtJZ3hSb3dJc2xhbmRBUElTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hSb3dJc2xhbmRDb21wb25lbnQgZXh0ZW5kcyBJZ3hIaWVyYXJjaGljYWxHcmlkQmFzZURpcmVjdGl2ZVxuICAgICAgICAgICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBrZXkgb2YgdGhlIHJvdyBpc2xhbmQgYnkgd2hpY2ggY2hpbGQgZGF0YSB3b3VsZCBiZSB0YWtlbiBmcm9tIHRoZSByb3cgZGF0YSBpZiBzdWNoIGlzIHByb3ZpZGVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCI+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBrZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMgaWYgYWxsIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgZ3JpZHMgZm9yIHRoaXMgYElneFJvd0lzbGFuZENvbXBvbmVudGAgc2hvdWxkIGJlIGV4cGFuZGVkL2NvbGxhcHNlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+XG4gICAgICogICAgICA8aWd4LXJvdy1pc2xhbmQgW2tleV09XCInY2hpbGREYXRhJ1wiIFtleHBhbmRDaGlsZHJlbl09XCJ0cnVlXCIgI3Jvd0lzbGFuZD5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGV4cGFuZENoaWxkcmVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZENoaWxkcmVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKS5mb3JFYWNoKChncmlkKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhncmlkLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGNoYW5nZXMgcmlnaHQgYXdheSBpZiB0aGUgZ3JpZCBpcyB2aXNpYmxlXG4gICAgICAgICAgICAgICAgZ3JpZC5leHBhbmRDaGlsZHJlbiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGdyaWQubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVsc2UgZGVmZXIgdGhlIGRldGVjdGlvbiBvbiBjaGFuZ2VzIHdoZW4gdGhlIGdyaWQgZ2V0cyBpbnRvIHZpZXcgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgICAgIGdyaWQudXBkYXRlT25SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGdyaWRzIGZvciB0aGlzIGBJZ3hSb3dJc2xhbmRDb21wb25lbnRgIGhhdmUgYmVlbiBzZXQgdG8gYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBleHBhbmRlZCA9IHRoaXMucm93SXNsYW5kLmV4cGFuZENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgZXhwYW5kQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRDaGlsZHJlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hSb3dJc2xhbmRDb21wb25lbnQsIHsgcmVhZDogSWd4Um93SXNsYW5kQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgY2hpbGRyZW4gPSBuZXcgUXVlcnlMaXN0PElneFJvd0lzbGFuZENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbHVtbkNvbXBvbmVudCwgeyByZWFkOiBJZ3hDb2x1bW5Db21wb25lbnQsIGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjaGlsZENvbHVtbnMgPSBuZXcgUXVlcnlMaXN0PElneENvbHVtbkNvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25MYXlvdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtbWl0ZWQgd2hlbiBhIGdyaWQgaXMgYmVpbmcgY3JlYXRlZCBiYXNlZCBvbiB0aGlzIHJvdyBpc2xhbmQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgPGlneC1yb3ctaXNsYW5kIFtrZXldPVwiJ2NoaWxkRGF0YSdcIiAob25HcmlkQ3JlYXRlZCk9XCJncmlkQ3JlYXRlZCgkZXZlbnQpXCIgI3Jvd0lzbGFuZD5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkdyaWRDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZENyZWF0ZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlkKCkge1xuICAgICAgICBjb25zdCBwSWQgPSB0aGlzLnBhcmVudElkID8gdGhpcy5wYXJlbnRJZC5zdWJzdHJpbmcodGhpcy5wYXJlbnRJZC5pbmRleE9mKHRoaXMubGF5b3V0X2lkKSArIHRoaXMubGF5b3V0X2lkLmxlbmd0aCkgKyAnLScgOiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0X2lkICsgcElkICsgIHRoaXMua2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcGFyZW50SWQoKSB7XG4gICAgICAgcmV0dXJuIHRoaXMucGFyZW50SXNsYW5kID8gdGhpcy5wYXJlbnRJc2xhbmQuaWQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIGxldCBwdHIgPSB0aGlzLnBhcmVudElzbGFuZDtcbiAgICAgICAgbGV0IGx2bCA9IDA7XG4gICAgICAgIHdoaWxlIChwdHIpIHtcbiAgICAgICAgICAgIGx2bCsrO1xuICAgICAgICAgICAgcHRyID0gcHRyLnBhcmVudElzbGFuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbHZsICsgMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxDaGFuZ2VzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJvb3RHcmlkID0gbnVsbDtcbiAgICByZWFkb25seSBkYXRhOiBhbnlbXTtcbiAgICByZWFkb25seSBmaWx0ZXJlZERhdGE6IGFueVtdO1xuICAgIHByaXZhdGUgbGF5b3V0X2lkID0gYGlneC1yb3ctaXNsYW5kLWA7XG4gICAgcHJpdmF0ZSBpc0luaXQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIGNydWRTZXJ2aWNlOiBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LFxuICAgICAgICBASW5qZWN0KElneEdyaWRUcmFuc2FjdGlvbikgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRmFjdG9yeTogYW55LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHB1YmxpYyBkb2N1bWVudCxcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBuYXZpZ2F0aW9uOiBJZ3hIaWVyYXJjaGljYWxHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIGZpbHRlcmluZ1NlcnZpY2U6IElneEZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIHByb3RlY3RlZCBvdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBzdW1tYXJ5U2VydmljZTogSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zLFxuICAgICAgICBwdWJsaWMgcm93SXNsYW5kQVBJOiBJZ3hSb3dJc2xhbmRBUElTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNydWRTZXJ2aWNlLFxuICAgICAgICAgICAgY29sUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICAgICAgZ3JpZEFQSSxcbiAgICAgICAgICAgIHR5cGVvZiB0cmFuc2FjdGlvbkZhY3RvcnkgPT09ICdmdW5jdGlvbicgPyB0cmFuc2FjdGlvbkZhY3RvcnkoKSA6IHRyYW5zYWN0aW9uRmFjdG9yeSxcbiAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICB6b25lLFxuICAgICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgICBjZHIsXG4gICAgICAgICAgICByZXNvbHZlcixcbiAgICAgICAgICAgIGRpZmZlcnMsXG4gICAgICAgICAgICB2aWV3UmVmLFxuICAgICAgICAgICAgbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgICAgICBvdmVybGF5U2VydmljZSxcbiAgICAgICAgICAgIHN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICAgICAgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmhncmlkQVBJID0gPElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlPmdyaWRBUEk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvb3RHcmlkID0gdGhpcy5oZ3JpZEFQSS5ncmlkO1xuICAgICAgICB0aGlzLnJvd0lzbGFuZEFQSS5yb3dJc2xhbmQgPSB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xuICAgICAgICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIGdyaWRzIHNpbmNlIHRoZWlyIGNoaWxkIHJpIGhhdmUgYmVlbiBjaGFuZ2VkLlxuICAgICAgICAgICAgdGhpcy5nZXRHcmlkc0ZvcklzbGFuZCh0aGlzLmtleSkuZm9yRWFjaChncmlkID0+IHtcbiAgICAgICAgICAgICAgICAoZ3JpZCBhcyBhbnkpLm9uUm93SXNsYW5kQ2hhbmdlKHRoaXMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gdGhpcy5jaGlsZHJlbi5tYXAoKGxheW91dCkgPT4gbGF5b3V0LmNvbHVtbkxpc3QudG9BcnJheSgpKTtcbiAgICAgICAgY29uc3QgY29sc0FycmF5ID0gW10uY29uY2F0LmFwcGx5KFtdLCBuZXN0ZWRDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgdG9wQ29scyA9IHRoaXMuY29sdW1uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoaWxkQ29sdW1ucy5yZXNldCh0b3BDb2xzKTtcbiAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMudXBkYXRlQ29sdW1uTGlzdCgpOyB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ2hpbGRyZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmZpcnN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnJlc2V0KHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50SXNsYW5kID0gdGhpcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkucmVnaXN0ZXIodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQucm93SXNsYW5kQVBJLnJlZ2lzdGVyQ2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RHcmlkLmhncmlkQVBJLnJlZ2lzdGVyQ2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2UuZW1pdChjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsQ2hhbmdlcy5wdXNoKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBkZXN0cm95IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSByZW5kZXJlZCBhbnl0aGluZyB0byB1c2UgcmVtb3ZlRXZlbnRMaXN0ZW5lciBvblxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkudW5zZXQodGhpcy5pZCk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRHcmlkc0ZvcklzbGFuZCh0aGlzLmtleSkuZm9yRWFjaChncmlkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFuR3JpZFN0YXRlKGdyaWQpO1xuICAgICAgICAgICAgICAgIGdyaWQuaGdyaWRBUEkudW5zZXRDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQucm93SXNsYW5kQVBJLnVuc2V0Q2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RHcmlkLmhncmlkQVBJLnVuc2V0Q2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsZWFuR3JpZFN0YXRlKHRoaXMucm9vdEdyaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbkdyaWRTdGF0ZShncmlkKSB7XG4gICAgICAgIGdyaWQuY2hpbGRHcmlkVGVtcGxhdGVzLmZvckVhY2goKHRtcGwpID0+IHtcbiAgICAgICAgICAgIHRtcGwub3duZXIuY2xlYW5WaWV3KHRtcGwuY29udGV4dC50ZW1wbGF0ZUlEKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdyaWQuY2hpbGRHcmlkVGVtcGxhdGVzLmNsZWFyKCk7XG4gICAgICAgIGdyaWQub25Sb3dJc2xhbmRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVmbG93KCkge31cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjYWxjdWxhdGVHcmlkSGVpZ2h0KCkge31cblxuICAgIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5MaXN0KCkge1xuICAgICAgICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gdGhpcy5jaGlsZHJlbi5tYXAoKGxheW91dCkgPT4gbGF5b3V0LmNvbHVtbkxpc3QudG9BcnJheSgpKTtcbiAgICAgICAgY29uc3QgY29sc0FycmF5ID0gW10uY29uY2F0LmFwcGx5KFtdLCBuZXN0ZWRDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgdG9wQ29scyA9IHRoaXMuY29sdW1uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgZGVmYXVsdCB3aWR0aCBvZiB0aGUgY29sdW1ucyB0aGF0IGNvbWUgaW50byB0aGlzIHJvdyBpc2xhbmQsXG4gICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgcm9vdCBjYXRjaGVzIHRoZW0gZmlyc3QgZHVyaW5nIHRoZSBkZXRlY3RDaGFuZ2VzKCkgYW5kIHNldHMgdGhlaXIgZGVmYXVsdFdpZHRoLiAqL1xuICAgICAgICAgICAgICAgIGl0ZW0uZGVmYXVsdFdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMucmVzZXQodG9wQ29scyk7XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNsYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5jb2x1bW5MaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5jb2x1bW5MaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpLmZvckVhY2goKGdyaWQ6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGdyaWQuY3JlYXRlQ29sdW1uc0xpc3QodGhpcy5jaGlsZENvbHVtbnMudG9BcnJheSgpKTtcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhncmlkLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgZ3JpZC51cGRhdGVPblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==