@eui/components 15.0.0-rc.20 → 15.0.0-rc.21
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/docs/components/EuiTreeComponent.html +1 -1
- package/docs/dependencies.html +2 -2
- package/docs/js/search/search_index.js +2 -2
- package/esm2020/eui-tree/eui-tree.component.mjs +3 -3
- package/fesm2015/eui-components-eui-tree.mjs +2 -2
- package/fesm2015/eui-components-eui-tree.mjs.map +1 -1
- package/fesm2020/eui-components-eui-tree.mjs +2 -2
- package/fesm2020/eui-components-eui-tree.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -369,10 +369,10 @@ export class EuiTreeComponent {
|
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
371
|
/** @nocollapse */ EuiTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: EuiTreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
372
|
-
/** @nocollapse */ EuiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: EuiTreeComponent, selector: "eui-tree", inputs: { nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", autoTranslate: "autoTranslate" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, usesOnChanges: true, ngImport: i0, template: "<ul class=\"ux-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"ux-tree__node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"ux-tree__node-wrapper\">\n <button euiButton euiIconButton euiBasicButton\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-down\"\n ></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"ux-tree__node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <span\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <span class=\"eui-icon\"\n [ngClass]=\"metaDataContainer.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\">\n\n </span>\n </span>\n <div\n *ngIf=\"metaDataContainer.expanded\"\n class=\"ux-tree__node-metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label.ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0 var(--eui-base-spacing-2xs)!important;padding:10px!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "component", type: i2.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["isInvalid", "label", "styleClass", "checked", "id"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i4.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i5.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i6.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i7.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
372
|
+
/** @nocollapse */ EuiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: EuiTreeComponent, selector: "eui-tree", inputs: { nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", autoTranslate: "autoTranslate" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, usesOnChanges: true, ngImport: i0, template: "<ul class=\"eui-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"eui-tree-node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"eui-tree-node-wrapper\">\n <button euiButton euiIconButton euiBasicButton euiSizeS\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" icon=\"eui-chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" icon=\"eui-chevron-down\"></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-u-flex\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-s\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\"\n class=\"eui-u-mr-s\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\"\n class=\"eui-u-mr-s\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel class=\"eui-u-mr-s\"\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\" class=\"eui-u-mr-s\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\" class=\"eui-u-ml-s\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button euiButton euiBasicButton euiIconButton euiSizeS (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\"\n class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.eui-tree .eui-tree-node,.eui-tree .eui-tree-node-wrapper{display:flex}.eui-tree .eui-tree-node{flex-direction:column}.eui-tree .eui-tree-node-wrapper{align-items:center;padding:var(--eui-base-spacing-2xs) var(--eui-base-spacing-s)}.eui-tree .eui-tree-node-wrapper .eui-label{white-space:pre-wrap}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "component", type: i2.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["isInvalid", "label", "styleClass", "checked", "id"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i4.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i5.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i6.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i7.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
373
373
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: EuiTreeComponent, decorators: [{
|
|
374
374
|
type: Component,
|
|
375
|
-
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"ux-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"ux-tree__node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"ux-tree__node-wrapper\">\n <button euiButton euiIconButton euiBasicButton\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-down\"\n ></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"ux-tree__node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <span\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <span class=\"eui-icon\"\n [ngClass]=\"metaDataContainer.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\">\n\n </span>\n </span>\n <div\n *ngIf=\"metaDataContainer.expanded\"\n class=\"ux-tree__node-metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label.ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0 var(--eui-base-spacing-2xs)!important;padding:10px!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}\n"] }]
|
|
375
|
+
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"eui-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"eui-tree-node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"eui-tree-node-wrapper\">\n <button euiButton euiIconButton euiBasicButton euiSizeS\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" icon=\"eui-chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" icon=\"eui-chevron-down\"></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-u-flex\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-s\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\"\n class=\"eui-u-mr-s\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\"\n class=\"eui-u-mr-s\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel class=\"eui-u-mr-s\"\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\" class=\"eui-u-mr-s\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\" class=\"eui-u-ml-s\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button euiButton euiBasicButton euiIconButton euiSizeS (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\"\n class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.eui-tree .eui-tree-node,.eui-tree .eui-tree-node-wrapper{display:flex}.eui-tree .eui-tree-node{flex-direction:column}.eui-tree .eui-tree-node-wrapper{align-items:center;padding:var(--eui-base-spacing-2xs) var(--eui-base-spacing-s)}.eui-tree .eui-tree-node-wrapper .eui-label{white-space:pre-wrap}\n"] }]
|
|
376
376
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { nodes: [{
|
|
377
377
|
type: Input
|
|
378
378
|
}], nodeTemplateRef: [{
|
|
@@ -443,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
|
|
|
443
443
|
],
|
|
444
444
|
}]
|
|
445
445
|
}] });
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUtSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUVOLGlCQUFpQixHQU1wQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFTL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQStCLE1BQU0sMEJBQTBCLENBQUM7QUFDeEcsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQVV0RCxNQUFNLE9BQU8sZ0JBQWdCO0lBcUV6QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWhCOUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUM5RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDOUMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBSWxELFFBQUcsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUkvRCx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLGdDQUEyQixHQUFZLElBQUksQ0FBQztRQUM1QyxtQkFBYyxHQUFZLElBQUksQ0FBQztRQThKdkMsYUFBUSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQTNKcEcsQ0FBQztJQS9ERCx5RUFBeUU7SUFDekUsSUFDSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksbUJBQW1CLENBQUMsS0FBbUI7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUNJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQ0ksb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLEtBQW1CO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFDSSwwQkFBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksMEJBQTBCLENBQUMsS0FBbUI7UUFDOUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUNJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQXFCRCxRQUFRO1FBQ0osMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3Qix3REFBd0Q7UUFDeEQscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGlCQUFpQixDQUF1QixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQXVCLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckYsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3pDLHdDQUF3QztZQUN4QyxrRUFBa0U7WUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDN0YsMERBQTBEO1lBQzFELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osb0RBQW9EO2dCQUNwRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDdkUsNEJBQTRCO2dCQUM1QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IscUNBQXFDO2dCQUNyQyx3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxpQkFBaUIsQ0FBdUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhLEVBQUUsRUFBTztRQUMxQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLE1BQU0sUUFBUSxHQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMzQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDN0IsT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDSCxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM3QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFrQjtRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBOEI7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUE4QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxhQUFtQztRQUNwRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksU0FBUyxFQUFFO1lBQ1gsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakY7U0FDSjtRQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvSSxJQUFJLFNBQVMsRUFBRTtZQUNYLHlCQUF5QjtZQUN6QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLHFFQUFxRTtZQUNyRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLDBFQUEwRTtZQUMxRSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pFLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFO29CQUN0RSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsdUJBQXVCLEtBQUssYUFBYSxDQUFDO29CQUNyRixRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsdUJBQXVCLEtBQUssZUFBZSxDQUFDO29CQUM1RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTt3QkFDbkMsMENBQTBDO3dCQUMxQyx3REFBd0Q7d0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7cUJBQ3hDO3lCQUFNO3dCQUNILDBDQUEwQzt3QkFDMUMsd0RBQXdEO3dCQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7cUJBQzFDO2lCQUNKO2dCQUNELFdBQVc7WUFDZixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUlELFVBQVUsQ0FBQyxJQUFZLEVBQUUsYUFBbUM7UUFDeEQsSUFBSSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2hCLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxPQUFPLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBdUI7UUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLFFBQVEsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzVIO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLE9BQXNCLEVBQUUsV0FBb0IsRUFBRSxrQkFBMkI7UUFDL0csT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBbUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUN0RCxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxPQUFPO29CQUNILEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsR0FBRyxJQUFJLENBQUMsSUFBSTt3QkFDWixVQUFVLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO3dCQUN6RixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsWUFBWSxFQUFFOzRCQUNWLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZOzRCQUN6QixTQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTOzRCQUMzSCxrQkFBa0IsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixLQUFLLFdBQVcsQ0FBQyxDQUFDO2dDQUNyRixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsa0JBQWtCO3lCQUN4RTtxQkFDSjtvQkFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDO2lCQUNuRyxDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsT0FBTztvQkFDSCxHQUFHLElBQUk7b0JBQ1AsSUFBSSxFQUFFO3dCQUNGLEdBQUcsSUFBSSxDQUFDLElBQUk7d0JBQ1osVUFBVSxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVTtxQkFDNUY7aUJBQ0osQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsZUFBcUM7UUFDakUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTyxjQUFjLENBQUMsZUFBcUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQy9DO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLGVBQXFDO1FBQzFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsQixJQUFJLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVELG1GQUFtRjtJQUMzRSxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN2RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzRkFBc0Y7SUFDOUUsb0NBQW9DLENBQUMsUUFBOEI7UUFDdkUsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksU0FBUyxHQUE0QixlQUFlLENBQUM7UUFDekQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRCxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBZSxDQUFDO1lBQzlDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsRUFBRTtZQUNuRixTQUFTLEdBQUcsYUFBYSxDQUFDO1NBQzdCO2FBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzlGLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztTQUNoQzthQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3JJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRTtnQkFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixTQUFTLEdBQUcsYUFBYSxDQUFDO2FBQzdCO1NBQ0o7YUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2SSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztTQUNoQztRQUNELE9BQU87WUFDSCxHQUFHLFFBQVE7WUFDWCx1QkFBdUIsRUFBRSxTQUFTO1NBQ3JDLENBQUM7SUFDTixDQUFDO0lBRU8saUNBQWlDLENBQUMsSUFBWTtRQUNsRCxNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUM7UUFDVCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7YUFDekM7aUJBQU07Z0JBQ0gsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM3QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQXNCLEVBQUUsU0FBa0IsRUFBRSxlQUFxQztRQUN4RyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBbUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUc7b0JBQ2IsR0FBRyxJQUFJO29CQUNQLElBQUksRUFBRTt3QkFDRixHQUFHLElBQUksQ0FBQyxJQUFJO3dCQUNaLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixlQUFlLEVBQUUsS0FBSztxQkFDekI7aUJBQ0osQ0FBQztnQkFDRixJQUFJLFNBQVMsRUFBRTtvQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUMvQztxQkFBTTtvQkFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ2pEO2FBQ0o7WUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2hHO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUE4QixFQUFFLEtBQWEsRUFBRSxVQUFtQjtRQUM1RixRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RSxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFO2dCQUMvQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7Z0lBcllRLGdCQUFnQjtvSEFBaEIsZ0JBQWdCLGdsQkMvQzdCLDhqUUE4SUE7MkZEL0ZhLGdCQUFnQjtrQkFSNUIsU0FBUzsrQkFDSSxVQUFVLG1CQUdILHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7d0dBSTVCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFVRiwwQkFBMEI7c0JBRDdCLEtBQUs7Z0JBVUYsYUFBYTtzQkFEaEIsS0FBSztnQkFTSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTs7QUFvV1gsTUFBTSxPQUFPLGFBQWE7OzZIQUFiLGFBQWE7OEhBQWIsYUFBYSxpQkEzWmIsZ0JBQWdCLGFBMFlyQixZQUFZO1FBQ1osV0FBVztRQUNYLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWMsYUFsWlQsZ0JBQWdCOzhIQTJaaEIsYUFBYSxZQWpCbEIsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlO1FBQ2Ysc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixlQUFlO1FBQ2YsYUFBYTtRQUNiLGNBQWM7UUFDZCxjQUFjOzJGQVNULGFBQWE7a0JBbkJ6QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYztxQkFDakI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGdCQUFnQjtxQkFDbkI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBEaXJlY3RpdmUsXG4gICAgQ29udGVudENoaWxkLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgVHJlZURhdGFNb2RlbCxcbiAgICBUcmVlSXRlbU1vZGVsLFxuICAgIFRyZWVOb2RlLFxuICAgIFRyZWVEYXRhUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtUnVuVGltZU1vZGVsLCBFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcyxcbn0gZnJvbSAnLi9ldWktdHJlZS5tb2RlbCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV1aUlucHV0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWlucHV0LWNoZWNrYm94JztcbmltcG9ydCB7IEV1aUJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktYnV0dG9uJztcbmltcG9ydCB7IEV1aUljb25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWljb24nO1xuaW1wb3J0IHsgRXVpTGFiZWxNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWxhYmVsJztcbmltcG9ydCB7IEV1aUJhZGdlTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1iYWRnZSc7XG5pbXBvcnQgeyBOZXN0ZWRUcmVlQ29udHJvbCwgQ2RrVHJlZU1vZHVsZSwgQ2RrVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IEFycmF5RGF0YVNvdXJjZSwgU2VsZWN0aW9uTW9kZWwsIFNlbGVjdGlvbkNoYW5nZSwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcblxuZXhwb3J0IGNsYXNzIEV1aVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBASW5wdXQoKSBub2RlczogVHJlZURhdGFNb2RlbDtcbiAgICBASW5wdXQoKSBub2RlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgbm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGV4cGFuZGVkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzOiBzdHJpbmc7XG5cbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGU7XG4gICAgfVxuXG4gICAgc2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDtcbiAgICB9XG5cbiAgICBzZXQgaXNNdWx0aXNlbGVjdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzTXVsdGlzZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgc2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgc2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGF1dG9UcmFuc2xhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpVHJlZVNlbGVjdGlvbkNoYW5nZXM+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1Nb2RlbD4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1Nb2RlbD4oKTtcbiAgICBjZGtBcnJheURhdGFTb3VyY2U6IEFycmF5RGF0YVNvdXJjZTxUcmVlSXRlbU1vZGVsPjtcbiAgICBjZGtUcmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1Nb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBEZWVwIGNvcHkgdG8gdGhlIGFycmF5LlxuICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ub2RlcykpKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUcmVlRGF0YVJ1bnRpbWUoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RyZWVEYXRhUnVuVGltZScsIHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPihub2RlID0+IG5vZGU/LmNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4odHJ1ZSwgW10sIHRydWUsICgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEucGF0aCA9PT0gYi5wYXRoO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5zdWJzY3JpYmUoKHNjKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0aW9uIGNoYW5nZTonLCBzYyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0ZWQgc25hcHNob3QnLCB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoXyA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKF8gPT4gdGhpcy5nZXRUcmVlSXRlbShfLnBhdGgpKSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1snbm9kZXMnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ25vZGVzJ10ucHJldmlvdXNWYWx1ZSAmJiB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3N0b3BzIGJ5JywgY2hhbmdlc1snbm9kZXMnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnRyZWVEYXRhID0gY2hhbmdlc1sndHJlZURhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1snbm9kZXMnXS5jdXJyZW50VmFsdWUpKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndHJpZ2dlcmVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUcmVlRGF0YVJ1bnRpbWUoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmNka0FycmF5RGF0YVNvdXJjZS5jb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5jZGtBcnJheURhdGFTb3VyY2UuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4obm9kZSA9PiBub2RlPy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGVsOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGVsLnBhcmVudDtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMubm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCkge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNldEFsbFNlbGVjdGlvbihpc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwodGhpcy5ub2RlcywgaXNDaGVja2VkLCB0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSB7XG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVUb2dnbGUodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZywgdHJlZUl0ZW1Nb2RlbDogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGxldCBub2RlID0gaXRlbS5ub2RlO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKGNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQsIHRyZWVJdGVtTW9kZWwuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlW3BhcnNlSW50KHBhdGhBcnJbMF0sIDEwKV0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLnRoaXMuZ2V0VHJlZUl0ZW0ocGF0aEFyclswXSkgfSk7XG4gICAgICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSBydW5UaW1lVHJlZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlID0gcnVuVGltZVRyZWVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1blRpbWVUcmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1blRpbWVUcmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+ICEhaXRlbS5jaGlsZHJlbiAmJiBpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMDtcblxuICAgIG9uU2VsZWN0Rm4ocGF0aDogc3RyaW5nLCB0cmVlSXRlbU1vZGVsOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkge1xuICAgICAgICBpZiAodHJlZUl0ZW1Nb2RlbD8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZVNlbGVjdGVkKGV2dCwgcGF0aCwgdHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCkge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKG5vZGVBcnI6IFRyZWVEYXRhTW9kZWwsIGlzUmVjdXJzaXZlOiBib29sZWFuLCBub0F1dG9TZWxlY3RQYXJlbnQ6IGJvb2xlYW4pOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5vZGVBcnIubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJyA/ICEhaXNSZWN1cnNpdmUgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQ6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGkucGF0aCA9PT0gcnVuVGltZVRyZWVJdGVtLnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPiAtMSkge1xuICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZkl0ZW0sIDEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4ubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZXMgdHJlZURhdGFSdW5UaW1lICYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlIGZvciBzZXBhcmF0ZSB0aGUgbG9naWMuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmVlRGF0YVJ1bnRpbWUoKSB7XG4gICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gWy4uLnRoaXMubm9kZXNdLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh7IC4uLml0ZW0gfSwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLnRyZWVEYXRhUnVuVGltZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLml0ZW0gfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIHJ1biB0aW1lIHN0YXRlIHdoaWNoIGluY2x1ZGVzIGNoaWxkcmVuIHNlbGVjdGlvbiBzdGF0ZSBmb3Igc2VsZWN0aW9uIHRyZWUuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBsZXQgY2hpbGRTdGF0ZXMgPSBbXTtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbltpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJ1blRpbWVJdGVtcyA9IHRyZWVJdGVtLmNoaWxkcmVuIGFzIGFueTtcbiAgICAgICAgICAgIGNoaWxkU3RhdGVzID0gcnVuVGltZUl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAoIXRyZWVJdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0cmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbFNlbGVjdGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHRyZWVJdGVtKTtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRyZWVJdGVtLFxuICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IGl0ZW1TdGF0ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBUcmVlRGF0YU1vZGVsLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIHJ1blRpbWVUcmVlRGF0YTogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZUFyci5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZUFycltpbmRleF0/Lm5vZGU/LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICBub2RlQXJyW2luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXNDaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZURhdGFbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVEYXRhW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuICYmIG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyW2luZGV4XS5jaGlsZHJlbiwgaXNDaGVja2VkLCBydW5UaW1lVHJlZURhdGFbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHBhdGg/LnNwbGl0KCcuJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh0cmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhdGg/OiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHRyZWVJdGVtLnBhdGggPSBwYXJlbnRQYXRoID8gcGFyZW50UGF0aCArICcuJyArIGluZGV4IDogaW5kZXgudG9TdHJpbmcoKTtcbiAgICAgICAgdHJlZUl0ZW0uaW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW5bdHJlZUl0ZW1JbmRleF0gPSB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZShjaGlsZCwgdHJlZUl0ZW1JbmRleCwgdHJlZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJlZUl0ZW07XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBFdWlJbnB1dENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtUcmVlTW9kdWxlLFxuICAgICAgICBFdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgICAgIEV1aUxhYmVsTW9kdWxlLFxuICAgICAgICBFdWlCYWRnZU1vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBFdWlUcmVlQ29tcG9uZW50LFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBFdWlUcmVlQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRyZWVNb2R1bGUge1xufVxuIiwiPHVsIGNsYXNzPVwidXgtdHJlZVwiPlxuICAgIDxjZGstdHJlZSBbZGF0YVNvdXJjZV09XCJjZGtBcnJheURhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwiY2RrVHJlZUNvbnRyb2xcIiBbdHJhY2tCeV09XCJ0cmFja0J5XCIgKm5nSWY9XCJyZW5kZXJUcmVlXCI+XG4gICAgICAgIDwhLS0gVGhlcmUgYXJlIHR3byBzdGF0ZXMgb2YgZ2VuZXJpYyBjZGstbmVzdGVkLXRyZWUtbm9kZSBkZWNsYXJhdGlvbnMuXG4gICAgICAgIEZpcnN0IG9uZSBpcyB3aXRob3V0IGNoaWxkLiBObyBzdWIgcmVuZGVyaW5nLlxuICAgICAgICAtLT5cbiAgICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlSXRlbU1vZGVsXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ1eC10cmVlX19ub2RlXCIgKm5nSWY9XCJ0cmVlSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7Z2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbHx8XG4gICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1eC10cmVlX19ub2RlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25Ob2RlQ2xpY2sodHJlZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmfHxub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6b25TZWxlY3RGbih0cmVlSXRlbU1vZGVsLnBhdGgsdHJlZUl0ZW1Nb2RlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6dWlkK3RyZWVJdGVtTW9kZWwucGF0aFxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L2Nkay1uZXN0ZWQtdHJlZS1ub2RlPlxuICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cbiAgICAgICAgPGNkay1uZXN0ZWQtdHJlZS1ub2RlICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlSXRlbU1vZGVsIHdoZW46IGhhc0NoaWxkXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ1eC10cmVlX19ub2RlXCIgKm5nSWY9XCJ0cmVlSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7Z2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbHx8XG4gICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXgtdHJlZV9fbm9kZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZXVpQnV0dG9uIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGUgJyArIHRyZWVJdGVtTW9kZWw/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKHRyZWVJdGVtTW9kZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtUcmVlTm9kZVRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUljb24gKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSYmY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiY29sbGFwc2VkSWNvbkNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpSWNvbiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkmJmV4cGFuZGVkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSYmIWNvbGxhcHNlZEljb25DbGFzc1wiIHNldD1cInNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1mb3J3YXJkXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSYmIWV4cGFuZGVkSWNvbkNsYXNzXCIgc2V0PVwic2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLUhlcmUgd3JhcHMgdGhlIG5vZGUsIGFuZCBsaXN0ZW4gZm9yIG5vZGUgY2xpY2tzLi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlSXRlbU1vZGVsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZnx8bm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6b25TZWxlY3RGbih0cmVlSXRlbU1vZGVsPy5wYXRoLHRyZWVJdGVtTW9kZWwpLFxuICAgICAgICAgICAgICAgICAgICAgaWQ6dWlkK3RyZWVJdGVtTW9kZWwucGF0aFxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLXVzZXMgY2RrVHJlZU5vZGVPdXRsZXQgdG8gcmVuZGVyIGNoaWxkcmVuIG5vZGVzLCBDZGtUcmVlQ29udHJvbCBpcyB1c2VkIHRvIGNvbnRyb2wgaXNFeHBhbmRlZCBzdGF0ZS4tLT5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJ1eC10cmVlX19ub2RlXCIgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1pZD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZVwiPlxuICAgICAgICA8IS0taW5wdXQgY2hlY2tib3ggYXJlYS0tPlxuICAgICAgICA8aW5wdXQgZXVpSW5wdXRDaGVja0JveCAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICBpZD1cInt7aWR9fVwiXG4gICAgICAgICAgICAgICBbY2hlY2tlZF09XCJub2RlICYmIG5vZGUuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwhLS10eXBlICh0eXBlTGFiZWwgJiB0eXBlQ2xhc3MpIGFyZWEtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbFwiIFtuZ1N3aXRjaF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlQ2xhc3NcIj5cbiAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU1cbiAgICAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzfHwncHJpbWFyeSdcIj5cbiAgICAgICAgICAgICAgICB7e25vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbH19XG4gICAgICAgICAgICA8L2V1aS1iYWRnZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS1pY29uIGFyZWEtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc1wiPlxuICAgICAgICAgICAgPGV1aS1pY29uIGV1aVNpemVNXG4gICAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblR5cGVDbGFzc3x8J3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M9XCJ7e25vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc319XCI+XG4gICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGxhYmVsICpuZ0lmPVwiIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWxcbiAgICAgICAgICAgICAgIGZvcj1cInt7aWR9fVwiPnt7YXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbHx0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWx9fTwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3tpZH19XCI+XG4gICAgICAgICAgICA8YSBocmVmPVwie3tub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbH19XCJcbiAgICAgICAgICAgICAgIHRhcmdldD1cInt7bm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJ319XCI+XG4gICAgICAgICAgICAgICAge3thdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsfHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYWRnZSBvZiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5iYWRnZXNcIj5cbiAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwiYmFkZ2UudHlwZUNsYXNzfHwnc2Vjb25kYXJ5J1wiPlxuICAgICAgICAgICAgICAgIHt7YmFkZ2UubGFiZWx9fVxuICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tbWV0YWRhdGEsIHVzZXMgdGhlIGhlbHAgb2YgbmcgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgZHluYW1pYyBleHBhbmQgdmFyaWFibGUgd2l0aG91dCBoYW5kbGluZyBzdGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhICYmIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7ZXhwYW5kZWQ6ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lciBsZXQtbWV0YURhdGFDb250YWluZXI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1tZXRhY29udGVudC10b2dnbGUgdXgtdHJlZV9fbm9kZS1jbGlja2FibGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZD0hbWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA/ICdldWktaWNvbiBldWktaWNvbi1hbmdsZS1kb3duJyA6ICdldWktaWNvbiBldWktaWNvbi1hbmdsZS1yaWdodCdcIj5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlLW1ldGFjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLXBhc3NpbmcgbWV0YWRhdGEgb2YgdGhlIG5vZGUgY29udGVudCB0byBwcm92aWRlZCB0ZW1wbGF0ZS1yZWY6bm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubWV0YWRhdGEsbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUtSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUVOLGlCQUFpQixHQU1wQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFTL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQStCLE1BQU0sMEJBQTBCLENBQUM7QUFDeEcsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQVV0RCxNQUFNLE9BQU8sZ0JBQWdCO0lBcUV6QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWhCOUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUM5RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDOUMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBSWxELFFBQUcsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUkvRCx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLGdDQUEyQixHQUFZLElBQUksQ0FBQztRQUM1QyxtQkFBYyxHQUFZLElBQUksQ0FBQztRQThKdkMsYUFBUSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQTNKcEcsQ0FBQztJQS9ERCx5RUFBeUU7SUFDekUsSUFDSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksbUJBQW1CLENBQUMsS0FBbUI7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUNJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQ0ksb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLEtBQW1CO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFDSSwwQkFBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksMEJBQTBCLENBQUMsS0FBbUI7UUFDOUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUNJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQXFCRCxRQUFRO1FBQ0osMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3Qix3REFBd0Q7UUFDeEQscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGlCQUFpQixDQUF1QixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQXVCLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckYsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3pDLHdDQUF3QztZQUN4QyxrRUFBa0U7WUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDN0YsMERBQTBEO1lBQzFELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osb0RBQW9EO2dCQUNwRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDdkUsNEJBQTRCO2dCQUM1QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IscUNBQXFDO2dCQUNyQyx3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxpQkFBaUIsQ0FBdUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhLEVBQUUsRUFBTztRQUMxQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLE1BQU0sUUFBUSxHQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMzQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDN0IsT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDSCxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM3QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFrQjtRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBOEI7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUE4QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxhQUFtQztRQUNwRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksU0FBUyxFQUFFO1lBQ1gsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakY7U0FDSjtRQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvSSxJQUFJLFNBQVMsRUFBRTtZQUNYLHlCQUF5QjtZQUN6QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLHFFQUFxRTtZQUNyRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLDBFQUEwRTtZQUMxRSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pFLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFO29CQUN0RSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsdUJBQXVCLEtBQUssYUFBYSxDQUFDO29CQUNyRixRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsdUJBQXVCLEtBQUssZUFBZSxDQUFDO29CQUM1RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTt3QkFDbkMsMENBQTBDO3dCQUMxQyx3REFBd0Q7d0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7cUJBQ3hDO3lCQUFNO3dCQUNILDBDQUEwQzt3QkFDMUMsd0RBQXdEO3dCQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7cUJBQzFDO2lCQUNKO2dCQUNELFdBQVc7WUFDZixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUlELFVBQVUsQ0FBQyxJQUFZLEVBQUUsYUFBbUM7UUFDeEQsSUFBSSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2hCLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxPQUFPLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBdUI7UUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLFFBQVEsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzVIO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLE9BQXNCLEVBQUUsV0FBb0IsRUFBRSxrQkFBMkI7UUFDL0csT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBbUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUN0RCxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxPQUFPO29CQUNILEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsR0FBRyxJQUFJLENBQUMsSUFBSTt3QkFDWixVQUFVLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO3dCQUN6RixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsWUFBWSxFQUFFOzRCQUNWLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZOzRCQUN6QixTQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTOzRCQUMzSCxrQkFBa0IsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixLQUFLLFdBQVcsQ0FBQyxDQUFDO2dDQUNyRixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsa0JBQWtCO3lCQUN4RTtxQkFDSjtvQkFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDO2lCQUNuRyxDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsT0FBTztvQkFDSCxHQUFHLElBQUk7b0JBQ1AsSUFBSSxFQUFFO3dCQUNGLEdBQUcsSUFBSSxDQUFDLElBQUk7d0JBQ1osVUFBVSxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVTtxQkFDNUY7aUJBQ0osQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsZUFBcUM7UUFDakUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTyxjQUFjLENBQUMsZUFBcUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQy9DO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLGVBQXFDO1FBQzFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsQixJQUFJLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVELG1GQUFtRjtJQUMzRSxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN2RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzRkFBc0Y7SUFDOUUsb0NBQW9DLENBQUMsUUFBOEI7UUFDdkUsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksU0FBUyxHQUE0QixlQUFlLENBQUM7UUFDekQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRCxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBZSxDQUFDO1lBQzlDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsRUFBRTtZQUNuRixTQUFTLEdBQUcsYUFBYSxDQUFDO1NBQzdCO2FBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzlGLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztTQUNoQzthQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3JJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRTtnQkFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixTQUFTLEdBQUcsYUFBYSxDQUFDO2FBQzdCO1NBQ0o7YUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2SSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztTQUNoQztRQUNELE9BQU87WUFDSCxHQUFHLFFBQVE7WUFDWCx1QkFBdUIsRUFBRSxTQUFTO1NBQ3JDLENBQUM7SUFDTixDQUFDO0lBRU8saUNBQWlDLENBQUMsSUFBWTtRQUNsRCxNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUM7UUFDVCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7YUFDekM7aUJBQU07Z0JBQ0gsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM3QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQXNCLEVBQUUsU0FBa0IsRUFBRSxlQUFxQztRQUN4RyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBbUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUc7b0JBQ2IsR0FBRyxJQUFJO29CQUNQLElBQUksRUFBRTt3QkFDRixHQUFHLElBQUksQ0FBQyxJQUFJO3dCQUNaLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixlQUFlLEVBQUUsS0FBSztxQkFDekI7aUJBQ0osQ0FBQztnQkFDRixJQUFJLFNBQVMsRUFBRTtvQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUMvQztxQkFBTTtvQkFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ2pEO2FBQ0o7WUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2hHO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUE4QixFQUFFLEtBQWEsRUFBRSxVQUFtQjtRQUM1RixRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RSxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFO2dCQUMvQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7Z0lBcllRLGdCQUFnQjtvSEFBaEIsZ0JBQWdCLGdsQkMvQzdCLGs3UEFzSUE7MkZEdkZhLGdCQUFnQjtrQkFSNUIsU0FBUzsrQkFDSSxVQUFVLG1CQUdILHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7d0dBSTVCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFVRiwwQkFBMEI7c0JBRDdCLEtBQUs7Z0JBVUYsYUFBYTtzQkFEaEIsS0FBSztnQkFTSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTs7QUFvV1gsTUFBTSxPQUFPLGFBQWE7OzZIQUFiLGFBQWE7OEhBQWIsYUFBYSxpQkEzWmIsZ0JBQWdCLGFBMFlyQixZQUFZO1FBQ1osV0FBVztRQUNYLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWMsYUFsWlQsZ0JBQWdCOzhIQTJaaEIsYUFBYSxZQWpCbEIsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlO1FBQ2Ysc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixlQUFlO1FBQ2YsYUFBYTtRQUNiLGNBQWM7UUFDZCxjQUFjOzJGQVNULGFBQWE7a0JBbkJ6QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYztxQkFDakI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGdCQUFnQjtxQkFDbkI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBEaXJlY3RpdmUsXG4gICAgQ29udGVudENoaWxkLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgVHJlZURhdGFNb2RlbCxcbiAgICBUcmVlSXRlbU1vZGVsLFxuICAgIFRyZWVOb2RlLFxuICAgIFRyZWVEYXRhUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtUnVuVGltZU1vZGVsLCBFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcyxcbn0gZnJvbSAnLi9ldWktdHJlZS5tb2RlbCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV1aUlucHV0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWlucHV0LWNoZWNrYm94JztcbmltcG9ydCB7IEV1aUJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktYnV0dG9uJztcbmltcG9ydCB7IEV1aUljb25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWljb24nO1xuaW1wb3J0IHsgRXVpTGFiZWxNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWxhYmVsJztcbmltcG9ydCB7IEV1aUJhZGdlTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1iYWRnZSc7XG5pbXBvcnQgeyBOZXN0ZWRUcmVlQ29udHJvbCwgQ2RrVHJlZU1vZHVsZSwgQ2RrVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IEFycmF5RGF0YVNvdXJjZSwgU2VsZWN0aW9uTW9kZWwsIFNlbGVjdGlvbkNoYW5nZSwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcblxuZXhwb3J0IGNsYXNzIEV1aVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBASW5wdXQoKSBub2RlczogVHJlZURhdGFNb2RlbDtcbiAgICBASW5wdXQoKSBub2RlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgbm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGV4cGFuZGVkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzOiBzdHJpbmc7XG5cbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGU7XG4gICAgfVxuXG4gICAgc2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDtcbiAgICB9XG5cbiAgICBzZXQgaXNNdWx0aXNlbGVjdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzTXVsdGlzZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgc2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgc2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGF1dG9UcmFuc2xhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpVHJlZVNlbGVjdGlvbkNoYW5nZXM+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1Nb2RlbD4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1Nb2RlbD4oKTtcbiAgICBjZGtBcnJheURhdGFTb3VyY2U6IEFycmF5RGF0YVNvdXJjZTxUcmVlSXRlbU1vZGVsPjtcbiAgICBjZGtUcmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1Nb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBEZWVwIGNvcHkgdG8gdGhlIGFycmF5LlxuICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ub2RlcykpKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUcmVlRGF0YVJ1bnRpbWUoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RyZWVEYXRhUnVuVGltZScsIHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPihub2RlID0+IG5vZGU/LmNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4odHJ1ZSwgW10sIHRydWUsICgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEucGF0aCA9PT0gYi5wYXRoO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5zdWJzY3JpYmUoKHNjKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0aW9uIGNoYW5nZTonLCBzYyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0ZWQgc25hcHNob3QnLCB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoXyA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKF8gPT4gdGhpcy5nZXRUcmVlSXRlbShfLnBhdGgpKSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1snbm9kZXMnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ25vZGVzJ10ucHJldmlvdXNWYWx1ZSAmJiB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3N0b3BzIGJ5JywgY2hhbmdlc1snbm9kZXMnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnRyZWVEYXRhID0gY2hhbmdlc1sndHJlZURhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1snbm9kZXMnXS5jdXJyZW50VmFsdWUpKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndHJpZ2dlcmVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUcmVlRGF0YVJ1bnRpbWUoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmNka0FycmF5RGF0YVNvdXJjZS5jb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5jZGtBcnJheURhdGFTb3VyY2UuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4obm9kZSA9PiBub2RlPy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGVsOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGVsLnBhcmVudDtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMubm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCkge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNldEFsbFNlbGVjdGlvbihpc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwodGhpcy5ub2RlcywgaXNDaGVja2VkLCB0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSB7XG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVUb2dnbGUodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZywgdHJlZUl0ZW1Nb2RlbDogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGxldCBub2RlID0gaXRlbS5ub2RlO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKGNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQsIHRyZWVJdGVtTW9kZWwuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlW3BhcnNlSW50KHBhdGhBcnJbMF0sIDEwKV0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLnRoaXMuZ2V0VHJlZUl0ZW0ocGF0aEFyclswXSkgfSk7XG4gICAgICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSBydW5UaW1lVHJlZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlID0gcnVuVGltZVRyZWVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1blRpbWVUcmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1blRpbWVUcmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+ICEhaXRlbS5jaGlsZHJlbiAmJiBpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMDtcblxuICAgIG9uU2VsZWN0Rm4ocGF0aDogc3RyaW5nLCB0cmVlSXRlbU1vZGVsOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkge1xuICAgICAgICBpZiAodHJlZUl0ZW1Nb2RlbD8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZVNlbGVjdGVkKGV2dCwgcGF0aCwgdHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCkge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKG5vZGVBcnI6IFRyZWVEYXRhTW9kZWwsIGlzUmVjdXJzaXZlOiBib29sZWFuLCBub0F1dG9TZWxlY3RQYXJlbnQ6IGJvb2xlYW4pOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5vZGVBcnIubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJyA/ICEhaXNSZWN1cnNpdmUgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQ6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGkucGF0aCA9PT0gcnVuVGltZVRyZWVJdGVtLnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPiAtMSkge1xuICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZkl0ZW0sIDEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4ubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZXMgdHJlZURhdGFSdW5UaW1lICYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlIGZvciBzZXBhcmF0ZSB0aGUgbG9naWMuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmVlRGF0YVJ1bnRpbWUoKSB7XG4gICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gWy4uLnRoaXMubm9kZXNdLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh7IC4uLml0ZW0gfSwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLnRyZWVEYXRhUnVuVGltZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLml0ZW0gfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIHJ1biB0aW1lIHN0YXRlIHdoaWNoIGluY2x1ZGVzIGNoaWxkcmVuIHNlbGVjdGlvbiBzdGF0ZSBmb3Igc2VsZWN0aW9uIHRyZWUuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBsZXQgY2hpbGRTdGF0ZXMgPSBbXTtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbltpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJ1blRpbWVJdGVtcyA9IHRyZWVJdGVtLmNoaWxkcmVuIGFzIGFueTtcbiAgICAgICAgICAgIGNoaWxkU3RhdGVzID0gcnVuVGltZUl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAoIXRyZWVJdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0cmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbFNlbGVjdGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHRyZWVJdGVtKTtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRyZWVJdGVtLFxuICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IGl0ZW1TdGF0ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGluZGV4QXJyLmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBUcmVlRGF0YU1vZGVsLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIHJ1blRpbWVUcmVlRGF0YTogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZUFyci5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZUFycltpbmRleF0/Lm5vZGU/LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICBub2RlQXJyW2luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXNDaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZURhdGFbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVEYXRhW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuICYmIG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyW2luZGV4XS5jaGlsZHJlbiwgaXNDaGVja2VkLCBydW5UaW1lVHJlZURhdGFbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHBhdGg/LnNwbGl0KCcuJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh0cmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhdGg/OiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHRyZWVJdGVtLnBhdGggPSBwYXJlbnRQYXRoID8gcGFyZW50UGF0aCArICcuJyArIGluZGV4IDogaW5kZXgudG9TdHJpbmcoKTtcbiAgICAgICAgdHJlZUl0ZW0uaW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW5bdHJlZUl0ZW1JbmRleF0gPSB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZShjaGlsZCwgdHJlZUl0ZW1JbmRleCwgdHJlZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJlZUl0ZW07XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBFdWlJbnB1dENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtUcmVlTW9kdWxlLFxuICAgICAgICBFdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgICAgIEV1aUxhYmVsTW9kdWxlLFxuICAgICAgICBFdWlCYWRnZU1vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBFdWlUcmVlQ29tcG9uZW50LFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBFdWlUcmVlQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRyZWVNb2R1bGUge1xufVxuIiwiPHVsIGNsYXNzPVwiZXVpLXRyZWVcIj5cbiAgICA8Y2RrLXRyZWUgW2RhdGFTb3VyY2VdPVwiY2RrQXJyYXlEYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cImNka1RyZWVDb250cm9sXCIgW3RyYWNrQnldPVwidHJhY2tCeVwiICpuZ0lmPVwicmVuZGVyVHJlZVwiPlxuICAgICAgICA8IS0tIFRoZXJlIGFyZSB0d28gc3RhdGVzIG9mIGdlbmVyaWMgY2RrLW5lc3RlZC10cmVlLW5vZGUgZGVjbGFyYXRpb25zLlxuICAgICAgICBGaXJzdCBvbmUgaXMgd2l0aG91dCBjaGlsZC4gTm8gc3ViIHJlbmRlcmluZy5cbiAgICAgICAgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZUl0ZW1Nb2RlbFwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiZXVpLXRyZWUtbm9kZVwiICpuZ0lmPVwidHJlZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2dldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWx8fFxuICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZnx8bm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0Om9uU2VsZWN0Rm4odHJlZUl0ZW1Nb2RlbC5wYXRoLHRyZWVJdGVtTW9kZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOnVpZCt0cmVlSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGV4cGFuZGFibGUgbm9kZXMgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZUl0ZW1Nb2RlbCB3aGVuOiBoYXNDaGlsZFwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiZXVpLXRyZWUtbm9kZVwiICpuZ0lmPVwidHJlZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2dldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWx8fFxuICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyB0cmVlSXRlbU1vZGVsPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSh0cmVlSXRlbU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVHJlZU5vZGVUb2dnbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBldWlJY29uICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkmJmNvbGxhcHNlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkNsYXNzXT1cImNvbGxhcHNlZEljb25DbGFzc1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUljb24gKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtTW9kZWwpJiZleHBhbmRlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkNsYXNzXT1cImV4cGFuZGVkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkmJiFjb2xsYXBzZWRJY29uQ2xhc3NcIiBpY29uPVwiZXVpLWNoZXZyb24tZm9yd2FyZFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkmJiFleHBhbmRlZEljb25DbGFzc1wiIGljb249XCJldWktY2hldnJvbi1kb3duXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tSGVyZSB3cmFwcyB0aGUgbm9kZSwgYW5kIGxpc3RlbiBmb3Igbm9kZSBjbGlja3MuLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVJdGVtTW9kZWwpXCIgY2xhc3M9XCJldWktdS1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgb25TZWxlY3Qgd2l0aCBvblNlbGVjdEZuIGZvciBkZXZlbG9wZXJzIHRvIHNlbmQgdGhlIGV2ZW50cyBmcm9tIHRoZWlyIGN1c3RvbSBjaGVjayBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmfHxub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDpvblNlbGVjdEZuKHRyZWVJdGVtTW9kZWw/LnBhdGgsdHJlZUl0ZW1Nb2RlbCksXG4gICAgICAgICAgICAgICAgICAgICBpZDp1aWQrdHJlZUl0ZW1Nb2RlbC5wYXRoXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tdXNlcyBjZGtUcmVlTm9kZU91dGxldCB0byByZW5kZXIgY2hpbGRyZW4gbm9kZXMsIENka1RyZWVDb250cm9sIGlzIHVzZWQgdG8gY29udHJvbCBpc0V4cGFuZGVkIHN0YXRlLi0tPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImV1aS10cmVlLW5vZGVcIiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjZGtUcmVlTm9kZU91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICA8L2Nkay10cmVlPlxuPC91bD5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGVEZWZhdWx0IGxldC1ub2RlIGxldC1vblNlbGVjdD1cIm9uU2VsZWN0XCIgbGV0LWlkPWlkPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlXCI+XG4gICAgICAgIDwhLS1pbnB1dCBjaGVja2JveCBhcmVhLS0+XG4gICAgICAgIDxpbnB1dCBldWlJbnB1dENoZWNrQm94ICpuZ0lmPVwibm9kZSAmJiBub2RlLnNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgIGlkPVwie3tpZH19XCJcbiAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm5vZGUgJiYgbm9kZS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LW1yLXNcIlxuICAgICAgICAgPlxuICAgICAgICA8IS0tdHlwZSAodHlwZUxhYmVsICYgdHlwZUNsYXNzKSBhcmVhLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlTGFiZWxcIiBbbmdTd2l0Y2hdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzXCI+XG4gICAgICAgICAgICA8ZXVpLWJhZGdlIGV1aVNpemVNXG4gICAgICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzc3x8J3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1zXCI+XG4gICAgICAgICAgICAgICAge3tub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlTGFiZWx9fVxuICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0taWNvbiBhcmVhLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uQ2xhc3NcIj5cbiAgICAgICAgICAgIDxldWktaWNvbiBldWlTaXplTVxuICAgICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3N8fCdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwie3tub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uQ2xhc3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1zXCI+XG4gICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGxhYmVsICpuZ0lmPVwiIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgY2xhc3M9XCJldWktdS1tci1zXCJcbiAgICAgICAgICAgICAgIGZvcj1cInt7aWR9fVwiPnt7YXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbHx0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWx9fTwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3tpZH19XCIgY2xhc3M9XCJldWktdS1tci1zXCI+XG4gICAgICAgICAgICA8YSBocmVmPVwie3tub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbH19XCJcbiAgICAgICAgICAgICAgIHRhcmdldD1cInt7bm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJ319XCI+XG4gICAgICAgICAgICAgICAge3thdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsfHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYWRnZSBvZiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5iYWRnZXNcIj5cbiAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwiYmFkZ2UudHlwZUNsYXNzfHwnc2Vjb25kYXJ5J1wiIGNsYXNzPVwiZXVpLXUtbWwtc1wiPlxuICAgICAgICAgICAgICAgIHt7YmFkZ2UubGFiZWx9fVxuICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tbWV0YWRhdGEsIHVzZXMgdGhlIGhlbHAgb2YgbmcgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgZHluYW1pYyBleHBhbmQgdmFyaWFibGUgd2l0aG91dCBoYW5kbGluZyBzdGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhICYmIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7ZXhwYW5kZWQ6ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lciBsZXQtbWV0YURhdGFDb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlCYXNpY0J1dHRvbiBldWlJY29uQnV0dG9uIGV1aVNpemVTIChjbGljayk9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZD0hbWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID8gJ2V1aS1jaGV2cm9uLWRvd24nIDogJ2V1aS1jaGV2cm9uLWZvcndhcmQnXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlX19tZXRhY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwhLS1wYXNzaW5nIG1ldGFkYXRhIG9mIHRoZSBub2RlIGNvbnRlbnQgdG8gcHJvdmlkZWQgdGVtcGxhdGUtcmVmOm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZi0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhLG1ldGFkYXRhOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -350,10 +350,10 @@ class EuiTreeComponent {
|
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
352
|
/** @nocollapse */ EuiTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: EuiTreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
353
|
-
/** @nocollapse */ EuiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: EuiTreeComponent, selector: "eui-tree", inputs: { nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", autoTranslate: "autoTranslate" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, usesOnChanges: true, ngImport: i0, template: "<ul class=\"ux-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"ux-tree__node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"ux-tree__node-wrapper\">\n <button euiButton euiIconButton euiBasicButton\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-down\"\n ></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"ux-tree__node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <span\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <span class=\"eui-icon\"\n [ngClass]=\"metaDataContainer.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\">\n\n </span>\n </span>\n <div\n *ngIf=\"metaDataContainer.expanded\"\n class=\"ux-tree__node-metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label.ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0 var(--eui-base-spacing-2xs)!important;padding:10px!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "component", type: i2.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["isInvalid", "label", "styleClass", "checked", "id"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i4.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i5.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i6.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i7.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
353
|
+
/** @nocollapse */ EuiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: EuiTreeComponent, selector: "eui-tree", inputs: { nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", autoTranslate: "autoTranslate" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, usesOnChanges: true, ngImport: i0, template: "<ul class=\"eui-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"eui-tree-node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"eui-tree-node-wrapper\">\n <button euiButton euiIconButton euiBasicButton euiSizeS\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" icon=\"eui-chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" icon=\"eui-chevron-down\"></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-u-flex\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-s\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\"\n class=\"eui-u-mr-s\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\"\n class=\"eui-u-mr-s\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel class=\"eui-u-mr-s\"\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\" class=\"eui-u-mr-s\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\" class=\"eui-u-ml-s\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button euiButton euiBasicButton euiIconButton euiSizeS (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\"\n class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.eui-tree .eui-tree-node,.eui-tree .eui-tree-node-wrapper{display:flex}.eui-tree .eui-tree-node{flex-direction:column}.eui-tree .eui-tree-node-wrapper{align-items:center;padding:var(--eui-base-spacing-2xs) var(--eui-base-spacing-s)}.eui-tree .eui-tree-node-wrapper .eui-label{white-space:pre-wrap}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "component", type: i2.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["isInvalid", "label", "styleClass", "checked", "id"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i4.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i5.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i6.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i7.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
354
354
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: EuiTreeComponent, decorators: [{
|
|
355
355
|
type: Component,
|
|
356
|
-
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"ux-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"ux-tree__node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"ux-tree__node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"ux-tree__node-wrapper\">\n <button euiButton euiIconButton euiBasicButton\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" set=\"sharp\"\n size=\"m\"\n icon=\"chevron-down\"\n ></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"ux-tree__node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <span\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <span class=\"eui-icon\"\n [ngClass]=\"metaDataContainer.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\">\n\n </span>\n </span>\n <div\n *ngIf=\"metaDataContainer.expanded\"\n class=\"ux-tree__node-metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label.ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0 var(--eui-base-spacing-2xs)!important;padding:10px!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}\n"] }]
|
|
356
|
+
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"eui-tree\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\"\n >\n <div class=\"eui-tree-node-wrapper\">\n <div (click)=\"onNodeClick(treeItemModel)\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel when: hasChild\">\n <li class=\"eui-tree-node\" *ngIf=\"treeItemModel\"\n title=\"{{getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label}}\">\n <div class=\"eui-tree-node-wrapper\">\n <button euiButton euiIconButton euiBasicButton euiSizeS\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle>\n <span euiIcon *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span euiIcon *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&expandedIconClass\"\n [iconClass]=\"expandedIconClass\"\n ></span>\n <eui-icon-svg *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel)&&!collapsedIconClass\" icon=\"eui-chevron-forward\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)&&!expandedIconClass\" icon=\"eui-chevron-down\"></eui-icon-svg>\n </button>\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-u-flex\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef||nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect:onSelectFn(treeItemModel?.path,treeItemModel),\n id:uid+treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=id>\n <ng-container *ngIf=\"node\">\n <!--input checkbox area-->\n <input euiInputCheckBox *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{id}}\"\n [checked]=\"node && node.isSelected\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-s\"\n >\n <!--type (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.typeClass||'primary'\"\n class=\"eui-u-mr-s\">\n {{node?.treeContentBlock?.typeLabel}}\n </eui-badge>\n </ng-container>\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon euiSizeM\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass||'primary'\"\n iconClass=\"{{node?.treeContentBlock?.iconClass}}\"\n class=\"eui-u-mr-s\">\n </eui-icon>\n </ng-container>\n <!--label area-->\n <label *ngIf=\"!node?.treeContentBlock?.urlExternal\" euiLabel class=\"eui-u-mr-s\"\n for=\"{{id}}\">{{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}</label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{id}}\" class=\"eui-u-mr-s\">\n <a href=\"{{node?.treeContentBlock?.urlExternal}}\"\n target=\"{{node?.treeContentBlock?.urlExternalTarget || 'blank'}}\">\n {{autoTranslate ? (node?.treeContentBlock?.label|translate) : node?.treeContentBlock?.label}}\n </a>\n </label>\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node?.treeContentBlock?.badges\">\n <eui-badge euiSizeM [euiVariant]=\"badge.typeClass||'secondary'\" class=\"eui-u-ml-s\">\n {{badge.label}}\n </eui-badge>\n </ng-container>\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container *ngIf=\"node?.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: {expanded:false}\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button euiButton euiBasicButton euiIconButton euiSizeS (click)=\"metaDataContainer.expanded=!metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\"\n class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node?.treeContentBlock?.metadata,metadata: node?.treeContentBlock?.metadata}\"></ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.eui-tree .eui-tree-node,.eui-tree .eui-tree-node-wrapper{display:flex}.eui-tree .eui-tree-node{flex-direction:column}.eui-tree .eui-tree-node-wrapper{align-items:center;padding:var(--eui-base-spacing-2xs) var(--eui-base-spacing-s)}.eui-tree .eui-tree-node-wrapper .eui-label{white-space:pre-wrap}\n"] }]
|
|
357
357
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { nodes: [{
|
|
358
358
|
type: Input
|
|
359
359
|
}], nodeTemplateRef: [{
|