@skyux/lists 7.1.0 → 7.1.2

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.
@@ -430,7 +430,7 @@ _SkyRepeaterItemComponent_adapterService = new WeakMap(), _SkyRepeaterItemCompon
430
430
  });
431
431
  };
432
432
  SkyRepeaterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: SkyRepeaterItemComponent, deps: [{ token: i1.SkyRepeaterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyRepeaterAdapterService }, { token: i0.ElementRef }, { token: i3.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Component });
433
- SkyRepeaterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.11", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.repeaterGroupClass" } }, queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "required"], outputs: ["change", "checkedChange", "disabledChange"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i7.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [skyAnimationSlide], encapsulation: i0.ViewEncapsulation.None });
433
+ SkyRepeaterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.11", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.repeaterGroupClass" } }, queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "indeterminate", "required"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i7.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [skyAnimationSlide], encapsulation: i0.ViewEncapsulation.None });
434
434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: SkyRepeaterItemComponent, decorators: [{
435
435
  type: Component,
436
436
  args: [{ selector: 'sky-repeater-item', animations: [skyAnimationSlide], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? !!isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async)?.item\"\n [attr.tabIndex]=\"tabindex\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div\n [attr.role]=\"!showInlineForm ? (itemRole$ | async)?.content : undefined\"\n class=\"sky-repeater-item-left\"\n >\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [attr.role]=\"(itemRole$ | async)?.title\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async)?.content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin:5px 10px 5px 0}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"] }]
@@ -487,4 +487,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
487
487
  type: HostListener,
488
488
  args: ['keydown', ['$event']]
489
489
  }] } });
490
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFRdEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxRQUFRLElBQUksa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7QUFJN0YsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCOztHQUVHO0FBUUgsTUFBTSxPQUFPLHdCQUF3QjtJQThObkMsWUFDRSxlQUFtQyxFQUNuQyxjQUFpQyxFQUNqQyxjQUF5QyxFQUN6QyxVQUFzQixFQUN0QixlQUF1Qzs7UUFySXpDOzs7V0FHRztRQUVJLGdCQUFXLEdBQXdCLEtBQUssQ0FBQztRQUVoRDs7V0FFRztRQUVJLGVBQVUsR0FBd0IsS0FB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YztzQkFEcEIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTFDLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJekMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSW5DLDZCQUE2QjtzQkFEbkMsZUFBZTt1QkFBQywrQkFBK0I7Z0JBcUd6QyxTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2t5QW5pbWF0aW9uU2xpZGUgfSBmcm9tICdAc2t5dXgvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTa3lDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHtcbiAgU2t5SW5saW5lRm9ybUNsb3NlQXJncyxcbiAgU2t5SW5saW5lRm9ybUNvbmZpZyxcbn0gZnJvbSAnQHNreXV4L2lubGluZS1mb3JtJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3JlcGVhdGVyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLXJvbGVzLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxubGV0IG5leHRDb250ZW50SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW5kaXZpZHVhbCByZXBlYXRlciBpdGVtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmVwZWF0ZXItaXRlbScsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbc2t5QW5pbWF0aW9uU2xpZGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3QsIG5vbi1kaXNhYmxlZCBpdGVtIHRhYi1mb2N1c2FibGUuXG4gICAqIC0gRGlzYWJsZWQgaXRlbXMgc2hvdWxkIG5vdCBiZSBmb2N1c2FibGUgcGVyIFtXM0NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNrYmRfZGlzYWJsZWRfY29udHJvbHMpLlxuICAgKiAtIE9uZSBpdGVtIHBlciBsaXN0L2dyaWQvbGlzdGJveCBzaG91bGQgYmUgdGFiIGZvY3VzYWJsZSBwZXIgW1czQ10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2dyaWQpLlxuICAgKi9cbiAgcHVibGljIGdldCB0YWJpbmRleCgpOiAwIHwgLTEge1xuICAgIHJldHVybiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZClbMF0gPT09XG4gICAgICB0aGlzXG4gICAgICA/IDBcbiAgICAgIDogLTE7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBleGNsdWRlIGFuIGl0ZW0gd2hlbiBjeWNsaW5nIHRocm91Z2guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuI19pc0Rpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNfaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNfaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSByZXBlYXRlciBpdGVtIHRoYXQgaXMgYXZhaWxhYmxlIGZvciBtdWx0aXBsZSBwdXJwb3NlcyxcbiAgICogc3VjaCBhcyBhY2Nlc3NpYmlsaXR5IGFuZCBpbnN0cnVtZW50YXRpb24uIEZvciBleGFtcGxlLCB0aGUgY29tcG9uZW50IHVzZXMgdGhlIG5hbWUgdG9cbiAgICogY29uc3RydWN0IEFSSUEgbGFiZWxzIGZvciB0aGUgcmVwZWF0ZXIgaXRlbSBjb250cm9sc1xuICAgKiB0byBbc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBidXR0b25zIHRvIGRpc3BsYXkgb24gYW4gaW5saW5lIGZvcm1cbiAgICogd2l0aGluIHRoZSByZXBlYXRlci4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIFthIGBTa3lJbmxpbmVGb3JtQ29uZmlnYCBvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY29uZmlnLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZUZvcm1Db25maWc6IFNreUlubGluZUZvcm1Db25maWcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBbYW4gQW5ndWxhciBgVGVtcGxhdGVSZWZgXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvVGVtcGxhdGVSZWYpIHRvIHVzZVxuICAgKiBhcyBhIHRlbXBsYXRlIHRvIGluc3RhbnRpYXRlIGFuIGlubGluZSBmb3JtIHdpdGhpbiB0aGUgcmVwZWF0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQodmFsdWUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jaXNFeHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVwZWF0ZXIgaXRlbSdzIGNoZWNrYm94IGlzIHNlbGVjdGVkLlxuICAgKiBXaGVuIHVzZXJzIHNlbGVjdCB0aGUgcmVwZWF0ZXIgaXRlbSwgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB5b3VyIG1vZGVsIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzU2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdmFsdWUgIT09IHRoaXMuI19pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLiNfaXNTZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5pc1NlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy4jX2lzU2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTZWxlY3RlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzU2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdXNlcnMgY2FuIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqIFRoZSByZXBlYXRlciBjb21wb25lbnQncyBgcmVvcmRlcmFibGVgIHByb3BlcnR5IG11c3QgYWxzbyBiZSBzZXQgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJlb3JkZXJhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBjaGVja2JveCBpbiB0aGUgbGVmdCBvZiB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYW4gaW5saW5lIGZvcm0gd2l0aGluIHRoZSByZXBlYXRlci5cbiAgICogVXNlcnMgY2FuIHRvZ2dsZSBiZXR3ZWVuIGRpc3BsYXlpbmcgYW5kIGhpZGluZyB0aGUgaW5saW5lIGZvcm0uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0lubGluZUZvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIG9iamVjdCB0aGF0IHRoZSByZXBlYXRlciBjb21wb25lbnQgcmV0dXJucyBmb3IgdGhpcyByZXBlYXRlciBpdGVtXG4gICAqIHdoZW4gdGhlIGBvcmRlckNoYW5nZWAgZXZlbnQgZmlyZXMuIFRoaXMgaXMgcmVxdWlyZWRcbiAgICogaWYgeW91IHNldCB0aGUgYHJlb3JkZXJhYmxlYCBwcm9wZXJ0eSB0byBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFnOiBhbnk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY29sbGFwc2UgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGV4cGFuZCB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSByZXBlYXRlciBpbmNsdWRlcyBhbiBpbmxpbmUgZm9ybSBhbmQgdXNlcnMgY2xvc2UgaXQuIFRoaXMgZXZlbnQgZW1pdHNcbiAgICogW2EgYFNreUlubGluZUZvcm1DbG9zZUFyZ3NgIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY2xvc2VhcmdzLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbmxpbmVGb3JtQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUlubGluZUZvcm1DbG9zZUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IG9yIGNsZWFyIHRoZSBjaGVja2JveCBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGlzU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChTa3lSZXBlYXRlckl0ZW1Db250ZXh0TWVudUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBjb250ZXh0TWVudTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29udGVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIGhhc0l0ZW1Db250ZW50ID0gZmFsc2U7XG5cbiAgcHVibGljIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHVibGljIHNldCBpc0NvbGxhcHNpYmxlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI19pc0NvbGxhcHNpYmxlID0gdmFsdWUgIT09IGZhbHNlO1xuXG4gICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoIXRoaXMuI19pc0NvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQ29sbGFwc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19pc0NvbGxhcHNpYmxlO1xuICB9XG5cbiAgcHVibGljIGl0ZW1Sb2xlJDogT2JzZXJ2YWJsZTxTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGU+O1xuXG4gIHB1YmxpYyByZW9yZGVyQnV0dG9uTGFiZWwgPSAnJztcblxuICBwdWJsaWMgcmVvcmRlclN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHNsaWRlRGlyZWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCByZXBlYXRlckdyb3VwQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3NreS1yZXBlYXRlci1pdGVtLWdyb3VwLScgKyB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVwZWF0ZXJHcm91cElkO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZ3JhYkhhbmRsZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgZ3JhYkhhbmRsZTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtQ29udGVudFJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgaXRlbUNvbnRlbnRSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaXRlbUhlYWRlclJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgaXRlbUhlYWRlclJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5UmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudClcbiAgcHVibGljIHJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzOlxuICAgIHwgUXVlcnlMaXN0PFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQ+XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgI2FkYXB0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI2lzRXhwYW5kZWQgPSB0cnVlO1xuICAja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICNyZW9yZGVyQ2FuY2VsVGV4dCA9ICcnO1xuICAjcmVvcmRlckN1cnJlbnRJbmRleCA9IC0xO1xuICAjcmVvcmRlckZpbmlzaFRleHQgPSAnJztcbiAgI3Jlb3JkZXJJbnN0cnVjdGlvbnMgPSAnJztcbiAgI3Jlb3JkZXJNb3ZlZFRleHQgPSAnJztcbiAgI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uID0gJyc7XG4gICNyZW9yZGVyU3RlcHMgPSAwO1xuICAjcmVwZWF0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlclNlcnZpY2U7XG4gICNyZXNvdXJjZVNlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2U7XG4gICNfaXNDb2xsYXBzaWJsZSA9IHRydWU7XG4gICNfaXNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAjX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVwZWF0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlclNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGFkYXB0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcmVzb3VyY2VTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZSA9IHJlcGVhdGVyU2VydmljZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlID0gYWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlID0gcmVzb3VyY2VTZXJ2aWNlO1xuXG4gICAgdGhpcy4jc2xpZGVGb3JFeHBhbmRlZCgpO1xuXG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKFtcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9jYW5jZWwnKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9maW5pc2gnKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoXG4gICAgICAgICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfaW5zdHJ1Y3Rpb25zJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9vcGVyYXRpb24nKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9tb3ZlZCcpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoW1xuICAgICAgICAgIHJlb3JkZXJDYW5jZWxUZXh0LFxuICAgICAgICAgIHJlb3JkZXJGaW5pc2hUZXh0LFxuICAgICAgICAgIHJlb3JkZXJJbnN0cnVjdGlvbnNUZXh0LFxuICAgICAgICAgIHJlb3JkZXJPcGVyYXRpb25UZXh0LFxuICAgICAgICAgIHJlb3JkZXJNb3ZlZFRleHQsXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyQ2FuY2VsVGV4dCA9IHJlb3JkZXJDYW5jZWxUZXh0O1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJGaW5pc2hUZXh0ID0gcmVvcmRlckZpbmlzaFRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlclN0YXRlRGVzY3JpcHRpb24gPSByZW9yZGVySW5zdHJ1Y3Rpb25zVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gcmVvcmRlck9wZXJhdGlvblRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlck1vdmVkVGV4dCA9IHJlb3JkZXJNb3ZlZFRleHQ7XG4gICAgICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgdGhpcy5jb250ZW50SWQgPSBgc2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudC0keysrbmV4dENvbnRlbnRJZH1gO1xuICAgIHRoaXMuaXRlbVJvbGUkID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1Sb2xlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlckl0ZW0odGhpcyk7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2ZUl0ZW1DaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXNBY3RpdmVWYWx1ZSA9IHRoaXMgPT09IGl0ZW07XG4gICAgICAgIGlmIChuZXdJc0FjdGl2ZVZhbHVlICE9PSB0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IG5ld0lzQWN0aXZlVmFsdWU7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0l0ZW1Db250ZW50ID0gISF0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5sZW5ndGg7XG4gICAgdGhpcy4jdXBkYXRlRXhwYW5kT25Db250ZW50Q2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb2xsYXBzZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZXhwYW5kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pbmxpbmVGb3JtQ2xvc2UuY29tcGxldGUoKTtcbiAgICB0aGlzLmlzU2VsZWN0ZWRDaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS51bnJlZ2lzdGVySXRlbSh0aGlzKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25LZXlkb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIFsnICcsICdFbnRlcicsICdIb21lJywgJ0VuZCcsICdBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5tYXRjaGVzKFxuICAgICAgICAgICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgb3B0aW9uLCBbY29udGVudGVkaXRhYmxlXSwgW2NvbnRlbnRlZGl0YWJsZV0gKidcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbGV0IGFjdGl2YXRlSXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJyAnLCAnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gIXRoaXMuaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgYWN0aXZhdGVJdGVtID0gdGhpcztcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydIb21lJywgJ0VuZCddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdIb21lJykge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0gPT09IHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHNsaWNlRnJvbTogbnVtYmVyO1xuICAgICAgICBsZXQgc2xpY2VUbzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgc2xpY2VGcm9tID0gMDtcbiAgICAgICAgICBzbGljZVRvID0gY3VycmVudEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNsaWNlRnJvbSA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgICAgc2xpY2VUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtc1xuICAgICAgICAgIC5zbGljZShzbGljZUZyb20sIHNsaWNlVG8pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICBhY3RpdmF0ZUl0ZW0gPSAkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgPyBpdGVtcy5wb3AoKSA6IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIGlmICghYWN0aXZhdGVJdGVtKSB7XG4gICAgICAgICAgLy8gV3JhcCBhcm91bmQuXG4gICAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICBzbGljZUZyb20gPSAwO1xuICAgICAgICAgICAgc2xpY2VUbyA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2xpY2VGcm9tID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgICAgIHNsaWNlVG8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zXG4gICAgICAgICAgICAuc2xpY2Uoc2xpY2VGcm9tLCBzbGljZVRvKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9ICRldmVudC5rZXkgPT09ICdBcnJvd1VwJyA/IGl0ZW1zLnBvcCgpIDogaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhY3RpdmF0ZUl0ZW0gJiYgIWFjdGl2YXRlSXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZhdGVJdGVtKGFjdGl2YXRlSXRlbSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKGFjdGl2YXRlSXRlbS4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEVsZW1lbnQpLm1hdGNoZXMoXG4gICAgICAgICAgICAnOmZvY3VzLXdpdGhpbidcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbS5pdGVtUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGVhZGVyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSkge1xuICAgICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCghdGhpcy5pc0V4cGFuZGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hldnJvbkRpcmVjdGlvbkNoYW5nZShkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQoZGlyZWN0aW9uID09PSAndXAnKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlcGVhdGVySXRlbUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBhY3RpdmF0ZSBpdGVtIGlmIGNsaWNraW5nIG9uIHRoZSB0aXRsZSwgY29udGVudCwgb3IgcGFyZW50IGl0ZW0gZGl2LlxuICAgIC8vIFRoaXMgd2lsbCBhdm9pZCBhY2NpZGVudGFsIGFjdGl2YXRpb25zIHdoZW4gY2xpY2tpbmcgaW5zaWRlIGludGVyYWN0aXZlIGVsZW1lbnRzIGxpa2VcbiAgICAvLyB0aGUgZXhwYW5kL2NvbGxhcHNlIGNoZXZyb24sIGRyb3Bkb3duLCBpbmxpbmUtZGVsZXRlLCBldGMuLi5cbiAgICBpZiAoXG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuaXRlbVJlZj8ubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5pdGVtQ29udGVudFJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XG4gICAgICB0aGlzLml0ZW1IZWFkZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9yRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlID09PSBmYWxzZSAmJiB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNldHRpbmcgaXNFeHBhbmRlZCB0byBmYWxzZSB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGlzIG5vdCBjb2xsYXBzaWJsZVxuICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNpc0V4cGFuZGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy4jaXNFeHBhbmRlZCA9IHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy4jaXNFeHBhbmRlZCkge1xuICAgICAgICB0aGlzLmV4cGFuZC5lbWl0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbGxhcHNlLmVtaXQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9uSXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLiNzbGlkZUZvckV4cGFuZGVkKCk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGVja2JveENoYW5nZSh2YWx1ZTogU2t5Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2VsZWN0ZWQgPSB2YWx1ZS5jaGVja2VkO1xuICB9XG5cbiAgcHVibGljIG9uSW5saW5lRm9ybUNsb3NlKGlubGluZUZvcm1DbG9zZUFyZ3M6IFNreUlubGluZUZvcm1DbG9zZUFyZ3MpOiB2b2lkIHtcbiAgICB0aGlzLmlubGluZUZvcm1DbG9zZS5lbWl0KGlubGluZUZvcm1DbG9zZUFyZ3MpO1xuICB9XG5cbiAgcHVibGljIG1vdmVUb1RvcChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFbGVtZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlb3JkZXJIYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgICAgICB0aGlzLiNrZXlib2FyZFRvZ2dsZVJlb3JkZXIoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4jcmV2ZXJ0UmVvcmRlclN0ZXBzKCk7XG4gICAgICAgICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9XG4gICAgICAgICAgICAgIHRoaXMuI3Jlb3JkZXJDYW5jZWxUZXh0ICsgJyAnICsgdGhpcy4jcmVvcmRlckluc3RydWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyVXAoKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyRG93bigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dsZWZ0JzpcbiAgICAgICAgY2FzZSAnYXJyb3dyaWdodCc6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblJlb3JkZXJIYW5kbGVCbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy4jcmV2ZXJ0UmVvcmRlclN0ZXBzKCk7XG4gICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMucmVvcmRlclN0YXRlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI3NsaWRlRm9yRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zbGlkZURpcmVjdGlvbiA9IHRoaXMuaXNFeHBhbmRlZCA/ICdkb3duJyA6ICd1cCc7XG4gIH1cblxuICAja2V5Ym9hcmRSZW9yZGVyVXAoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgICBpZiAobmV3SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzLS07XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkUmVvcmRlckRvd24oKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbURvd24oXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzKys7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gIXRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQ7XG4gICAgdGhpcy4jcmVvcmRlclN0ZXBzID0gMDtcblxuICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICB0aGlzLnJlb3JkZXJTdGF0ZSA9IHRoaXMuI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBOZWVkcyBpbXByb3ZlbWVudCB0byBiZSBsb2NhbGl6YWJsZVxuICAgICAgdGhpcy5yZW9yZGVyU3RhdGUgPSBgJHt0aGlzLiNyZW9yZGVyRmluaXNoVGV4dH0gJHtcbiAgICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCArIDFcbiAgICAgIH0gJHt0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zfWA7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgI3JldmVydFJlb3JkZXJTdGVwcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jcmVvcmRlclN0ZXBzIDwgMCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1Eb3duKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIE1hdGguYWJzKHRoaXMuI3Jlb3JkZXJTdGVwcylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNyZW9yZGVyU3RlcHMgPiAwKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLiNyZW9yZGVyU3RlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gIH1cblxuICAjdXBkYXRlRXhwYW5kT25Db250ZW50Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/LmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0l0ZW1Db250ZW50ID0gISF0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5sZW5ndGg7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHRoaXMuaXNDb2xsYXBzaWJsZSA9XG4gICAgICAgICAgdGhpcy5oYXNJdGVtQ29udGVudCAmJiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZSAhPT0gJ25vbmUnO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmV4cGFuZE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9uSXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2UodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0gc2t5LXBhZGRpbmctZXZlbi1kZWZhdWx0XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtTmFtZVwiXG4gIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0YWJsZSA/ICEhaXNTZWxlY3RlZCA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uaXRlbVwiXG4gIFthdHRyLnRhYkluZGV4XT1cInRhYmluZGV4XCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdza3ktcmVwZWF0ZXItaXRlbS1hY3RpdmUnOiBpc0FjdGl2ZSxcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tY29sbGFwc2libGUnOiBpc0NvbGxhcHNpYmxlLFxuICAgICdza3ktcmVwZWF0ZXItaXRlbS1zZWxlY3RlZCc6IGlzU2VsZWN0ZWRcbiAgfVwiXG4gIChjbGljayk9XCJvblJlcGVhdGVySXRlbUNsaWNrKCRldmVudClcIlxuICAjaXRlbVJlZlxuPlxuICA8ZGl2ICNpbmxpbmVEZWxldGU+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWlubGluZS1kZWxldGVcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmxpbmVGb3JtVGVtcGxhdGVcIj5cbiAgICA8c2t5LWlubGluZS1mb3JtXG4gICAgICBbY29uZmlnXT1cImlubGluZUZvcm1Db25maWdcIlxuICAgICAgW3Nob3dGb3JtXT1cInNob3dJbmxpbmVGb3JtXCJcbiAgICAgIFt0ZW1wbGF0ZV09XCJpbmxpbmVGb3JtVGVtcGxhdGVcIlxuICAgICAgKGNsb3NlKT1cIm9uSW5saW5lRm9ybUNsb3NlKCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1MZWZ0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NreS1pbmxpbmUtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmxpbmVGb3JtVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NreVJlcGVhdGVySXRlbUxlZnQ+XG4gIDxkaXZcbiAgICBbYXR0ci5yb2xlXT1cIiFzaG93SW5saW5lRm9ybSA/IChpdGVtUm9sZSQgfCBhc3luYyk/LmNvbnRlbnQgOiB1bmRlZmluZWRcIlxuICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tbGVmdFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVvcmRlcmFibGVcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgIFtpZF09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItc3RhdGUnXCJcbiAgICAgID5cbiAgICAgICAge3sgcmVvcmRlclN0YXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNreS1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICBbaWRdPVwiY29udGVudElkICsgJy1yZW9yZGVyLWluc3RydWN0aW9ucydcIlxuICAgICAgICA+e3sgcmVvcmRlckJ1dHRvbkxhYmVsIH19PC9zcGFuXG4gICAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktdGlsZS10b29scy1jb250cm9sIHNreS1yZXBlYXRlci1pdGVtLWdyYWItaGFuZGxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY29udGVudElkICsgJy1yZW9yZGVyLWluc3RydWN0aW9ucydcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2xhYmVsJyB8IHNreUxpYlJlc291cmNlczogaXRlbU5hbWUpXG4gICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2xhYmVsX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoYmx1cik9XCJvblJlb3JkZXJIYW5kbGVCbHVyKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblJlb3JkZXJIYW5kbGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAjZ3JhYkhhbmRsZVxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93cy12XCI+PC9za3ktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxza3ktY2hlY2tib3hcbiAgICAgICpuZ0lmPVwic2VsZWN0YWJsZVwiXG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZWNrYm94XCJcbiAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIlxuICAgICAgW2xhYmVsXT1cIlxuICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2NoZWNrYm94X2xhYmVsJyB8IHNreUxpYlJlc291cmNlczogaXRlbU5hbWUpXG4gICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY2hlY2tib3hfbGFiZWxfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICBcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3NreS1jaGVja2JveD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudVwiXG4gICAgICBbaGlkZGVuXT1cImNvbnRleHRNZW51RWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCJcbiAgICAgICNjb250ZXh0TWVudUVsXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2t5UmVwZWF0ZXJJdGVtUmlnaHQ+XG4gIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1yaWdodFwiICNpdGVtSGVhZGVyUmVmPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0taGVhZGVyXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8udGl0bGVcIlxuICAgICAgW2hpZGRlbl09XCJ0aXRsZVJlZi5jaGlsZHJlbi5sZW5ndGggPT09IDBcIlxuICAgICAgKGNsaWNrKT1cImhlYWRlckNsaWNrKClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZSBza3ktZW1waGFzaXplZFwiICN0aXRsZVJlZj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tdGl0bGVcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWxpbmsgc2t5LXJlcGVhdGVyLWl0ZW0tcmVvcmRlci10b3BcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl90b3BfbGFiZWwnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wX2xhYmVsX2RlZmF1bHQnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVRvVG9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93LWNpcmNsZS11cFwiPjwvc2t5LWljb24+XG4gICAgICAgIHt7ICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsYXBzaWJsZVwiIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvblwiPlxuICAgICAgICA8c2t5LWNoZXZyb25cbiAgICAgICAgICBbYXJpYUNvbnRyb2xzXT1cImNvbnRlbnRJZFwiXG4gICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZCcgfCBza3lMaWJSZXNvdXJjZXM6IGl0ZW1OYW1lKVxuICAgICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9leHBhbmRfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cImlzRXhwYW5kZWQgPyAndXAnIDogJ2Rvd24nXCJcbiAgICAgICAgICAoZGlyZWN0aW9uQ2hhbmdlKT1cImNoZXZyb25EaXJlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktY2hldnJvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBVc2VkIGZvciB3aGVuIHRoZSBjaGV2cm9uIGlzIGhpZGRlbiB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQ29sbGFwc2libGUgJiYgIWNvbnRleHRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uLXBsYWNlaG9sZGVyXCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDwhLS0gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29udGV4dE1lbnVcIlxuICAgICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZXZyb24tcGxhY2Vob2xkZXItd2l0aC1jb250ZXh0XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRlbnRcIlxuICAgICAgW2lkXT1cImNvbnRlbnRJZFwiXG4gICAgICBbQHNreUFuaW1hdGlvblNsaWRlXT1cInNsaWRlRGlyZWN0aW9uXCJcbiAgICAgICNpdGVtQ29udGVudFJlZlxuICAgICAgW2F0dHIucm9sZV09XCIoaXRlbVJvbGUkIHwgYXN5bmMpPy5jb250ZW50XCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFRdEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxRQUFRLElBQUksa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7QUFJN0YsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCOztHQUVHO0FBUUgsTUFBTSxPQUFPLHdCQUF3QjtJQThObkMsWUFDRSxlQUFtQyxFQUNuQyxjQUFpQyxFQUNqQyxjQUF5QyxFQUN6QyxVQUFzQixFQUN0QixlQUF1Qzs7UUFySXpDOzs7V0FHRztRQUVJLGdCQUFXLEdBQXdCLEtBQUssQ0FBQztRQUVoRDs7V0FFRztRQUVJLGVBQVUsR0FBd0IsS0FB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YztzQkFEcEIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTFDLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJekMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSW5DLDZCQUE2QjtzQkFEbkMsZUFBZTt1QkFBQywrQkFBK0I7Z0JBcUd6QyxTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2t5QW5pbWF0aW9uU2xpZGUgfSBmcm9tICdAc2t5dXgvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTa3lDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHtcbiAgU2t5SW5saW5lRm9ybUNsb3NlQXJncyxcbiAgU2t5SW5saW5lRm9ybUNvbmZpZyxcbn0gZnJvbSAnQHNreXV4L2lubGluZS1mb3JtJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3JlcGVhdGVyLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Db250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLXJvbGVzLnR5cGUnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci5zZXJ2aWNlJztcblxubGV0IG5leHRDb250ZW50SWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW5kaXZpZHVhbCByZXBlYXRlciBpdGVtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmVwZWF0ZXItaXRlbScsXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbc2t5QW5pbWF0aW9uU2xpZGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3QsIG5vbi1kaXNhYmxlZCBpdGVtIHRhYi1mb2N1c2FibGUuXG4gICAqIC0gRGlzYWJsZWQgaXRlbXMgc2hvdWxkIG5vdCBiZSBmb2N1c2FibGUgcGVyIFtXM0NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNrYmRfZGlzYWJsZWRfY29udHJvbHMpLlxuICAgKiAtIE9uZSBpdGVtIHBlciBsaXN0L2dyaWQvbGlzdGJveCBzaG91bGQgYmUgdGFiIGZvY3VzYWJsZSBwZXIgW1czQ10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2dyaWQpLlxuICAgKi9cbiAgcHVibGljIGdldCB0YWJpbmRleCgpOiAwIHwgLTEge1xuICAgIHJldHVybiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZClbMF0gPT09XG4gICAgICB0aGlzXG4gICAgICA/IDBcbiAgICAgIDogLTE7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBleGNsdWRlIGFuIGl0ZW0gd2hlbiBjeWNsaW5nIHRocm91Z2guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuI19pc0Rpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNfaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNfaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19pc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSByZXBlYXRlciBpdGVtIHRoYXQgaXMgYXZhaWxhYmxlIGZvciBtdWx0aXBsZSBwdXJwb3NlcyxcbiAgICogc3VjaCBhcyBhY2Nlc3NpYmlsaXR5IGFuZCBpbnN0cnVtZW50YXRpb24uIEZvciBleGFtcGxlLCB0aGUgY29tcG9uZW50IHVzZXMgdGhlIG5hbWUgdG9cbiAgICogY29uc3RydWN0IEFSSUEgbGFiZWxzIGZvciB0aGUgcmVwZWF0ZXIgaXRlbSBjb250cm9sc1xuICAgKiB0byBbc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBidXR0b25zIHRvIGRpc3BsYXkgb24gYW4gaW5saW5lIGZvcm1cbiAgICogd2l0aGluIHRoZSByZXBlYXRlci4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIFthIGBTa3lJbmxpbmVGb3JtQ29uZmlnYCBvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY29uZmlnLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZUZvcm1Db25maWc6IFNreUlubGluZUZvcm1Db25maWcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBbYW4gQW5ndWxhciBgVGVtcGxhdGVSZWZgXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvVGVtcGxhdGVSZWYpIHRvIHVzZVxuICAgKiBhcyBhIHRlbXBsYXRlIHRvIGluc3RhbnRpYXRlIGFuIGlubGluZSBmb3JtIHdpdGhpbiB0aGUgcmVwZWF0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5saW5lRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQodmFsdWUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jaXNFeHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVwZWF0ZXIgaXRlbSdzIGNoZWNrYm94IGlzIHNlbGVjdGVkLlxuICAgKiBXaGVuIHVzZXJzIHNlbGVjdCB0aGUgcmVwZWF0ZXIgaXRlbSwgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB5b3VyIG1vZGVsIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzU2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdmFsdWUgIT09IHRoaXMuI19pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLiNfaXNTZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5pc1NlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy4jX2lzU2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTZWxlY3RlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzU2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdXNlcnMgY2FuIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqIFRoZSByZXBlYXRlciBjb21wb25lbnQncyBgcmVvcmRlcmFibGVgIHByb3BlcnR5IG11c3QgYWxzbyBiZSBzZXQgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJlb3JkZXJhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBjaGVja2JveCBpbiB0aGUgbGVmdCBvZiB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYW4gaW5saW5lIGZvcm0gd2l0aGluIHRoZSByZXBlYXRlci5cbiAgICogVXNlcnMgY2FuIHRvZ2dsZSBiZXR3ZWVuIGRpc3BsYXlpbmcgYW5kIGhpZGluZyB0aGUgaW5saW5lIGZvcm0uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0lubGluZUZvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIG9iamVjdCB0aGF0IHRoZSByZXBlYXRlciBjb21wb25lbnQgcmV0dXJucyBmb3IgdGhpcyByZXBlYXRlciBpdGVtXG4gICAqIHdoZW4gdGhlIGBvcmRlckNoYW5nZWAgZXZlbnQgZmlyZXMuIFRoaXMgaXMgcmVxdWlyZWRcbiAgICogaWYgeW91IHNldCB0aGUgYHJlb3JkZXJhYmxlYCBwcm9wZXJ0eSB0byBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFnOiBhbnk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY29sbGFwc2UgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGV4cGFuZCB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSByZXBlYXRlciBpbmNsdWRlcyBhbiBpbmxpbmUgZm9ybSBhbmQgdXNlcnMgY2xvc2UgaXQuIFRoaXMgZXZlbnQgZW1pdHNcbiAgICogW2EgYFNreUlubGluZUZvcm1DbG9zZUFyZ3NgIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9pbmxpbmUtZm9ybSNza3lpbmxpbmVmb3JtY2xvc2VhcmdzLXByb3BlcnRpZXMpLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbmxpbmVGb3JtQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUlubGluZUZvcm1DbG9zZUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IG9yIGNsZWFyIHRoZSBjaGVja2JveCBmb3IgdGhlIHJlcGVhdGVyIGl0ZW0uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGlzU2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChTa3lSZXBlYXRlckl0ZW1Db250ZXh0TWVudUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBjb250ZXh0TWVudTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29udGVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIGhhc0l0ZW1Db250ZW50ID0gZmFsc2U7XG5cbiAgcHVibGljIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHVibGljIHNldCBpc0NvbGxhcHNpYmxlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI19pc0NvbGxhcHNpYmxlID0gdmFsdWUgIT09IGZhbHNlO1xuXG4gICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoIXRoaXMuI19pc0NvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQ29sbGFwc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19pc0NvbGxhcHNpYmxlO1xuICB9XG5cbiAgcHVibGljIGl0ZW1Sb2xlJDogT2JzZXJ2YWJsZTxTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGU+O1xuXG4gIHB1YmxpYyByZW9yZGVyQnV0dG9uTGFiZWwgPSAnJztcblxuICBwdWJsaWMgcmVvcmRlclN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHNsaWRlRGlyZWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCByZXBlYXRlckdyb3VwQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3NreS1yZXBlYXRlci1pdGVtLWdyb3VwLScgKyB0aGlzLiNyZXBlYXRlclNlcnZpY2UucmVwZWF0ZXJHcm91cElkO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZ3JhYkhhbmRsZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgZ3JhYkhhbmRsZTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtQ29udGVudFJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgaXRlbUNvbnRlbnRSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnaXRlbUhlYWRlclJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgaXRlbUhlYWRlclJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdpdGVtUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBpdGVtUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5UmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudClcbiAgcHVibGljIHJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzOlxuICAgIHwgUXVlcnlMaXN0PFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQ+XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgI2FkYXB0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI2lzRXhwYW5kZWQgPSB0cnVlO1xuICAja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICNyZW9yZGVyQ2FuY2VsVGV4dCA9ICcnO1xuICAjcmVvcmRlckN1cnJlbnRJbmRleCA9IC0xO1xuICAjcmVvcmRlckZpbmlzaFRleHQgPSAnJztcbiAgI3Jlb3JkZXJJbnN0cnVjdGlvbnMgPSAnJztcbiAgI3Jlb3JkZXJNb3ZlZFRleHQgPSAnJztcbiAgI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uID0gJyc7XG4gICNyZW9yZGVyU3RlcHMgPSAwO1xuICAjcmVwZWF0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlclNlcnZpY2U7XG4gICNyZXNvdXJjZVNlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2U7XG4gICNfaXNDb2xsYXBzaWJsZSA9IHRydWU7XG4gICNfaXNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAjX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVwZWF0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlclNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGFkYXB0ZXJTZXJ2aWNlOiBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcmVzb3VyY2VTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZSA9IHJlcGVhdGVyU2VydmljZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlID0gYWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jcmVzb3VyY2VTZXJ2aWNlID0gcmVzb3VyY2VTZXJ2aWNlO1xuXG4gICAgdGhpcy4jc2xpZGVGb3JFeHBhbmRlZCgpO1xuXG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKFtcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9jYW5jZWwnKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9maW5pc2gnKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoXG4gICAgICAgICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfaW5zdHJ1Y3Rpb25zJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9vcGVyYXRpb24nKSxcbiAgICAgIHRoaXMuI3Jlc291cmNlU2VydmljZS5nZXRTdHJpbmcoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl9tb3ZlZCcpLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoW1xuICAgICAgICAgIHJlb3JkZXJDYW5jZWxUZXh0LFxuICAgICAgICAgIHJlb3JkZXJGaW5pc2hUZXh0LFxuICAgICAgICAgIHJlb3JkZXJJbnN0cnVjdGlvbnNUZXh0LFxuICAgICAgICAgIHJlb3JkZXJPcGVyYXRpb25UZXh0LFxuICAgICAgICAgIHJlb3JkZXJNb3ZlZFRleHQsXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVyQ2FuY2VsVGV4dCA9IHJlb3JkZXJDYW5jZWxUZXh0O1xuICAgICAgICAgIHRoaXMuI3Jlb3JkZXJGaW5pc2hUZXh0ID0gcmVvcmRlckZpbmlzaFRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlclN0YXRlRGVzY3JpcHRpb24gPSByZW9yZGVySW5zdHJ1Y3Rpb25zVGV4dDtcbiAgICAgICAgICB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zID0gcmVvcmRlck9wZXJhdGlvblRleHQ7XG4gICAgICAgICAgdGhpcy4jcmVvcmRlck1vdmVkVGV4dCA9IHJlb3JkZXJNb3ZlZFRleHQ7XG4gICAgICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgdGhpcy5jb250ZW50SWQgPSBgc2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudC0keysrbmV4dENvbnRlbnRJZH1gO1xuICAgIHRoaXMuaXRlbVJvbGUkID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1Sb2xlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlckl0ZW0odGhpcyk7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2ZUl0ZW1DaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXNBY3RpdmVWYWx1ZSA9IHRoaXMgPT09IGl0ZW07XG4gICAgICAgIGlmIChuZXdJc0FjdGl2ZVZhbHVlICE9PSB0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IG5ld0lzQWN0aXZlVmFsdWU7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0l0ZW1Db250ZW50ID0gISF0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5sZW5ndGg7XG4gICAgdGhpcy4jdXBkYXRlRXhwYW5kT25Db250ZW50Q2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb2xsYXBzZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZXhwYW5kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pbmxpbmVGb3JtQ2xvc2UuY29tcGxldGUoKTtcbiAgICB0aGlzLmlzU2VsZWN0ZWRDaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS51bnJlZ2lzdGVySXRlbSh0aGlzKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25LZXlkb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIFsnICcsICdFbnRlcicsICdIb21lJywgJ0VuZCcsICdBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5tYXRjaGVzKFxuICAgICAgICAgICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgb3B0aW9uLCBbY29udGVudGVkaXRhYmxlXSwgW2NvbnRlbnRlZGl0YWJsZV0gKidcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbGV0IGFjdGl2YXRlSXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChbJyAnLCAnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gIXRoaXMuaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgYWN0aXZhdGVJdGVtID0gdGhpcztcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydIb21lJywgJ0VuZCddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdIb21lJykge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aXZhdGVJdGVtID0gaXRlbXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoWydBcnJvd1VwJywgJ0Fycm93RG93biddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0gPT09IHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHNsaWNlRnJvbTogbnVtYmVyO1xuICAgICAgICBsZXQgc2xpY2VUbzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgc2xpY2VGcm9tID0gMDtcbiAgICAgICAgICBzbGljZVRvID0gY3VycmVudEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNsaWNlRnJvbSA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgICAgc2xpY2VUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtc1xuICAgICAgICAgIC5zbGljZShzbGljZUZyb20sIHNsaWNlVG8pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICBhY3RpdmF0ZUl0ZW0gPSAkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgPyBpdGVtcy5wb3AoKSA6IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIGlmICghYWN0aXZhdGVJdGVtKSB7XG4gICAgICAgICAgLy8gV3JhcCBhcm91bmQuXG4gICAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICBzbGljZUZyb20gPSAwO1xuICAgICAgICAgICAgc2xpY2VUbyA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2xpY2VGcm9tID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgICAgIHNsaWNlVG8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1zXG4gICAgICAgICAgICAuc2xpY2Uoc2xpY2VGcm9tLCBzbGljZVRvKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICAgIGFjdGl2YXRlSXRlbSA9ICRldmVudC5rZXkgPT09ICdBcnJvd1VwJyA/IGl0ZW1zLnBvcCgpIDogaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhY3RpdmF0ZUl0ZW0gJiYgIWFjdGl2YXRlSXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuYWN0aXZhdGVJdGVtKGFjdGl2YXRlSXRlbSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKGFjdGl2YXRlSXRlbS4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEVsZW1lbnQpLm1hdGNoZXMoXG4gICAgICAgICAgICAnOmZvY3VzLXdpdGhpbidcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGFjdGl2YXRlSXRlbS5pdGVtUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGVhZGVyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzaWJsZSkge1xuICAgICAgdGhpcy51cGRhdGVGb3JFeHBhbmRlZCghdGhpcy5pc0V4cGFuZGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hldnJvbkRpcmVjdGlvbkNoYW5nZShkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9yRXhwYW5kZWQoZGlyZWN0aW9uID09PSAndXAnKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlcGVhdGVySXRlbUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBhY3RpdmF0ZSBpdGVtIGlmIGNsaWNraW5nIG9uIHRoZSB0aXRsZSwgY29udGVudCwgb3IgcGFyZW50IGl0ZW0gZGl2LlxuICAgIC8vIFRoaXMgd2lsbCBhdm9pZCBhY2NpZGVudGFsIGFjdGl2YXRpb25zIHdoZW4gY2xpY2tpbmcgaW5zaWRlIGludGVyYWN0aXZlIGVsZW1lbnRzIGxpa2VcbiAgICAvLyB0aGUgZXhwYW5kL2NvbGxhcHNlIGNoZXZyb24sIGRyb3Bkb3duLCBpbmxpbmUtZGVsZXRlLCBldGMuLi5cbiAgICBpZiAoXG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuaXRlbVJlZj8ubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5pdGVtQ29udGVudFJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XG4gICAgICB0aGlzLml0ZW1IZWFkZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9yRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNpYmxlID09PSBmYWxzZSAmJiB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNldHRpbmcgaXNFeHBhbmRlZCB0byBmYWxzZSB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGlzIG5vdCBjb2xsYXBzaWJsZVxuICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNpc0V4cGFuZGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy4jaXNFeHBhbmRlZCA9IHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy4jaXNFeHBhbmRlZCkge1xuICAgICAgICB0aGlzLmV4cGFuZC5lbWl0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbGxhcHNlLmVtaXQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9uSXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLiNzbGlkZUZvckV4cGFuZGVkKCk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGVja2JveENoYW5nZSh2YWx1ZTogU2t5Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2VsZWN0ZWQgPSB2YWx1ZS5jaGVja2VkO1xuICB9XG5cbiAgcHVibGljIG9uSW5saW5lRm9ybUNsb3NlKGlubGluZUZvcm1DbG9zZUFyZ3M6IFNreUlubGluZUZvcm1DbG9zZUFyZ3MpOiB2b2lkIHtcbiAgICB0aGlzLmlubGluZUZvcm1DbG9zZS5lbWl0KGlubGluZUZvcm1DbG9zZUFyZ3MpO1xuICB9XG5cbiAgcHVibGljIG1vdmVUb1RvcChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFbGVtZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlb3JkZXJIYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgICAgICB0aGlzLiNrZXlib2FyZFRvZ2dsZVJlb3JkZXIoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4jcmV2ZXJ0UmVvcmRlclN0ZXBzKCk7XG4gICAgICAgICAgICB0aGlzLnJlb3JkZXJCdXR0b25MYWJlbCA9XG4gICAgICAgICAgICAgIHRoaXMuI3Jlb3JkZXJDYW5jZWxUZXh0ICsgJyAnICsgdGhpcy4jcmVvcmRlckluc3RydWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyVXAoKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy4ja2V5Ym9hcmRSZW9yZGVyRG93bigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlZ2lzdGVyT3JkZXJDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dsZWZ0JzpcbiAgICAgICAgY2FzZSAnYXJyb3dyaWdodCc6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy4ja2V5Ym9hcmRSZW9yZGVyaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblJlb3JkZXJIYW5kbGVCbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy4jcmV2ZXJ0UmVvcmRlclN0ZXBzKCk7XG4gICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSB0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMucmVvcmRlclN0YXRlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI3NsaWRlRm9yRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zbGlkZURpcmVjdGlvbiA9IHRoaXMuaXNFeHBhbmRlZCA/ICdkb3duJyA6ICd1cCc7XG4gIH1cblxuICAja2V5Ym9hcmRSZW9yZGVyVXAoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgICBpZiAobmV3SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzLS07XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkUmVvcmRlckRvd24oKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbURvd24oXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIGlmIChuZXdJbmRleCkge1xuICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy4jcmVvcmRlclN0ZXBzKys7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VsZW1lbnQodGhpcy5ncmFiSGFuZGxlKTtcbiAgICAgIHRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW9yZGVyQnV0dG9uTGFiZWwgPSBgJHt0aGlzLiNyZW9yZGVyTW92ZWRUZXh0fSAke1xuICAgICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ICsgMVxuICAgICAgfWA7XG4gICAgfVxuICB9XG5cbiAgI2tleWJvYXJkVG9nZ2xlUmVvcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkID0gIXRoaXMuI2tleWJvYXJkUmVvcmRlcmluZ0VuYWJsZWQ7XG4gICAgdGhpcy4jcmVvcmRlclN0ZXBzID0gMDtcblxuICAgIGlmICh0aGlzLiNrZXlib2FyZFJlb3JkZXJpbmdFbmFibGVkKSB7XG4gICAgICB0aGlzLnJlb3JkZXJTdGF0ZSA9IHRoaXMuI3Jlb3JkZXJTdGF0ZURlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBOZWVkcyBpbXByb3ZlbWVudCB0byBiZSBsb2NhbGl6YWJsZVxuICAgICAgdGhpcy5yZW9yZGVyU3RhdGUgPSBgJHt0aGlzLiNyZW9yZGVyRmluaXNoVGV4dH0gJHtcbiAgICAgICAgdGhpcy4jcmVvcmRlckN1cnJlbnRJbmRleCArIDFcbiAgICAgIH0gJHt0aGlzLiNyZW9yZGVySW5zdHJ1Y3Rpb25zfWA7XG4gICAgICB0aGlzLiNyZW9yZGVyQ3VycmVudEluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgI3JldmVydFJlb3JkZXJTdGVwcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jcmVvcmRlclN0ZXBzIDwgMCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UubW92ZUl0ZW1Eb3duKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIE1hdGguYWJzKHRoaXMuI3Jlb3JkZXJTdGVwcylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNyZW9yZGVyU3RlcHMgPiAwKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5tb3ZlSXRlbVVwKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLiNyZW9yZGVyU3RlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZWdpc3Rlck9yZGVyQ2hhbmdlKCk7XG4gIH1cblxuICAjdXBkYXRlRXhwYW5kT25Db250ZW50Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMucmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudHM/LmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0l0ZW1Db250ZW50ID0gISF0aGlzLnJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnRzPy5sZW5ndGg7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHRoaXMuaXNDb2xsYXBzaWJsZSA9XG4gICAgICAgICAgdGhpcy5oYXNJdGVtQ29udGVudCAmJiB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZSAhPT0gJ25vbmUnO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmV4cGFuZE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9uSXRlbUNvbGxhcHNlU3RhdGVDaGFuZ2UodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0gc2t5LXBhZGRpbmctZXZlbi1kZWZhdWx0XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtTmFtZVwiXG4gIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0YWJsZSA/ICEhaXNTZWxlY3RlZCA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8uaXRlbVwiXG4gIFthdHRyLnRhYkluZGV4XT1cInRhYmluZGV4XCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdza3ktcmVwZWF0ZXItaXRlbS1hY3RpdmUnOiBpc0FjdGl2ZSxcbiAgICAnc2t5LXJlcGVhdGVyLWl0ZW0tY29sbGFwc2libGUnOiBpc0NvbGxhcHNpYmxlLFxuICAgICdza3ktcmVwZWF0ZXItaXRlbS1zZWxlY3RlZCc6IGlzU2VsZWN0ZWRcbiAgfVwiXG4gIChjbGljayk9XCJvblJlcGVhdGVySXRlbUNsaWNrKCRldmVudClcIlxuICAjaXRlbVJlZlxuPlxuICA8ZGl2ICNpbmxpbmVEZWxldGU+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWlubGluZS1kZWxldGVcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmxpbmVGb3JtVGVtcGxhdGVcIj5cbiAgICA8c2t5LWlubGluZS1mb3JtXG4gICAgICBbY29uZmlnXT1cImlubGluZUZvcm1Db25maWdcIlxuICAgICAgW3Nob3dGb3JtXT1cInNob3dJbmxpbmVGb3JtXCJcbiAgICAgIFt0ZW1wbGF0ZV09XCJpbmxpbmVGb3JtVGVtcGxhdGVcIlxuICAgICAgKGNsb3NlKT1cIm9uSW5saW5lRm9ybUNsb3NlKCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1MZWZ0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NreS1pbmxpbmUtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmxpbmVGb3JtVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2t5UmVwZWF0ZXJJdGVtTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza3lSZXBlYXRlckl0ZW1SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NreVJlcGVhdGVySXRlbUxlZnQ+XG4gIDxkaXZcbiAgICBbYXR0ci5yb2xlXT1cIiFzaG93SW5saW5lRm9ybSA/IChpdGVtUm9sZSQgfCBhc3luYyk/LmNvbnRlbnQgOiB1bmRlZmluZWRcIlxuICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tbGVmdFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVvcmRlcmFibGVcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgIFtpZF09XCJjb250ZW50SWQgKyAnLXJlb3JkZXItc3RhdGUnXCJcbiAgICAgID5cbiAgICAgICAge3sgcmVvcmRlclN0YXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNreS1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICBbaWRdPVwiY29udGVudElkICsgJy1yZW9yZGVyLWluc3RydWN0aW9ucydcIlxuICAgICAgICA+e3sgcmVvcmRlckJ1dHRvbkxhYmVsIH19PC9zcGFuXG4gICAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktdGlsZS10b29scy1jb250cm9sIHNreS1yZXBlYXRlci1pdGVtLWdyYWItaGFuZGxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY29udGVudElkICsgJy1yZW9yZGVyLWluc3RydWN0aW9ucydcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICA/ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2xhYmVsJyB8IHNreUxpYlJlc291cmNlczogaXRlbU5hbWUpXG4gICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9yZW9yZGVyX2xhYmVsX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoYmx1cik9XCJvblJlb3JkZXJIYW5kbGVCbHVyKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblJlb3JkZXJIYW5kbGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAjZ3JhYkhhbmRsZVxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93cy12XCI+PC9za3ktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxza3ktY2hlY2tib3hcbiAgICAgICpuZ0lmPVwic2VsZWN0YWJsZVwiXG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZWNrYm94XCJcbiAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIlxuICAgICAgW2xhYmVsXT1cIlxuICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2NoZWNrYm94X2xhYmVsJyB8IHNreUxpYlJlc291cmNlczogaXRlbU5hbWUpXG4gICAgICAgICAgOiAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fY2hlY2tib3hfbGFiZWxfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICBcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3NreS1jaGVja2JveD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRleHQtbWVudVwiXG4gICAgICBbaGlkZGVuXT1cImNvbnRleHRNZW51RWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCJcbiAgICAgICNjb250ZXh0TWVudUVsXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2t5UmVwZWF0ZXJJdGVtUmlnaHQ+XG4gIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1yaWdodFwiICNpdGVtSGVhZGVyUmVmPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0taGVhZGVyXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiKGl0ZW1Sb2xlJCB8IGFzeW5jKT8udGl0bGVcIlxuICAgICAgW2hpZGRlbl09XCJ0aXRsZVJlZi5jaGlsZHJlbi5sZW5ndGggPT09IDBcIlxuICAgICAgKGNsaWNrKT1cImhlYWRlckNsaWNrKClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS10aXRsZSBza3ktZW1waGFzaXplZFwiICN0aXRsZVJlZj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJlcGVhdGVyLWl0ZW0tdGl0bGVcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWxpbmsgc2t5LXJlcGVhdGVyLWl0ZW0tcmVvcmRlci10b3BcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICBpdGVtTmFtZVxuICAgICAgICAgICAgPyAoJ3NreXV4X3JlcGVhdGVyX2l0ZW1fcmVvcmRlcl90b3BfbGFiZWwnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBpdGVtTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wX2xhYmVsX2RlZmF1bHQnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVRvVG9wKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImFycm93LWNpcmNsZS11cFwiPjwvc2t5LWljb24+XG4gICAgICAgIHt7ICdza3l1eF9yZXBlYXRlcl9pdGVtX3Jlb3JkZXJfdG9wJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsYXBzaWJsZVwiIGNsYXNzPVwic2t5LXJlcGVhdGVyLWl0ZW0tY2hldnJvblwiPlxuICAgICAgICA8c2t5LWNoZXZyb25cbiAgICAgICAgICBbYXJpYUNvbnRyb2xzXT1cImNvbnRlbnRJZFwiXG4gICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgIGl0ZW1OYW1lXG4gICAgICAgICAgICAgID8gKCdza3l1eF9yZXBlYXRlcl9pdGVtX2V4cGFuZCcgfCBza3lMaWJSZXNvdXJjZXM6IGl0ZW1OYW1lKVxuICAgICAgICAgICAgICA6ICgnc2t5dXhfcmVwZWF0ZXJfaXRlbV9leHBhbmRfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cImlzRXhwYW5kZWQgPyAndXAnIDogJ2Rvd24nXCJcbiAgICAgICAgICAoZGlyZWN0aW9uQ2hhbmdlKT1cImNoZXZyb25EaXJlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktY2hldnJvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBVc2VkIGZvciB3aGVuIHRoZSBjaGV2cm9uIGlzIGhpZGRlbiB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQ29sbGFwc2libGUgJiYgIWNvbnRleHRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJza3ktcmVwZWF0ZXItaXRlbS1jaGV2cm9uLXBsYWNlaG9sZGVyXCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDwhLS0gVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgc2lkZSBpcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGxlZnQuLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29udGV4dE1lbnVcIlxuICAgICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNoZXZyb24tcGxhY2Vob2xkZXItd2l0aC1jb250ZXh0XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1yZXBlYXRlci1pdGVtLWNvbnRlbnRcIlxuICAgICAgW2lkXT1cImNvbnRlbnRJZFwiXG4gICAgICBbQHNreUFuaW1hdGlvblNsaWRlXT1cInNsaWRlRGlyZWN0aW9uXCJcbiAgICAgICNpdGVtQ29udGVudFJlZlxuICAgICAgW2F0dHIucm9sZV09XCIoaXRlbVJvbGUkIHwgYXN5bmMpPy5jb250ZW50XCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmVwZWF0ZXItaXRlbS1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,5 +1,5 @@
1
- var _SkyFilterFixtureButton_instances, _SkyFilterFixtureButton_getButtonElement, _SkyFilterFixtureButton_normalizeText;
2
- import { __classPrivateFieldGet } from "tslib";
1
+ var _SkyFilterFixtureButton_instances, _SkyFilterFixtureButton_debugElement, _SkyFilterFixtureButton_fixture, _SkyFilterFixtureButton_getButtonElement, _SkyFilterFixtureButton_normalizeText;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { SkyAppTestUtility } from '@skyux-sdk/testing';
4
4
  /**
5
5
  * Provides information for and interaction with a SKY UX filter button component.
@@ -9,9 +9,11 @@ import { SkyAppTestUtility } from '@skyux-sdk/testing';
9
9
  */
10
10
  export class SkyFilterFixtureButton {
11
11
  constructor(fixture, skyTestId) {
12
- this.fixture = fixture;
13
12
  _SkyFilterFixtureButton_instances.add(this);
14
- this.debugElement = SkyAppTestUtility.getDebugElementByTestId(this.fixture, skyTestId, 'sky-filter-button');
13
+ _SkyFilterFixtureButton_debugElement.set(this, void 0);
14
+ _SkyFilterFixtureButton_fixture.set(this, void 0);
15
+ __classPrivateFieldSet(this, _SkyFilterFixtureButton_fixture, fixture, "f");
16
+ __classPrivateFieldSet(this, _SkyFilterFixtureButton_debugElement, SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-filter-button'), "f");
15
17
  }
16
18
  /**
17
19
  * Click the button to apply the filter.
@@ -21,8 +23,8 @@ export class SkyFilterFixtureButton {
21
23
  if (button instanceof HTMLButtonElement && !button.disabled) {
22
24
  button.click();
23
25
  }
24
- this.fixture.detectChanges();
25
- return this.fixture.whenStable();
26
+ __classPrivateFieldGet(this, _SkyFilterFixtureButton_fixture, "f").detectChanges();
27
+ return __classPrivateFieldGet(this, _SkyFilterFixtureButton_fixture, "f").whenStable();
26
28
  }
27
29
  get button() {
28
30
  const buttonElement = __classPrivateFieldGet(this, _SkyFilterFixtureButton_instances, "m", _SkyFilterFixtureButton_getButtonElement).call(this);
@@ -41,8 +43,8 @@ export class SkyFilterFixtureButton {
41
43
  return __classPrivateFieldGet(this, _SkyFilterFixtureButton_instances, "m", _SkyFilterFixtureButton_normalizeText).call(this, text);
42
44
  }
43
45
  }
44
- _SkyFilterFixtureButton_instances = new WeakSet(), _SkyFilterFixtureButton_getButtonElement = function _SkyFilterFixtureButton_getButtonElement() {
45
- return this.debugElement.nativeElement.querySelector('.sky-filter-btn');
46
+ _SkyFilterFixtureButton_debugElement = new WeakMap(), _SkyFilterFixtureButton_fixture = new WeakMap(), _SkyFilterFixtureButton_instances = new WeakSet(), _SkyFilterFixtureButton_getButtonElement = function _SkyFilterFixtureButton_getButtonElement() {
47
+ return __classPrivateFieldGet(this, _SkyFilterFixtureButton_debugElement, "f").nativeElement.querySelector('.sky-filter-btn');
46
48
  }, _SkyFilterFixtureButton_normalizeText = function _SkyFilterFixtureButton_normalizeText(text) {
47
49
  let retVal = '';
48
50
  if (text) {
@@ -50,4 +52,4 @@ _SkyFilterFixtureButton_instances = new WeakSet(), _SkyFilterFixtureButton_getBu
50
52
  }
51
53
  return retVal;
52
54
  };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZpeHR1cmUtYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3Rlc3Rpbmcvc3JjL2ZpbHRlci9maWx0ZXItZml4dHVyZS1idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFBb0IsT0FBOEIsRUFBRSxTQUFpQjtRQUFqRCxZQUFPLEdBQVAsT0FBTyxDQUF1Qjs7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FDM0QsSUFBSSxDQUFDLE9BQU8sRUFDWixTQUFTLEVBQ1QsbUJBQW1CLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLHVCQUFBLElBQUksbUZBQWtCLE1BQXRCLElBQUksQ0FBb0IsQ0FBQztRQUN4QyxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDM0QsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE1BQU0sYUFBYSxHQUFHLHVCQUFBLElBQUksbUZBQWtCLE1BQXRCLElBQUksQ0FBb0IsQ0FBQztRQUMvQyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUztZQUN2RSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNO1lBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVE7WUFDbkMsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsTUFBTSxJQUFJLEdBQUcsdUJBQUEsSUFBSSxtRkFBa0IsTUFBdEIsSUFBSSxDQUFvQixFQUFFLFNBQVMsQ0FBQztRQUNqRCxPQUFPLHVCQUFBLElBQUksZ0ZBQWUsTUFBbkIsSUFBSSxFQUFnQixJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBYUY7O0lBVkcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMxRSxDQUFDLHlGQUVjLElBQXdCO0lBQ3JDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLElBQUksRUFBRTtRQUNSLE1BQU0sR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1QztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWJ1Z0VsZW1lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudEZpeHR1cmUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuaW1wb3J0IHsgU2t5QXBwVGVzdFV0aWxpdHkgfSBmcm9tICdAc2t5dXgtc2RrL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBTa3lMaXN0c0ZpbHRlckZpeHR1cmVCdXR0b24gfSBmcm9tICcuL2xpc3RzLWZpbHRlci1maXh0dXJlLWJ1dHRvbic7XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGEgU0tZIFVYIGZpbHRlciBidXR0b24gY29tcG9uZW50LlxuICogQnkgdXNpbmcgdGhlIGZpeHR1cmUgQVBJLCBhIHRlc3QgaW5zdWxhdGVzIGl0c2VsZiBhZ2FpbnN0IHVwZGF0ZXMgdG8gdGhlIGludGVybmFsc1xuICogb2YgYSBjb21wb25lbnQsIHN1Y2ggYXMgY2hhbmdpbmcgaXRzIERPTSBzdHJ1Y3R1cmUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreUZpbHRlckZpeHR1cmVCdXR0b24ge1xuICBwcml2YXRlIGRlYnVnRWxlbWVudDogRGVidWdFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+LCBza3lUZXN0SWQ6IHN0cmluZykge1xuICAgIHRoaXMuZGVidWdFbGVtZW50ID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0RGVidWdFbGVtZW50QnlUZXN0SWQoXG4gICAgICB0aGlzLmZpeHR1cmUsXG4gICAgICBza3lUZXN0SWQsXG4gICAgICAnc2t5LWZpbHRlci1idXR0b24nXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGljayB0aGUgYnV0dG9uIHRvIGFwcGx5IHRoZSBmaWx0ZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xpY2tGaWx0ZXJCdXR0b24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLiNnZXRCdXR0b25FbGVtZW50KCk7XG4gICAgaWYgKGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50ICYmICFidXR0b24uZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuICAgIH1cbiAgICB0aGlzLmZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzLmZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBidXR0b24oKTogU2t5TGlzdHNGaWx0ZXJGaXh0dXJlQnV0dG9uIHtcbiAgICBjb25zdCBidXR0b25FbGVtZW50ID0gdGhpcy4jZ2V0QnV0dG9uRWxlbWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICBhcmlhQ29udHJvbHM6IGJ1dHRvbkVsZW1lbnQ/LmdldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpID8/IHVuZGVmaW5lZCxcbiAgICAgIGFyaWFFeHBhbmRlZDogYnV0dG9uRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJykgPT09ICd0cnVlJyxcbiAgICAgIGRpc2FibGVkOiAhIWJ1dHRvbkVsZW1lbnQ/LmRpc2FibGVkLFxuICAgICAgaWQ6IGJ1dHRvbkVsZW1lbnQ/LmlkLFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1dHRvblRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy4jZ2V0QnV0dG9uRWxlbWVudCgpPy5pbm5lclRleHQ7XG4gICAgcmV0dXJuIHRoaXMuI25vcm1hbGl6ZVRleHQodGV4dCk7XG4gIH1cblxuICAjZ2V0QnV0dG9uRWxlbWVudCgpOiBIVE1MQnV0dG9uRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRlYnVnRWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktZmlsdGVyLWJ0bicpO1xuICB9XG5cbiAgI25vcm1hbGl6ZVRleHQodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBsZXQgcmV0VmFsID0gJyc7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHJldFZhbCA9IHRleHQ/LnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gICAgfVxuICAgIHJldHVybiByZXRWYWw7XG4gIH1cbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZpeHR1cmUtYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3Rlc3Rpbmcvc3JjL2ZpbHRlci9maWx0ZXItZml4dHVyZS1idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBWSxPQUE4QixFQUFFLFNBQWlCOztRQUg3RCx1REFBNEI7UUFDNUIsa0RBQWdDO1FBRzlCLHVCQUFBLElBQUksbUNBQVksT0FBTyxNQUFBLENBQUM7UUFDeEIsdUJBQUEsSUFBSSx3Q0FBaUIsaUJBQWlCLENBQUMsdUJBQXVCLENBQzVELE9BQU8sRUFDUCxTQUFTLEVBQ1QsbUJBQW1CLENBQ3BCLE1BQUEsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUI7UUFDNUIsTUFBTSxNQUFNLEdBQUcsdUJBQUEsSUFBSSxtRkFBa0IsTUFBdEIsSUFBSSxDQUFvQixDQUFDO1FBQ3hDLElBQUksTUFBTSxZQUFZLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUMzRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7UUFDRCx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE1BQU0sYUFBYSxHQUFHLHVCQUFBLElBQUksbUZBQWtCLE1BQXRCLElBQUksQ0FBb0IsQ0FBQztRQUMvQyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUztZQUN2RSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNO1lBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVE7WUFDbkMsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsTUFBTSxJQUFJLEdBQUcsdUJBQUEsSUFBSSxtRkFBa0IsTUFBdEIsSUFBSSxDQUFvQixFQUFFLFNBQVMsQ0FBQztRQUNqRCxPQUFPLHVCQUFBLElBQUksZ0ZBQWUsTUFBbkIsSUFBSSxFQUFnQixJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBYUY7O0lBVkcsT0FBTyx1QkFBQSxJQUFJLDRDQUFjLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzNFLENBQUMseUZBRWMsSUFBd0I7SUFDckMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzVDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlYnVnRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eSB9IGZyb20gJ0Bza3l1eC1zZGsvdGVzdGluZyc7XG5cbmltcG9ydCB7IFNreUxpc3RzRmlsdGVyRml4dHVyZUJ1dHRvbiB9IGZyb20gJy4vbGlzdHMtZmlsdGVyLWZpeHR1cmUtYnV0dG9uJztcblxuLyoqXG4gKiBQcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgYW5kIGludGVyYWN0aW9uIHdpdGggYSBTS1kgVVggZmlsdGVyIGJ1dHRvbiBjb21wb25lbnQuXG4gKiBCeSB1c2luZyB0aGUgZml4dHVyZSBBUEksIGEgdGVzdCBpbnN1bGF0ZXMgaXRzZWxmIGFnYWluc3QgdXBkYXRlcyB0byB0aGUgaW50ZXJuYWxzXG4gKiBvZiBhIGNvbXBvbmVudCwgc3VjaCBhcyBjaGFuZ2luZyBpdHMgRE9NIHN0cnVjdHVyZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgU2t5RmlsdGVyRml4dHVyZUJ1dHRvbiB7XG4gICNkZWJ1Z0VsZW1lbnQ6IERlYnVnRWxlbWVudDtcbiAgI2ZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55PjtcblxuICBjb25zdHJ1Y3RvcihmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT4sIHNreVRlc3RJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jZml4dHVyZSA9IGZpeHR1cmU7XG4gICAgdGhpcy4jZGVidWdFbGVtZW50ID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0RGVidWdFbGVtZW50QnlUZXN0SWQoXG4gICAgICBmaXh0dXJlLFxuICAgICAgc2t5VGVzdElkLFxuICAgICAgJ3NreS1maWx0ZXItYnV0dG9uJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgdGhlIGJ1dHRvbiB0byBhcHBseSB0aGUgZmlsdGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsaWNrRmlsdGVyQnV0dG9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy4jZ2V0QnV0dG9uRWxlbWVudCgpO1xuICAgIGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiAhYnV0dG9uLmRpc2FibGVkKSB7XG4gICAgICBidXR0b24uY2xpY2soKTtcbiAgICB9XG4gICAgdGhpcy4jZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIHRoaXMuI2ZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBidXR0b24oKTogU2t5TGlzdHNGaWx0ZXJGaXh0dXJlQnV0dG9uIHtcbiAgICBjb25zdCBidXR0b25FbGVtZW50ID0gdGhpcy4jZ2V0QnV0dG9uRWxlbWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICBhcmlhQ29udHJvbHM6IGJ1dHRvbkVsZW1lbnQ/LmdldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycpID8/IHVuZGVmaW5lZCxcbiAgICAgIGFyaWFFeHBhbmRlZDogYnV0dG9uRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJykgPT09ICd0cnVlJyxcbiAgICAgIGRpc2FibGVkOiAhIWJ1dHRvbkVsZW1lbnQ/LmRpc2FibGVkLFxuICAgICAgaWQ6IGJ1dHRvbkVsZW1lbnQ/LmlkLFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1dHRvblRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy4jZ2V0QnV0dG9uRWxlbWVudCgpPy5pbm5lclRleHQ7XG4gICAgcmV0dXJuIHRoaXMuI25vcm1hbGl6ZVRleHQodGV4dCk7XG4gIH1cblxuICAjZ2V0QnV0dG9uRWxlbWVudCgpOiBIVE1MQnV0dG9uRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLiNkZWJ1Z0VsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2t5LWZpbHRlci1idG4nKTtcbiAgfVxuXG4gICNub3JtYWxpemVUZXh0KHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgbGV0IHJldFZhbCA9ICcnO1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICByZXRWYWwgPSB0ZXh0Py50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0VmFsO1xuICB9XG59XG4iXX0=
@@ -1,3 +1,5 @@
1
+ var _SkyInfiniteScrollFixture_instances, _SkyInfiniteScrollFixture_debugElement, _SkyInfiniteScrollFixture_fixture, _SkyInfiniteScrollFixture_getButton;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
1
3
  import { SkyAppTestUtility } from '@skyux-sdk/testing';
2
4
  /**
3
5
  * Provides information for and interaction with a SKY UX infinite scroll component.
@@ -8,22 +10,25 @@ import { SkyAppTestUtility } from '@skyux-sdk/testing';
8
10
  */
9
11
  export class SkyInfiniteScrollFixture {
10
12
  constructor(fixture, skyTestId) {
11
- this.fixture = fixture;
12
- this.debugElement = SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-infinite-scroll');
13
+ _SkyInfiniteScrollFixture_instances.add(this);
14
+ _SkyInfiniteScrollFixture_debugElement.set(this, void 0);
15
+ _SkyInfiniteScrollFixture_fixture.set(this, void 0);
16
+ __classPrivateFieldSet(this, _SkyInfiniteScrollFixture_fixture, fixture, "f");
17
+ __classPrivateFieldSet(this, _SkyInfiniteScrollFixture_debugElement, SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-infinite-scroll'), "f");
13
18
  }
14
19
  get loadMoreButtonIsVisible() {
15
- return this.getButton() instanceof HTMLButtonElement;
20
+ return __classPrivateFieldGet(this, _SkyInfiniteScrollFixture_instances, "m", _SkyInfiniteScrollFixture_getButton).call(this) instanceof HTMLButtonElement;
16
21
  }
17
22
  async clickLoadMoreButton() {
18
- const button = this.getButton();
23
+ const button = __classPrivateFieldGet(this, _SkyInfiniteScrollFixture_instances, "m", _SkyInfiniteScrollFixture_getButton).call(this);
19
24
  if (button instanceof HTMLButtonElement) {
20
25
  button.click();
21
26
  }
22
- this.fixture.detectChanges();
23
- return this.fixture.whenStable();
24
- }
25
- getButton() {
26
- return this.debugElement.nativeElement.querySelector('.sky-infinite-scroll .sky-btn');
27
+ __classPrivateFieldGet(this, _SkyInfiniteScrollFixture_fixture, "f").detectChanges();
28
+ return __classPrivateFieldGet(this, _SkyInfiniteScrollFixture_fixture, "f").whenStable();
27
29
  }
28
30
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLWZpeHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvdGVzdGluZy9zcmMvaW5maW5pdGUtc2Nyb2xsL2luZmluaXRlLXNjcm9sbC1maXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFHbkMsWUFBb0IsT0FBOEIsRUFBRSxTQUFpQjtRQUFqRCxZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLHVCQUF1QixDQUMzRCxPQUFPLEVBQ1AsU0FBUyxFQUNULHFCQUFxQixDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsdUJBQXVCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLGlCQUFpQixDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsRUFBRTtZQUN2QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sU0FBUztRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUNsRCwrQkFBK0IsQ0FDaEMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlYnVnRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eSB9IGZyb20gJ0Bza3l1eC1zZGsvdGVzdGluZyc7XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGEgU0tZIFVYIGluZmluaXRlIHNjcm9sbCBjb21wb25lbnQuXG4gKiBCeSB1c2luZyB0aGUgZml4dHVyZSBBUEksIGEgdGVzdCBpbnN1bGF0ZXMgaXRzZWxmIGFnYWluc3QgdXBkYXRlcyB0byB0aGUgaW50ZXJuYWxzXG4gKiBvZiBhIGNvbXBvbmVudCwgc3VjaCBhcyBjaGFuZ2luZyBpdHMgRE9NIHN0cnVjdHVyZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgU2t5SW5maW5pdGVTY3JvbGxIYXJuZXNzYCBpbnN0ZWFkLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lJbmZpbml0ZVNjcm9sbEZpeHR1cmUge1xuICBwcml2YXRlIGRlYnVnRWxlbWVudDogRGVidWdFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+LCBza3lUZXN0SWQ6IHN0cmluZykge1xuICAgIHRoaXMuZGVidWdFbGVtZW50ID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0RGVidWdFbGVtZW50QnlUZXN0SWQoXG4gICAgICBmaXh0dXJlLFxuICAgICAgc2t5VGVzdElkLFxuICAgICAgJ3NreS1pbmZpbml0ZS1zY3JvbGwnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVCdXR0b25Jc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9uKCkgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjbGlja0xvYWRNb3JlQnV0dG9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oKTtcbiAgICBpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuICAgIH1cbiAgICB0aGlzLmZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzLmZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVidWdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LWluZmluaXRlLXNjcm9sbCAuc2t5LWJ0bidcbiAgICApO1xuICB9XG59XG4iXX0=
31
+ _SkyInfiniteScrollFixture_debugElement = new WeakMap(), _SkyInfiniteScrollFixture_fixture = new WeakMap(), _SkyInfiniteScrollFixture_instances = new WeakSet(), _SkyInfiniteScrollFixture_getButton = function _SkyInfiniteScrollFixture_getButton() {
32
+ return __classPrivateFieldGet(this, _SkyInfiniteScrollFixture_debugElement, "f").nativeElement.querySelector('.sky-infinite-scroll .sky-btn');
33
+ };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLWZpeHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvdGVzdGluZy9zcmMvaW5maW5pdGUtc2Nyb2xsL2luZmluaXRlLXNjcm9sbC1maXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQUluQyxZQUFZLE9BQThCLEVBQUUsU0FBaUI7O1FBSDdELHlEQUE0QjtRQUM1QixvREFBZ0M7UUFHOUIsdUJBQUEsSUFBSSxxQ0FBWSxPQUFPLE1BQUEsQ0FBQztRQUN4Qix1QkFBQSxJQUFJLDBDQUFpQixpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FDNUQsT0FBTyxFQUNQLFNBQVMsRUFDVCxxQkFBcUIsQ0FDdEIsTUFBQSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsdUJBQXVCO1FBQ2hDLE9BQU8sdUJBQUEsSUFBSSxnRkFBVyxNQUFmLElBQUksQ0FBYSxZQUFZLGlCQUFpQixDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLE1BQU0sTUFBTSxHQUFHLHVCQUFBLElBQUksZ0ZBQVcsTUFBZixJQUFJLENBQWEsQ0FBQztRQUNqQyxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsRUFBRTtZQUN2QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7UUFDRCx1QkFBQSxJQUFJLHlDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsT0FBTyx1QkFBQSxJQUFJLHlDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQU9GOztJQUpHLE9BQU8sdUJBQUEsSUFBSSw4Q0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQ25ELCtCQUErQixDQUNoQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlYnVnRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eSB9IGZyb20gJ0Bza3l1eC1zZGsvdGVzdGluZyc7XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGEgU0tZIFVYIGluZmluaXRlIHNjcm9sbCBjb21wb25lbnQuXG4gKiBCeSB1c2luZyB0aGUgZml4dHVyZSBBUEksIGEgdGVzdCBpbnN1bGF0ZXMgaXRzZWxmIGFnYWluc3QgdXBkYXRlcyB0byB0aGUgaW50ZXJuYWxzXG4gKiBvZiBhIGNvbXBvbmVudCwgc3VjaCBhcyBjaGFuZ2luZyBpdHMgRE9NIHN0cnVjdHVyZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgU2t5SW5maW5pdGVTY3JvbGxIYXJuZXNzYCBpbnN0ZWFkLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lJbmZpbml0ZVNjcm9sbEZpeHR1cmUge1xuICAjZGVidWdFbGVtZW50OiBEZWJ1Z0VsZW1lbnQ7XG4gICNmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT47XG5cbiAgY29uc3RydWN0b3IoZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+LCBza3lUZXN0SWQ6IHN0cmluZykge1xuICAgIHRoaXMuI2ZpeHR1cmUgPSBmaXh0dXJlO1xuICAgIHRoaXMuI2RlYnVnRWxlbWVudCA9IFNreUFwcFRlc3RVdGlsaXR5LmdldERlYnVnRWxlbWVudEJ5VGVzdElkKFxuICAgICAgZml4dHVyZSxcbiAgICAgIHNreVRlc3RJZCxcbiAgICAgICdza3ktaW5maW5pdGUtc2Nyb2xsJ1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRNb3JlQnV0dG9uSXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNnZXRCdXR0b24oKSBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsaWNrTG9hZE1vcmVCdXR0b24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLiNnZXRCdXR0b24oKTtcbiAgICBpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuICAgIH1cbiAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gdGhpcy4jZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cblxuICAjZ2V0QnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLiNkZWJ1Z0VsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5za3ktaW5maW5pdGUtc2Nyb2xsIC5za3ktYnRuJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==