qms-angular 1.0.76 → 1.0.80
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.
- package/bundles/qms-angular.umd.js +409 -356
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
- package/esm2015/lib/components/related/popup/related-popup.component.js +294 -300
- package/esm2015/lib/components/select-include-children/select-include-children.component.js +8 -8
- package/esm2015/lib/components/select-one/select-one.component.js +44 -30
- package/esm2015/lib/components/select-process-document/models/pop-up-data.model.js +1 -1
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +23 -3
- package/esm2015/lib/components/tree/tree.component.js +10 -6
- package/esm2015/lib/components/treeNew/tree.component.js +31 -10
- package/fesm2015/qms-angular.js +406 -353
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/related/popup/related-popup.component.d.ts +2 -1
- package/lib/components/select-process-document/models/pop-up-data.model.d.ts +1 -0
- package/lib/components/select-process-document/select-process-document.component.d.ts +3 -0
- package/lib/components/treeNew/tree.component.d.ts +1 -0
- package/package.json +1 -1
- package/qms-angular.metadata.json +1 -1
- package/src/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.scss +6 -3
- package/src/lib/components/select-process-document/select-process-document.component.scss +14 -1
- package/src/lib/components/treeNew/tree.component.scss +3 -6
@@ -327,8 +327,8 @@ export class QMSNavigationDrawerComponent {
|
|
327
327
|
QMSNavigationDrawerComponent.decorators = [
|
328
328
|
{ type: Component, args: [{
|
329
329
|
selector: 'app-qms-navigation-drawer',
|
330
|
-
template: "\r\n<mat-tree class=\"qms-navigation-drawer-container\" [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\" [cdkDropListDisabled]=\"dragDropListDisabled\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" (mouseover)=\"onOver(node)\" matTreeNodePadding matTreeNodePaddingIndent=\"34\"\r\n cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\" (mouseleave)=\"dragHoverEnd()\"\r\n (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"{'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *cdkDragPreview class=\"node-preview-item\">{{ node.name }}</div>\r\n <div *ngIf=\"!node.isReadOnly\" (click)=\"onClickNode(node, true)\" class=\"tree-content\">\r\n <button tabindex=\"-1\" qms-btn-outlined disabled class=\"border-0 bg-transparent\">\r\n <img class=\"img-icon\" [src]=\"faIconPath\" alt=\"\" />\r\n </button>\r\n <div class=\"span-text\">{{ node.name }}</div>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\" (mouseenter)=\"setHoverFavorite(node.id)\"\r\n (mouseleave)=\"setHoverFavorite(null)\" [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && isHover)}\"\r\n qms-tool-tip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\" mode=\"dark\" position=\"bottom\"\r\n qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && isHover\"\r\n qms-tool-tip=\"{{addNodeTooltip}}\" (click)=\"addNewNode(node.id, $event)\" mode=\"dark\" position=\"bottom\" qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" (mouseover)=\"onOver(node)\" matTreeNodePadding\r\n matTreeNodePaddingIndent=\"34\" cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\"\r\n (mouseleave)=\"dragHoverEnd()\" (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"\r\n {'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *cdkDragPreview class=\"node-preview-item\">{{ node.name }}</div>\r\n <div *ngIf=\"!node.isReadOnly\" class=\"tree-content\"\r\n (keydown)=\"onKeyDownNode($event, node)\">\r\n <button matTreeNodeToggle (click)=\"onClickNode(node, false)\" tabindex=\"-1\" class=\"button-icon collapse-expand-icon\" qms-btn-icon [attr.aria-label]=\"'toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror arrow-icon left-icon\">\r\n {{treeControl.isExpanded(node) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n </button>\r\n <div class=\"span-text\" matTreeNodeToggle (click)=\"onClickNode(node, true)\">{{ node.name }}</div>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\"\r\n qms-tool-tip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\" [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && isHover)}\"\r\n (mouseenter)=\"setHoverFavorite(node.id)\" (mouseleave)=\"setHoverFavorite(null)\" mode=\"dark\" position=\"below\"\r\n qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && isHover\"\r\n qms-tool-tip=\"{{addNodeTooltip}}\" mode=\"dark\" position=\"bottom\" (click)=\"addNewNode(node.id, $event)\" qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n</mat-tree>\r\n",
|
331
|
-
styles: ["::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node{min-width:272px!important;height:48px!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node{min-height:34px;margin:16px 0
|
330
|
+
template: "\r\n<mat-tree class=\"qms-navigation-drawer-container\" [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\" [cdkDropListDisabled]=\"dragDropListDisabled\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node [class.pr-34]=\"showAddIcon\" *matTreeNodeDef=\"let node\" (mouseover)=\"onOver(node)\" matTreeNodePadding matTreeNodePaddingIndent=\"34\"\r\n cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\" (mouseleave)=\"dragHoverEnd()\"\r\n (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"{'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *cdkDragPreview class=\"node-preview-item\">{{ node.name }}</div>\r\n <div *ngIf=\"!node.isReadOnly\" (click)=\"onClickNode(node, true)\" class=\"tree-content\">\r\n <button tabindex=\"-1\" qms-btn-outlined disabled class=\"border-0 bg-transparent\">\r\n <img class=\"img-icon\" [src]=\"faIconPath\" alt=\"\" />\r\n </button>\r\n <div class=\"span-text\">{{ node.name }}</div>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\" (mouseenter)=\"setHoverFavorite(node.id)\"\r\n (mouseleave)=\"setHoverFavorite(null)\" [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && isHover)}\"\r\n qms-tool-tip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\" mode=\"dark\" position=\"bottom\"\r\n qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && showAddIcon && isHover\"\r\n qms-tool-tip=\"{{addNodeTooltip}}\" (click)=\"addNewNode(node.id, $event)\" mode=\"dark\" position=\"bottom\" qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node [class.pr-34]=\"showAddIcon\" *matTreeNodeDef=\"let node;when: hasChild\" (mouseover)=\"onOver(node)\" matTreeNodePadding\r\n matTreeNodePaddingIndent=\"34\" cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\"\r\n (mouseleave)=\"dragHoverEnd()\" (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"\r\n {'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *cdkDragPreview class=\"node-preview-item\">{{ node.name }}</div>\r\n <div *ngIf=\"!node.isReadOnly\" class=\"tree-content\"\r\n (keydown)=\"onKeyDownNode($event, node)\">\r\n <button matTreeNodeToggle (click)=\"onClickNode(node, false)\" tabindex=\"-1\" class=\"button-icon collapse-expand-icon\" qms-btn-icon [attr.aria-label]=\"'toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror arrow-icon left-icon\">\r\n {{treeControl.isExpanded(node) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n </button>\r\n <div class=\"span-text\" matTreeNodeToggle (click)=\"onClickNode(node, true)\">{{ node.name }}</div>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\"\r\n qms-tool-tip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\" [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && isHover)}\"\r\n (mouseenter)=\"setHoverFavorite(node.id)\" (mouseleave)=\"setHoverFavorite(null)\" mode=\"dark\" position=\"below\"\r\n qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && showAddIcon && isHover\"\r\n qms-tool-tip=\"{{addNodeTooltip}}\" mode=\"dark\" position=\"bottom\" (click)=\"addNewNode(node.id, $event)\" qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n</mat-tree>\r\n",
|
331
|
+
styles: ["::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node{min-width:272px!important;height:48px!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node{min-height:34px;margin:16px 0}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.active{background-color:#f2f7fd;color:#1954a9!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.active img{filter:opacity(.5) drop-shadow(0 0 0 #1954A9)}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.active:hover{background-color:#e5eefb!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content{width:100%;position:relative;cursor:pointer;align-items:center}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .arrow-icon{color:#00324e}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .collapse-expand-icon{color:#3e57b7}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .collapse-expand-icon:hover{background:rgba(0,0,0,.08)}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .add-icon:hover{background:rgba(0,0,0,.08)}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .left-icon{color:#919191}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node{padding-left:0;position:static;height:32px;left:calc(50% - 216px/2);top:0;font-family:Open Sans;font-style:normal;font-weight:400;font-size:14px;line-height:19px;display:flex;align-items:center;color:#1954a9;flex:none;order:0;align-self:stretch;flex-grow:1}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node ::ng-deep mat-icon{color:#1954a9}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node:hover{background-color:#e5eefb!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.collapse-node{position:static;height:32px;left:calc(50% - 176px/2);top:0;font-family:Open Sans;font-style:normal;font-weight:400;font-size:14px;line-height:19px;display:flex;align-items:center;color:#323232;flex:none;order:0;align-self:stretch;flex-grow:1}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content{display:flex}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .button-icon{width:40px;height:40px;line-height:30px!important;border-radius:50%}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .button-icon:hover{border-radius:50%}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .img-icon{max-height:25px;max-width:25px}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .add-icon{position:absolute;right:-34px}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .add-icon mat-icon{top:3px;right:3px;border-radius:50%;color:rgba(0,0,0,.6)}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .favorite{color:#b13514!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .not-favorite{color:rgba(0,0,0,.6)!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .btn-favorite{right:6px;color:unset}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .space-icon{position:absolute;top:-5px;left:0}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .span-text{position:relative;overflow:hidden;text-overflow:ellipsis;padding-left:7px;max-width:calc(100% - 56px);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .span-text:after{content:\"\";display:block;clear:both}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node:first-child{margin:0}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.collapse-node:hover{background:#00000014}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.collapse-node:active{background:#0000001f}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node:active{background:#f2f7fd}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node:hover .span-text{max-width:calc(100% - 96px)}::ng-deep mat-tree.qms-navigation-drawer-container .pr-34{padding-right:34px}.node-preview-item{display:flex;background-color:#0000001f;min-width:272px!important;height:48px!important;margin:0 auto;align-items:center;padding:0 16px}"]
|
332
332
|
},] }
|
333
333
|
];
|
334
334
|
QMSNavigationDrawerComponent.ctorParameters = () => [];
|
@@ -351,4 +351,4 @@ QMSNavigationDrawerComponent.propDecorators = {
|
|
351
351
|
addNodeTooltip: [{ type: Input }],
|
352
352
|
activeNode: [{ type: Input }]
|
353
353
|
};
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9xbXMtbmF2aWdhdGlvbi1kcmF3ZXIvcW1zLW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpGLE9BQU8sVUFBVSxNQUFNLHdEQUF3RCxDQUFDO0FBUWhGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdkM7UUFHUyxhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUc5QixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hELHFCQUFnQixHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHcEQscUJBQWdCLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsdUJBQWtCLEdBQVcsbUJBQW1CLENBQUM7UUFDakQsMEJBQXFCLEdBQVcsZ0JBQWdCLENBQUM7UUFDakQsbUJBQWMsR0FBVyxtQkFBbUIsQ0FBQztRQUM3QyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBRWpDLG9CQUFlLEdBQUcsSUFBSSxHQUFH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QUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFjO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7OztZQWxYRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMseTdKQUFxRDs7YUFFdEQ7Ozs7dUJBTUUsS0FBSzsrQkFDTCxLQUFLOzJCQUNMLEtBQUs7MkJBQ0wsTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07MEJBQ04sS0FBSzt3QkFDTCxLQUFLO21DQUNMLEtBQUs7MEJBQ0wsTUFBTTt5QkFDTixLQUFLO3lCQUNMLEtBQUs7K0JBQ0wsTUFBTTtpQ0FDTixLQUFLO29DQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBndWlkSGVscGVyIGZyb20gJy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlcic7XHJcbmltcG9ydCB7IEZsYXROb2RlLCBUcmVlTm9kZSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1uYXZpZ2F0aW9uLWRyYXdlci5tb2RlbCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXFtcy1uYXZpZ2F0aW9uLWRyYXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1uYXZpZ2F0aW9uLWRyYXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcW1zLW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBRTVNOYXZpZ2F0aW9uRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudHJlZURhdGE7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHRyZWVEYXRhOiBBcnJheTxUcmVlTm9kZT4gPSBbXTtcclxuICBASW5wdXQoKSBzaG93RmF2b3JpdGVJY29uOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZhdm9yaXRlTW9kZTogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgYWRkTm9kZUV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWRkRmF2b3JpdGVFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRyb2dMb2NhdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBzaG93QWRkSWNvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgb3Blbk5vZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRyYWdEcm9wTGlzdERpc2FibGVkID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIG5vZGVzRXhwYW5kOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBmaWx0ZXJUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmFJY29uUGF0aDogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrTm9kZUV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBhZGRGYXZvcml0ZVRvb2x0aXA6IHN0cmluZyA9ICdMZWdnIHRpbCBmYXZvcml0dCc7XHJcbiAgQElucHV0KCkgZGVsZXRlRmF2b3JpdGVUb29sdGlwOiBzdHJpbmcgPSAnU2xldHQgZmF2b3JpdHQnO1xyXG4gIEBJbnB1dCgpIGFkZE5vZGVUb29sdGlwOiBzdHJpbmcgPSAnTGVnZyB0aWwgbG9rYXNqb24nO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICcnO1xyXG4gIGFjdGl2ZU5vZGVMb2NhdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGV4cGFuZGVkTm9kZVNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gIGRyYWdnaW5nID0gZmFsc2U7XHJcbiAgZXhwYW5kVGltZW91dDogYW55O1xyXG4gIGV4cGFuZERlbGF5ID0gMTAwMDtcclxuICBob3ZlckZhdm9yaXRlTm9kZUlkOiBzdHJpbmc7XHJcbiAgaXNIb3ZlciA9IGZhbHNlO1xyXG4gIHRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4obm9kZSA9PiBub2RlLmxldmVsLCBub2RlID0+IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgdHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCBub2RlID0+IG5vZGUubGV2ZWwsIG5vZGUgPT4gbm9kZS5leHBhbmRhYmxlLCBub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgaG92ZXJOb2RlOiBhbnkgPSB7fTtcclxuICBleHBhbmRpbmdOb2RlczogRmxhdE5vZGVbXSA9IFtdO1xyXG4gIFxyXG4gIF90cmFuc2Zvcm1lcihub2RlOiBUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXhwYW5kYWJsZTogISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCxcclxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICBsZXZlbCxcclxuICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgIGlzUmVhZE9ubHk6IG5vZGUuaXNSZWFkT25seSxcclxuICAgICAgZmF2b3JpdGU6IG5vZGUuZmF2b3JpdGUsXHJcbiAgICAgIGRpc2FibGVkOiBub2RlLmRpc2FibGVkXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9wZW5Ob2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHAgPT4gcC5pZC50b1N0cmluZygpID09PSBpdGVtKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogRmxhdE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnRyZWVEYXRhO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyVGV4dCkge1xyXG4gICAgICB0aGlzLmV4cGFuZE5vZGVTZWFyY2hlZCh0aGlzLnRyZWVEYXRhLCB0aGlzLmZpbHRlclRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLm9wZW5Ob2Rlcykge1xyXG4gICAgICB0aGlzLm9wZW5Ob2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQocCA9PiBwLmlkLnRvU3RyaW5nKCkgPT09IGl0ZW0pKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBhbmROb2RlU2VhcmNoZWQobm9kZXNPcmlnaW46IFRyZWVOb2RlW10sIHR4dFNlYXJjaDogc3RyaW5nKSB7XHJcbiAgICBub2Rlc09yaWdpbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHR4dFNlYXJjaC50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQocCA9PiBwLmlkLnRvU3RyaW5nKCkgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGFuZE5vZGVTZWFyY2hlZChpdGVtLmNoaWxkcmVuLCB0eHRTZWFyY2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrTm9kZShub2RlOiBUcmVlTm9kZSwgc2V0QWN0aXZlTm9kZT86IGJvb2xlYW4pIHtcclxuICAgIGlmIChzZXRBY3RpdmVOb2RlKXtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gbm9kZS5pZDtcclxuICAgICAgdGhpcy5vbkNsaWNrTm9kZUV2ZW50LmVtaXQobm9kZS5pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2xpY2tUb2dnbGVOb2RlKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25PdmVyKG5vZGU6IGFueSkge1xyXG4gICAgdGhpcy5ob3Zlck5vZGUgPSBub2RlO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3Tm9kZShub2RlSWQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5hZGROb2RlRXZlbnQuZW1pdChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgYWRkRmF2b3JpdGVOb2RlKG5vZGVJZDogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmFkZEZhdm9yaXRlRXZlbnQuZW1pdChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVOb2RlTG9jYXRpb24pIHtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlTG9jYXRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgY29uc3RydWN0cyBhbiBhcnJheSBvZiBub2RlcyB0aGF0IG1hdGNoZXMgdGhlIERPTSxcclxuICAgKiBhbmQgY2FsbHMgcmVtZW1iZXJFeHBhbmRlZFRyZWVOb2RlcyB0byBwZXJzaXN0IGV4cGFuZCBzdGF0ZVxyXG4gICAqL1xyXG4gIHZpc2libGVOb2RlcygpOiBUcmVlTm9kZVtdIHtcclxuICAgIHRoaXMucmVtZW1iZXJFeHBhbmRlZFRyZWVOb2Rlcyh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmV4cGFuZGVkTm9kZVNldCk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiBhZGRFeHBhbmRlZENoaWxkcmVuKG5vZGU6IFRyZWVOb2RlLCBleHBhbmRlZDogU2V0PHN0cmluZz4pIHtcclxuICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XHJcbiAgICAgIGlmIChleHBhbmRlZC5oYXMobm9kZS5pZCkpIHtcclxuICAgICAgICBub2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBhZGRFeHBhbmRlZENoaWxkcmVuKGNoaWxkLCBleHBhbmRlZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICBhZGRFeHBhbmRlZENoaWxkcmVuKG5vZGUsIHRoaXMuZXhwYW5kZWROb2RlU2V0KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgZHJvcCAtIGhlcmUgd2UgcmVhcnJhbmdlIHRoZSBkYXRhIGJhc2VkIG9uIHRoZSBkcm9wIGV2ZW50LFxyXG4gICAqIHRoZW4gcmVidWlsZCB0aGUgdHJlZS5cclxuICAgKiAqL1xyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xyXG4gICAgLy8gU2F2ZSBkYXRhIGZvciBiYWNrdXBcclxuICAgIGNvbnN0IG5vZGUgPSBldmVudC5pdGVtLmRhdGE7XHJcbiAgICBjb25zdCBiYWNrdXBDaGFuZ2VkTm9kZTogVHJlZU5vZGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGUpKTtcclxuICAgIGNvbnN0IGJhY2t1cERhdGE6IFRyZWVOb2RlW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZS5kYXRhKSk7XHJcblxyXG4gICAgLy8gaWdub3JlIGRyb3BzIG91dHNpZGUgb2YgdGhlIHRyZWVcclxuICAgIGlmICghZXZlbnQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcikgeyByZXR1cm47IH1cclxuXHJcbiAgICAvLyBjb25zdHJ1Y3QgYSBsaXN0IG9mIHZpc2libGUgbm9kZXMsIHRoaXMgd2lsbCBtYXRjaCB0aGUgRE9NLlxyXG4gICAgLy8gdGhlIGNka0RyYWdEcm9wIGV2ZW50LmN1cnJlbnRJbmRleCBqaXZlcyB3aXRoIHZpc2libGUgbm9kZXMuXHJcbiAgICAvLyBpdCBjYWxscyByZW1lbWJlckV4cGFuZGVkVHJlZU5vZGVzIHRvIHBlcnNpc3QgZXhwYW5kIHN0YXRlXHJcbiAgICBjb25zdCB2aXNpYmxlTm9kZXMgPSB0aGlzLnZpc2libGVOb2RlcygpO1xyXG5cclxuICAgIC8vIGRlZXAgY2xvbmUgdGhlIGRhdGEgc291cmNlIHNvIHdlIGNhbiBtdXRhdGUgaXRcclxuICAgIGNvbnN0IGNoYW5nZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2UuZGF0YSkpO1xyXG5cclxuICAgIC8vIHJlY3Vyc2l2ZSBmaW5kIGZ1bmN0aW9uIHRvIGZpbmQgc2libGluZ3Mgb2Ygbm9kZVxyXG4gICAgZnVuY3Rpb24gZmluZE5vZGVTaWJsaW5ncyhhcnI6IEFycmF5PGFueT4sIGlkOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcclxuICAgICAgbGV0IHJlc3VsdCwgc3ViUmVzdWx0O1xyXG4gICAgICBhcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGFycjtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgIHN1YlJlc3VsdCA9IGZpbmROb2RlU2libGluZ3MoaXRlbS5jaGlsZHJlbiwgaWQpO1xyXG4gICAgICAgICAgaWYgKHN1YlJlc3VsdCkgeyByZXN1bHQgPSBzdWJSZXN1bHQ7IH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGl0cyBvbGQgcGxhY2VcclxuICAgIGNvbnN0IHNpYmxpbmdzID0gZmluZE5vZGVTaWJsaW5ncyhjaGFuZ2VkRGF0YSwgbm9kZS5pZCk7XHJcbiAgICBjb25zdCBzaWJsaW5nSW5kZXggPSBzaWJsaW5ncy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBub2RlLmlkKTtcclxuICAgIC8vIGNvbnN0IG5vZGVUb0luc2VydDogVHJlZU5vZGUgPSBzaWJsaW5ncy5zcGxpY2Uoc2libGluZ0luZGV4LCAxKVswXTtcclxuICAgIGNvbnN0IG5vZGVUb0luc2VydCA9IHNpYmxpbmdzLnNwbGljZShzaWJsaW5nSW5kZXgsIDEpWzBdO1xyXG4gICAgLy8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydCB0aGUgbm9kZVxyXG4gICAgY29uc3Qgbm9kZUF0RGVzdCA9IHZpc2libGVOb2Rlc1tldmVudC5jdXJyZW50SW5kZXhdO1xyXG4gICAgaWYgKG5vZGVBdERlc3QuaWQgPT09IG5vZGVUb0luc2VydC5pZCkgeyByZXR1cm47IH1cclxuXHJcbiAgICAvLyBkZXRlcm1pbmUgZHJvcCBpbmRleCByZWxhdGl2ZSB0byBkZXN0aW5hdGlvbiBhcnJheVxyXG4gICAgbGV0IHJlbGF0aXZlSW5kZXggPSBldmVudC5jdXJyZW50SW5kZXg7IC8vIGRlZmF1bHQgaWYgbm8gcGFyZW50XHJcbiAgICBjb25zdCBub2RlQXREZXN0RmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG4gPT4gbm9kZUF0RGVzdC5pZCA9PT0gbi5pZCk7XHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZUF0RGVzdEZsYXROb2RlKTtcclxuXHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gdmlzaWJsZU5vZGVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IHBhcmVudC5pZCkgKyAxO1xyXG4gICAgICByZWxhdGl2ZUluZGV4ID0gZXZlbnQuY3VycmVudEluZGV4IC0gcGFyZW50SW5kZXg7XHJcbiAgICAgIC8vIHVwZGF0ZSBwYXJlbnRJZCBmb3Igbm9kZVRvSW5zZXJ0XHJcbiAgICAgIG5vZGVUb0luc2VydC5wYXJlbnRJZCA9IHBhcmVudC5pZDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBub2RlVG9JbnNlcnQucGFyZW50SWQgPSBndWlkSGVscGVyLmVtcHR5O1xyXG4gICAgfVxyXG4gICAgLy8gdXBkYXRlIG5ldyBvcmRlciBmb3Igbm9kZVRvSW5zZXJ0XHJcbiAgICBub2RlVG9JbnNlcnQub3JkZXIgPSByZWxhdGl2ZUluZGV4O1xyXG4gICAgLy8gaW5zZXJ0IG5vZGVcclxuICAgIGNvbnN0IG5ld1NpYmxpbmdzID0gZmluZE5vZGVTaWJsaW5ncyhjaGFuZ2VkRGF0YSwgbm9kZUF0RGVzdC5pZCk7XHJcbiAgICBpZiAoIW5ld1NpYmxpbmdzKSB7IHJldHVybjsgfVxyXG4gICAgbmV3U2libGluZ3Muc3BsaWNlKHJlbGF0aXZlSW5kZXgsIDAsIG5vZGVUb0luc2VydCk7XHJcblxyXG4gICAgLy8gcmVidWlsZCB0cmVlIHdpdGggbXV0YXRlZCBkYXRhXHJcbiAgICB0aGlzLnJlYnVpbGRUcmVlRm9yRGF0YShjaGFuZ2VkRGF0YSk7XHJcblxyXG4gICAgLy8gdXBkYXRlIE5ldyBMb2NhdGlvbiBPcmRlciBmb3IgbmV3IGluc2VydCBub2RlXHJcbiAgICB0aGlzLnVwZGF0ZU5ld09yZGVyRm9yTm9kZVNpYmxpbmdzKG5ld1NpYmxpbmdzKTtcclxuXHJcbiAgICB0aGlzLmRyb2dMb2NhdGlvbkV2ZW50LmVtaXQoe1xyXG4gICAgICBuZXdTaWJsaW5nczogbmV3U2libGluZ3MsXHJcbiAgICAgIGNoYW5nZWROb2RlOiBiYWNrdXBDaGFuZ2VkTm9kZSxcclxuICAgICAgb2xkRGF0YVNvdXJjZTogYmFja3VwRGF0YVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5ld09yZGVyRm9yTm9kZVNpYmxpbmdzKG5ld1NpYmxpbmdzOiBhbnlbXSkge1xyXG4gICAgbGV0IG5ld09yZGVyID0gMDtcclxuICAgIG5ld1NpYmxpbmdzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGl0ZW0ub3JkZXIgPSBuZXdPcmRlcjtcclxuICAgICAgbmV3T3JkZXIgPSBuZXdPcmRlciArIDE7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIC0gb3BlbmluZyB0cmVlIG5vZGVzIGFzIHlvdSBkcmFnIG92ZXIgdGhlbVxyXG4gICovXHJcbiAgZHJhZ1N0YXJ0KCkge1xyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcbiAgfVxyXG4gIGRyYWdFbmQoKSB7XHJcbiAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgfVxyXG4gIGRyYWdIb3Zlcihub2RlOiBGbGF0Tm9kZSkge1xyXG4gICAgdGhpcy5pc0hvdmVyID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV4cGFuZFRpbWVvdXQpO1xyXG4gICAgICB0aGlzLmV4cGFuZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICAgICAgfSwgdGhpcy5leHBhbmREZWxheSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyYWdIb3ZlckVuZCgpIHtcclxuICAgIHRoaXMuaXNIb3ZlciA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhwYW5kVGltZW91dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZvciBwZXJzaXN0aW5nIHRoZSB0cmVlIGV4cGFuZCBzdGF0ZVxyXG4gICAqIGFmdGVyIGJlaW5nIHJlYnVpbHRcclxuICAgKi9cclxuXHJcbiAgcmVidWlsZFRyZWVGb3JEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yZW1lbWJlckV4cGFuZGVkVHJlZU5vZGVzKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMuZXhwYW5kZWROb2RlU2V0KTtcclxuICAgIHRoaXMudHJlZURhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5mb3JnZXRNaXNzaW5nRXhwYW5kZWROb2Rlcyh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmV4cGFuZGVkTm9kZVNldCk7XHJcbiAgICB0aGlzLmV4cGFuZE5vZGVzQnlJZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcywgQXJyYXkuZnJvbSh0aGlzLmV4cGFuZGVkTm9kZVNldCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1lbWJlckV4cGFuZGVkVHJlZU5vZGVzKFxyXG4gICAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4sXHJcbiAgICBleHBhbmRlZE5vZGVTZXQ6IFNldDxzdHJpbmc+XHJcbiAgKSB7XHJcbiAgICBpZiAodHJlZUNvbnRyb2wuZGF0YU5vZGVzKSB7XHJcbiAgICAgIHRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRyZWVDb250cm9sLmlzRXhwYW5kYWJsZShub2RlKSAmJiB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgICAgICAvLyBjYXB0dXJlIGxhdGVzdCBleHBhbmRlZCBzdGF0ZVxyXG4gICAgICAgICAgZXhwYW5kZWROb2RlU2V0LmFkZChub2RlLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcmdldE1pc3NpbmdFeHBhbmRlZE5vZGVzKFxyXG4gICAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4sXHJcbiAgICBleHBhbmRlZE5vZGVTZXQ6IFNldDxzdHJpbmc+XHJcbiAgKSB7XHJcbiAgICBpZiAodHJlZUNvbnRyb2wuZGF0YU5vZGVzKSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZVNldC5mb3JFYWNoKChub2RlSWQpID0+IHtcclxuICAgICAgICAvLyBtYWludGFpbiBleHBhbmRlZCBub2RlIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCgobikgPT4gbi5pZC50b1N0cmluZygpID09PSBub2RlSWQpKSB7XHJcbiAgICAgICAgICAvLyBpZiB0aGUgdHJlZSBkb2Vzbid0IGhhdmUgdGhlIHByZXZpb3VzIG5vZGUsIHJlbW92ZSBpdCBmcm9tIHRoZSBleHBhbmRlZCBsaXN0XHJcbiAgICAgICAgICBleHBhbmRlZE5vZGVTZXQuZGVsZXRlKG5vZGVJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kTm9kZXNCeUlkKGZsYXROb2RlczogRmxhdE5vZGVbXSwgaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgaWYgKCFmbGF0Tm9kZXMgfHwgZmxhdE5vZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cclxuICAgIGNvbnN0IGlkU2V0ID0gbmV3IFNldChpZHMpO1xyXG4gICAgcmV0dXJuIGZsYXROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChpZFNldC5oYXMobm9kZS5pZC50b1N0cmluZygpKSkge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKG5vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICAgICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQocGFyZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLnB1c2gocGFyZW50KTtcclxuXHJcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnROb2RlKG5vZGU6IEZsYXROb2RlKTogRmxhdE5vZGUgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IG5vZGUubGV2ZWw7XHJcbiAgICBpZiAoY3VycmVudExldmVsIDwgMSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xyXG4gICAgICBpZiAoY3VycmVudE5vZGUubGV2ZWwgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25LZXlEb3duTm9kZShldmVudDogYW55LCBub2RlKSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09ICdFbnRlcicpIHtcclxuICAgICAgdGhpcy5vbkNsaWNrVG9nZ2xlTm9kZShub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tUb2dnbGVOb2RlKG5vZGUpIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XHJcbiAgICAgIHRoaXMuX2FkZEV4cGFuZGluZ05vZGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKG5vZGUpO1xyXG4gICAgICB0aGlzLl9yZW1vdmVFeHBhbmRpbmdOb2Rlcyhub2RlLmlkKTtcclxuICAgIH1cclxuICAgIHRoaXMubm9kZXNFeHBhbmQuZW1pdCh7IG5vZGUsIGlzRXhwYW5kOiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRIb3ZlckZhdm9yaXRlKGlkKSB7XHJcbiAgICB0aGlzLmhvdmVyRmF2b3JpdGVOb2RlSWQgPSBpZDtcclxuICB9XHJcblxyXG4gIGV4cGFuZE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXhwYW5kTm9kZXNMb29wKHRoaXMudHJlZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwYW5kTm9kZXNMb29wKGRhdGE6IFRyZWVOb2RlW10pOiB2b2lkIHtcclxuICAgIGRhdGEuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgY29uc3QgZXhwYW5kaW5nTm9kZSA9IHRoaXMuZXhwYW5kaW5nTm9kZXMuc29tZSh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgICBpZiAoZXhwYW5kaW5nTm9kZSkge1xyXG4gICAgICAgIHRoaXMub25DbGlja1RvZ2dsZU5vZGUoZXhwYW5kaW5nTm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgdGhpcy5fZXhwYW5kTm9kZXNMb29wKGl0ZW0uY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEV4cGFuZGluZ05vZGUobm9kZTogRmxhdE5vZGUpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5leHBhbmRpbmdOb2Rlcy5zb21lKHggPT4geC5pZCA9PT0gbm9kZS5pZCkpIHtcclxuICAgICAgdGhpcy5leHBhbmRpbmdOb2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlRXhwYW5kaW5nTm9kZXMobm9kZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kaW5nTm9kZXMgPSB0aGlzLmV4cGFuZGluZ05vZGVzLmZpbHRlcih4ID0+IHguaWQgIT09IG5vZGVJZCk7XHJcbiAgfVxyXG59Il19
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9xbXMtbmF2aWdhdGlvbi1kcmF3ZXIvcW1zLW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpGLE9BQU8sVUFBVSxNQUFNLHdEQUF3RCxDQUFDO0FBUWhGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdkM7UUFHUyxhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUc5QixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hELHFCQUFnQixHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHcEQscUJBQWdCLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsdUJBQWtCLEdBQVcsbUJBQW1CLENBQUM7UUFDakQsMEJBQXFCLEdBQVcsZ0JBQWdCLENBQUM7UUFDakQsbUJBQWMsR0FBVyxtQkFBbUIsQ0FBQztRQUM3QyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBRWpDLG9CQUFlLEdBQUcsSUFBSSxHQUFH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QUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFjO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7OztZQWxYRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMsbWhLQUFxRDs7YUFFdEQ7Ozs7dUJBTUUsS0FBSzsrQkFDTCxLQUFLOzJCQUNMLEtBQUs7MkJBQ0wsTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07MEJBQ04sS0FBSzt3QkFDTCxLQUFLO21DQUNMLEtBQUs7MEJBQ0wsTUFBTTt5QkFDTixLQUFLO3lCQUNMLEtBQUs7K0JBQ0wsTUFBTTtpQ0FDTixLQUFLO29DQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBndWlkSGVscGVyIGZyb20gJy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlcic7XHJcbmltcG9ydCB7IEZsYXROb2RlLCBUcmVlTm9kZSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1uYXZpZ2F0aW9uLWRyYXdlci5tb2RlbCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXFtcy1uYXZpZ2F0aW9uLWRyYXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1uYXZpZ2F0aW9uLWRyYXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcW1zLW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBRTVNOYXZpZ2F0aW9uRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudHJlZURhdGE7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHRyZWVEYXRhOiBBcnJheTxUcmVlTm9kZT4gPSBbXTtcclxuICBASW5wdXQoKSBzaG93RmF2b3JpdGVJY29uOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZhdm9yaXRlTW9kZTogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgYWRkTm9kZUV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWRkRmF2b3JpdGVFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRyb2dMb2NhdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBzaG93QWRkSWNvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgb3Blbk5vZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRyYWdEcm9wTGlzdERpc2FibGVkID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIG5vZGVzRXhwYW5kOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBmaWx0ZXJUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmFJY29uUGF0aDogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrTm9kZUV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBhZGRGYXZvcml0ZVRvb2x0aXA6IHN0cmluZyA9ICdMZWdnIHRpbCBmYXZvcml0dCc7XHJcbiAgQElucHV0KCkgZGVsZXRlRmF2b3JpdGVUb29sdGlwOiBzdHJpbmcgPSAnU2xldHQgZmF2b3JpdHQnO1xyXG4gIEBJbnB1dCgpIGFkZE5vZGVUb29sdGlwOiBzdHJpbmcgPSAnTGVnZyB0aWwgbG9rYXNqb24nO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICcnO1xyXG4gIGFjdGl2ZU5vZGVMb2NhdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGV4cGFuZGVkTm9kZVNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gIGRyYWdnaW5nID0gZmFsc2U7XHJcbiAgZXhwYW5kVGltZW91dDogYW55O1xyXG4gIGV4cGFuZERlbGF5ID0gMTAwMDtcclxuICBob3ZlckZhdm9yaXRlTm9kZUlkOiBzdHJpbmc7XHJcbiAgaXNIb3ZlciA9IGZhbHNlO1xyXG4gIHRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4obm9kZSA9PiBub2RlLmxldmVsLCBub2RlID0+IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgdHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCBub2RlID0+IG5vZGUubGV2ZWwsIG5vZGUgPT4gbm9kZS5leHBhbmRhYmxlLCBub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgaG92ZXJOb2RlOiBhbnkgPSB7fTtcclxuICBleHBhbmRpbmdOb2RlczogRmxhdE5vZGVbXSA9IFtdO1xyXG4gIFxyXG4gIF90cmFuc2Zvcm1lcihub2RlOiBUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXhwYW5kYWJsZTogISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCxcclxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICBsZXZlbCxcclxuICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgIGlzUmVhZE9ubHk6IG5vZGUuaXNSZWFkT25seSxcclxuICAgICAgZmF2b3JpdGU6IG5vZGUuZmF2b3JpdGUsXHJcbiAgICAgIGRpc2FibGVkOiBub2RlLmRpc2FibGVkXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9wZW5Ob2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHAgPT4gcC5pZC50b1N0cmluZygpID09PSBpdGVtKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogRmxhdE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnRyZWVEYXRhO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyVGV4dCkge1xyXG4gICAgICB0aGlzLmV4cGFuZE5vZGVTZWFyY2hlZCh0aGlzLnRyZWVEYXRhLCB0aGlzLmZpbHRlclRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLm9wZW5Ob2Rlcykge1xyXG4gICAgICB0aGlzLm9wZW5Ob2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQocCA9PiBwLmlkLnRvU3RyaW5nKCkgPT09IGl0ZW0pKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBhbmROb2RlU2VhcmNoZWQobm9kZXNPcmlnaW46IFRyZWVOb2RlW10sIHR4dFNlYXJjaDogc3RyaW5nKSB7XHJcbiAgICBub2Rlc09yaWdpbi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHR4dFNlYXJjaC50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQocCA9PiBwLmlkLnRvU3RyaW5nKCkgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGFuZE5vZGVTZWFyY2hlZChpdGVtLmNoaWxkcmVuLCB0eHRTZWFyY2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrTm9kZShub2RlOiBUcmVlTm9kZSwgc2V0QWN0aXZlTm9kZT86IGJvb2xlYW4pIHtcclxuICAgIGlmIChzZXRBY3RpdmVOb2RlKXtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gbm9kZS5pZDtcclxuICAgICAgdGhpcy5vbkNsaWNrTm9kZUV2ZW50LmVtaXQobm9kZS5pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2xpY2tUb2dnbGVOb2RlKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25PdmVyKG5vZGU6IGFueSkge1xyXG4gICAgdGhpcy5ob3Zlck5vZGUgPSBub2RlO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3Tm9kZShub2RlSWQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5hZGROb2RlRXZlbnQuZW1pdChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgYWRkRmF2b3JpdGVOb2RlKG5vZGVJZDogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmFkZEZhdm9yaXRlRXZlbnQuZW1pdChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVOb2RlTG9jYXRpb24pIHtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlTG9jYXRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgY29uc3RydWN0cyBhbiBhcnJheSBvZiBub2RlcyB0aGF0IG1hdGNoZXMgdGhlIERPTSxcclxuICAgKiBhbmQgY2FsbHMgcmVtZW1iZXJFeHBhbmRlZFRyZWVOb2RlcyB0byBwZXJzaXN0IGV4cGFuZCBzdGF0ZVxyXG4gICAqL1xyXG4gIHZpc2libGVOb2RlcygpOiBUcmVlTm9kZVtdIHtcclxuICAgIHRoaXMucmVtZW1iZXJFeHBhbmRlZFRyZWVOb2Rlcyh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmV4cGFuZGVkTm9kZVNldCk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiBhZGRFeHBhbmRlZENoaWxkcmVuKG5vZGU6IFRyZWVOb2RlLCBleHBhbmRlZDogU2V0PHN0cmluZz4pIHtcclxuICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XHJcbiAgICAgIGlmIChleHBhbmRlZC5oYXMobm9kZS5pZCkpIHtcclxuICAgICAgICBub2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBhZGRFeHBhbmRlZENoaWxkcmVuKGNoaWxkLCBleHBhbmRlZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICBhZGRFeHBhbmRlZENoaWxkcmVuKG5vZGUsIHRoaXMuZXhwYW5kZWROb2RlU2V0KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgZHJvcCAtIGhlcmUgd2UgcmVhcnJhbmdlIHRoZSBkYXRhIGJhc2VkIG9uIHRoZSBkcm9wIGV2ZW50LFxyXG4gICAqIHRoZW4gcmVidWlsZCB0aGUgdHJlZS5cclxuICAgKiAqL1xyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xyXG4gICAgLy8gU2F2ZSBkYXRhIGZvciBiYWNrdXBcclxuICAgIGNvbnN0IG5vZGUgPSBldmVudC5pdGVtLmRhdGE7XHJcbiAgICBjb25zdCBiYWNrdXBDaGFuZ2VkTm9kZTogVHJlZU5vZGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGUpKTtcclxuICAgIGNvbnN0IGJhY2t1cERhdGE6IFRyZWVOb2RlW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZS5kYXRhKSk7XHJcblxyXG4gICAgLy8gaWdub3JlIGRyb3BzIG91dHNpZGUgb2YgdGhlIHRyZWVcclxuICAgIGlmICghZXZlbnQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcikgeyByZXR1cm47IH1cclxuXHJcbiAgICAvLyBjb25zdHJ1Y3QgYSBsaXN0IG9mIHZpc2libGUgbm9kZXMsIHRoaXMgd2lsbCBtYXRjaCB0aGUgRE9NLlxyXG4gICAgLy8gdGhlIGNka0RyYWdEcm9wIGV2ZW50LmN1cnJlbnRJbmRleCBqaXZlcyB3aXRoIHZpc2libGUgbm9kZXMuXHJcbiAgICAvLyBpdCBjYWxscyByZW1lbWJlckV4cGFuZGVkVHJlZU5vZGVzIHRvIHBlcnNpc3QgZXhwYW5kIHN0YXRlXHJcbiAgICBjb25zdCB2aXNpYmxlTm9kZXMgPSB0aGlzLnZpc2libGVOb2RlcygpO1xyXG5cclxuICAgIC8vIGRlZXAgY2xvbmUgdGhlIGRhdGEgc291cmNlIHNvIHdlIGNhbiBtdXRhdGUgaXRcclxuICAgIGNvbnN0IGNoYW5nZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2UuZGF0YSkpO1xyXG5cclxuICAgIC8vIHJlY3Vyc2l2ZSBmaW5kIGZ1bmN0aW9uIHRvIGZpbmQgc2libGluZ3Mgb2Ygbm9kZVxyXG4gICAgZnVuY3Rpb24gZmluZE5vZGVTaWJsaW5ncyhhcnI6IEFycmF5PGFueT4sIGlkOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcclxuICAgICAgbGV0IHJlc3VsdCwgc3ViUmVzdWx0O1xyXG4gICAgICBhcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGFycjtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgIHN1YlJlc3VsdCA9IGZpbmROb2RlU2libGluZ3MoaXRlbS5jaGlsZHJlbiwgaWQpO1xyXG4gICAgICAgICAgaWYgKHN1YlJlc3VsdCkgeyByZXN1bHQgPSBzdWJSZXN1bHQ7IH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGl0cyBvbGQgcGxhY2VcclxuICAgIGNvbnN0IHNpYmxpbmdzID0gZmluZE5vZGVTaWJsaW5ncyhjaGFuZ2VkRGF0YSwgbm9kZS5pZCk7XHJcbiAgICBjb25zdCBzaWJsaW5nSW5kZXggPSBzaWJsaW5ncy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBub2RlLmlkKTtcclxuICAgIC8vIGNvbnN0IG5vZGVUb0luc2VydDogVHJlZU5vZGUgPSBzaWJsaW5ncy5zcGxpY2Uoc2libGluZ0luZGV4LCAxKVswXTtcclxuICAgIGNvbnN0IG5vZGVUb0luc2VydCA9IHNpYmxpbmdzLnNwbGljZShzaWJsaW5nSW5kZXgsIDEpWzBdO1xyXG4gICAgLy8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydCB0aGUgbm9kZVxyXG4gICAgY29uc3Qgbm9kZUF0RGVzdCA9IHZpc2libGVOb2Rlc1tldmVudC5jdXJyZW50SW5kZXhdO1xyXG4gICAgaWYgKG5vZGVBdERlc3QuaWQgPT09IG5vZGVUb0luc2VydC5pZCkgeyByZXR1cm47IH1cclxuXHJcbiAgICAvLyBkZXRlcm1pbmUgZHJvcCBpbmRleCByZWxhdGl2ZSB0byBkZXN0aW5hdGlvbiBhcnJheVxyXG4gICAgbGV0IHJlbGF0aXZlSW5kZXggPSBldmVudC5jdXJyZW50SW5kZXg7IC8vIGRlZmF1bHQgaWYgbm8gcGFyZW50XHJcbiAgICBjb25zdCBub2RlQXREZXN0RmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG4gPT4gbm9kZUF0RGVzdC5pZCA9PT0gbi5pZCk7XHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZUF0RGVzdEZsYXROb2RlKTtcclxuXHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gdmlzaWJsZU5vZGVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IHBhcmVudC5pZCkgKyAxO1xyXG4gICAgICByZWxhdGl2ZUluZGV4ID0gZXZlbnQuY3VycmVudEluZGV4IC0gcGFyZW50SW5kZXg7XHJcbiAgICAgIC8vIHVwZGF0ZSBwYXJlbnRJZCBmb3Igbm9kZVRvSW5zZXJ0XHJcbiAgICAgIG5vZGVUb0luc2VydC5wYXJlbnRJZCA9IHBhcmVudC5pZDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBub2RlVG9JbnNlcnQucGFyZW50SWQgPSBndWlkSGVscGVyLmVtcHR5O1xyXG4gICAgfVxyXG4gICAgLy8gdXBkYXRlIG5ldyBvcmRlciBmb3Igbm9kZVRvSW5zZXJ0XHJcbiAgICBub2RlVG9JbnNlcnQub3JkZXIgPSByZWxhdGl2ZUluZGV4O1xyXG4gICAgLy8gaW5zZXJ0IG5vZGVcclxuICAgIGNvbnN0IG5ld1NpYmxpbmdzID0gZmluZE5vZGVTaWJsaW5ncyhjaGFuZ2VkRGF0YSwgbm9kZUF0RGVzdC5pZCk7XHJcbiAgICBpZiAoIW5ld1NpYmxpbmdzKSB7IHJldHVybjsgfVxyXG4gICAgbmV3U2libGluZ3Muc3BsaWNlKHJlbGF0aXZlSW5kZXgsIDAsIG5vZGVUb0luc2VydCk7XHJcblxyXG4gICAgLy8gcmVidWlsZCB0cmVlIHdpdGggbXV0YXRlZCBkYXRhXHJcbiAgICB0aGlzLnJlYnVpbGRUcmVlRm9yRGF0YShjaGFuZ2VkRGF0YSk7XHJcblxyXG4gICAgLy8gdXBkYXRlIE5ldyBMb2NhdGlvbiBPcmRlciBmb3IgbmV3IGluc2VydCBub2RlXHJcbiAgICB0aGlzLnVwZGF0ZU5ld09yZGVyRm9yTm9kZVNpYmxpbmdzKG5ld1NpYmxpbmdzKTtcclxuXHJcbiAgICB0aGlzLmRyb2dMb2NhdGlvbkV2ZW50LmVtaXQoe1xyXG4gICAgICBuZXdTaWJsaW5nczogbmV3U2libGluZ3MsXHJcbiAgICAgIGNoYW5nZWROb2RlOiBiYWNrdXBDaGFuZ2VkTm9kZSxcclxuICAgICAgb2xkRGF0YVNvdXJjZTogYmFja3VwRGF0YVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5ld09yZGVyRm9yTm9kZVNpYmxpbmdzKG5ld1NpYmxpbmdzOiBhbnlbXSkge1xyXG4gICAgbGV0IG5ld09yZGVyID0gMDtcclxuICAgIG5ld1NpYmxpbmdzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGl0ZW0ub3JkZXIgPSBuZXdPcmRlcjtcclxuICAgICAgbmV3T3JkZXIgPSBuZXdPcmRlciArIDE7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIC0gb3BlbmluZyB0cmVlIG5vZGVzIGFzIHlvdSBkcmFnIG92ZXIgdGhlbVxyXG4gICovXHJcbiAgZHJhZ1N0YXJ0KCkge1xyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcbiAgfVxyXG4gIGRyYWdFbmQoKSB7XHJcbiAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgfVxyXG4gIGRyYWdIb3Zlcihub2RlOiBGbGF0Tm9kZSkge1xyXG4gICAgdGhpcy5pc0hvdmVyID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV4cGFuZFRpbWVvdXQpO1xyXG4gICAgICB0aGlzLmV4cGFuZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICAgICAgfSwgdGhpcy5leHBhbmREZWxheSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyYWdIb3ZlckVuZCgpIHtcclxuICAgIHRoaXMuaXNIb3ZlciA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhwYW5kVGltZW91dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZvciBwZXJzaXN0aW5nIHRoZSB0cmVlIGV4cGFuZCBzdGF0ZVxyXG4gICAqIGFmdGVyIGJlaW5nIHJlYnVpbHRcclxuICAgKi9cclxuXHJcbiAgcmVidWlsZFRyZWVGb3JEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yZW1lbWJlckV4cGFuZGVkVHJlZU5vZGVzKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMuZXhwYW5kZWROb2RlU2V0KTtcclxuICAgIHRoaXMudHJlZURhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5mb3JnZXRNaXNzaW5nRXhwYW5kZWROb2Rlcyh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmV4cGFuZGVkTm9kZVNldCk7XHJcbiAgICB0aGlzLmV4cGFuZE5vZGVzQnlJZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcywgQXJyYXkuZnJvbSh0aGlzLmV4cGFuZGVkTm9kZVNldCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1lbWJlckV4cGFuZGVkVHJlZU5vZGVzKFxyXG4gICAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4sXHJcbiAgICBleHBhbmRlZE5vZGVTZXQ6IFNldDxzdHJpbmc+XHJcbiAgKSB7XHJcbiAgICBpZiAodHJlZUNvbnRyb2wuZGF0YU5vZGVzKSB7XHJcbiAgICAgIHRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRyZWVDb250cm9sLmlzRXhwYW5kYWJsZShub2RlKSAmJiB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgICAgICAvLyBjYXB0dXJlIGxhdGVzdCBleHBhbmRlZCBzdGF0ZVxyXG4gICAgICAgICAgZXhwYW5kZWROb2RlU2V0LmFkZChub2RlLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcmdldE1pc3NpbmdFeHBhbmRlZE5vZGVzKFxyXG4gICAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4sXHJcbiAgICBleHBhbmRlZE5vZGVTZXQ6IFNldDxzdHJpbmc+XHJcbiAgKSB7XHJcbiAgICBpZiAodHJlZUNvbnRyb2wuZGF0YU5vZGVzKSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZVNldC5mb3JFYWNoKChub2RlSWQpID0+IHtcclxuICAgICAgICAvLyBtYWludGFpbiBleHBhbmRlZCBub2RlIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCgobikgPT4gbi5pZC50b1N0cmluZygpID09PSBub2RlSWQpKSB7XHJcbiAgICAgICAgICAvLyBpZiB0aGUgdHJlZSBkb2Vzbid0IGhhdmUgdGhlIHByZXZpb3VzIG5vZGUsIHJlbW92ZSBpdCBmcm9tIHRoZSBleHBhbmRlZCBsaXN0XHJcbiAgICAgICAgICBleHBhbmRlZE5vZGVTZXQuZGVsZXRlKG5vZGVJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kTm9kZXNCeUlkKGZsYXROb2RlczogRmxhdE5vZGVbXSwgaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgaWYgKCFmbGF0Tm9kZXMgfHwgZmxhdE5vZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cclxuICAgIGNvbnN0IGlkU2V0ID0gbmV3IFNldChpZHMpO1xyXG4gICAgcmV0dXJuIGZsYXROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChpZFNldC5oYXMobm9kZS5pZC50b1N0cmluZygpKSkge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKG5vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICAgICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQocGFyZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLnB1c2gocGFyZW50KTtcclxuXHJcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnROb2RlKG5vZGU6IEZsYXROb2RlKTogRmxhdE5vZGUgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IG5vZGUubGV2ZWw7XHJcbiAgICBpZiAoY3VycmVudExldmVsIDwgMSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xyXG4gICAgICBpZiAoY3VycmVudE5vZGUubGV2ZWwgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25LZXlEb3duTm9kZShldmVudDogYW55LCBub2RlKSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09ICdFbnRlcicpIHtcclxuICAgICAgdGhpcy5vbkNsaWNrVG9nZ2xlTm9kZShub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tUb2dnbGVOb2RlKG5vZGUpIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XHJcbiAgICAgIHRoaXMuX2FkZEV4cGFuZGluZ05vZGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKG5vZGUpO1xyXG4gICAgICB0aGlzLl9yZW1vdmVFeHBhbmRpbmdOb2Rlcyhub2RlLmlkKTtcclxuICAgIH1cclxuICAgIHRoaXMubm9kZXNFeHBhbmQuZW1pdCh7IG5vZGUsIGlzRXhwYW5kOiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRIb3ZlckZhdm9yaXRlKGlkKSB7XHJcbiAgICB0aGlzLmhvdmVyRmF2b3JpdGVOb2RlSWQgPSBpZDtcclxuICB9XHJcblxyXG4gIGV4cGFuZE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXhwYW5kTm9kZXNMb29wKHRoaXMudHJlZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwYW5kTm9kZXNMb29wKGRhdGE6IFRyZWVOb2RlW10pOiB2b2lkIHtcclxuICAgIGRhdGEuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgY29uc3QgZXhwYW5kaW5nTm9kZSA9IHRoaXMuZXhwYW5kaW5nTm9kZXMuc29tZSh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgICBpZiAoZXhwYW5kaW5nTm9kZSkge1xyXG4gICAgICAgIHRoaXMub25DbGlja1RvZ2dsZU5vZGUoZXhwYW5kaW5nTm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgdGhpcy5fZXhwYW5kTm9kZXNMb29wKGl0ZW0uY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEV4cGFuZGluZ05vZGUobm9kZTogRmxhdE5vZGUpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5leHBhbmRpbmdOb2Rlcy5zb21lKHggPT4geC5pZCA9PT0gbm9kZS5pZCkpIHtcclxuICAgICAgdGhpcy5leHBhbmRpbmdOb2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlRXhwYW5kaW5nTm9kZXMobm9kZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kaW5nTm9kZXMgPSB0aGlzLmV4cGFuZGluZ05vZGVzLmZpbHRlcih4ID0+IHguaWQgIT09IG5vZGVJZCk7XHJcbiAgfVxyXG59Il19
|