ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
1,071 lines • 90.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: select.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate, __metadata, __read, __spread } from "tslib";
/**
* @license
* Copyright Alibaba.com All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { FocusMonitor } from '@angular/cdk/a11y';
import { DOWN_ARROW, ENTER, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
import { Platform } from '@angular/cdk/platform';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, Host, Input, Optional, Output, QueryList, ViewChild, ViewEncapsulation } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { slideMotion } from 'ng-zorro-antd/core/animation';
import { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation';
import { InputBoolean } from 'ng-zorro-antd/core/util';
import { BehaviorSubject, combineLatest, merge, Subject } from 'rxjs';
import { startWith, switchMap, takeUntil } from 'rxjs/operators';
import { NzOptionGroupComponent } from './option-group.component';
import { NzOptionComponent } from './option.component';
import { NzSelectTopControlComponent } from './select-top-control.component';
/** @type {?} */
var defaultFilterOption = (/**
* @param {?} searchValue
* @param {?} item
* @return {?}
*/
function (searchValue, item) {
if (item && item.nzLabel) {
return item.nzLabel.toLowerCase().indexOf(searchValue.toLowerCase()) > -1;
}
else {
return false;
}
});
var ɵ0 = defaultFilterOption;
var NzSelectComponent = /** @class */ (function () {
function NzSelectComponent(cdr, elementRef, platform, focusMonitor, noAnimation) {
this.cdr = cdr;
this.elementRef = elementRef;
this.platform = platform;
this.focusMonitor = focusMonitor;
this.noAnimation = noAnimation;
this.nzSize = 'default';
this.nzDropdownClassName = null;
this.nzDropdownMatchSelectWidth = true;
this.nzDropdownStyle = null;
this.nzNotFoundContent = undefined;
this.nzPlaceHolder = null;
this.nzMaxTagCount = Infinity;
this.nzDropdownRender = null;
this.nzCustomTemplate = null;
this.nzSuffixIcon = null;
this.nzClearIcon = null;
this.nzRemoveIcon = null;
this.nzMenuItemSelectedIcon = null;
this.nzShowArrow = true;
this.nzTokenSeparators = [];
this.nzMaxTagPlaceholder = null;
this.nzMaxMultipleCount = Infinity;
this.nzMode = 'default';
this.nzFilterOption = defaultFilterOption;
this.compareWith = (/**
* @param {?} o1
* @param {?} o2
* @return {?}
*/
function (o1, o2) { return o1 === o2; });
this.nzAllowClear = false;
this.nzBorderless = false;
this.nzShowSearch = false;
this.nzLoading = false;
this.nzAutoFocus = false;
this.nzAutoClearSearchValue = true;
this.nzServerSearch = false;
this.nzDisabled = false;
this.nzOpen = false;
this.nzOnSearch = new EventEmitter();
this.nzScrollToBottom = new EventEmitter();
this.nzOpenChange = new EventEmitter();
this.nzBlur = new EventEmitter();
this.nzFocus = new EventEmitter();
this.listOfValue$ = new BehaviorSubject([]);
this.listOfTemplateItem$ = new BehaviorSubject([]);
this.listOfTagAndTemplateItem = [];
this.searchValue = '';
this.destroy$ = new Subject();
this.onChange = (/**
* @return {?}
*/
function () { });
this.onTouched = (/**
* @return {?}
*/
function () { });
this.dropDownPosition = 'bottom';
this.triggerWidth = null;
this.listOfContainerItem = [];
this.listOfTopItem = [];
this.activatedValue = null;
this.listOfValue = [];
}
/**
* @param {?} value
* @return {?}
*/
NzSelectComponent.prototype.generateTagItem = /**
* @param {?} value
* @return {?}
*/
function (value) {
return {
nzValue: value,
nzLabel: value,
type: 'item'
};
};
/**
* @param {?} value
* @return {?}
*/
NzSelectComponent.prototype.onItemClick = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.activatedValue = value;
if (this.nzMode === 'default') {
if (this.listOfValue.length === 0 || !this.compareWith(this.listOfValue[0], value)) {
this.updateListOfValue([value]);
}
this.setOpenState(false);
}
else {
/** @type {?} */
var targetIndex_1 = this.listOfValue.findIndex((/**
* @param {?} o
* @return {?}
*/
function (o) { return _this.compareWith(o, value); }));
if (targetIndex_1 !== -1) {
/** @type {?} */
var listOfValueAfterRemoved = this.listOfValue.filter((/**
* @param {?} _
* @param {?} i
* @return {?}
*/
function (_, i) { return i !== targetIndex_1; }));
this.updateListOfValue(listOfValueAfterRemoved);
}
else if (this.listOfValue.length < this.nzMaxMultipleCount) {
/** @type {?} */
var listOfValueAfterAdded = __spread(this.listOfValue, [value]);
this.updateListOfValue(listOfValueAfterAdded);
}
this.focus();
if (this.nzAutoClearSearchValue) {
this.clearInput();
}
}
};
/**
* @param {?} item
* @return {?}
*/
NzSelectComponent.prototype.onItemDelete = /**
* @param {?} item
* @return {?}
*/
function (item) {
var _this = this;
/** @type {?} */
var listOfSelectedValue = this.listOfValue.filter((/**
* @param {?} v
* @return {?}
*/
function (v) { return !_this.compareWith(v, item.nzValue); }));
this.updateListOfValue(listOfSelectedValue);
this.clearInput();
};
/**
* @param {?} value
* @return {?}
*/
NzSelectComponent.prototype.onItemHover = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.activatedValue = value;
};
/**
* @return {?}
*/
NzSelectComponent.prototype.updateListOfContainerItem = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var listOfContainerItem = this.listOfTagAndTemplateItem
.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return !item.nzHide; }))
.filter((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (!_this.nzServerSearch && _this.searchValue) {
return _this.nzFilterOption(_this.searchValue, item);
}
else {
return true;
}
}));
if (this.nzMode === 'tags' &&
this.searchValue &&
this.listOfTagAndTemplateItem.findIndex((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.nzLabel === _this.searchValue; })) === -1) {
/** @type {?} */
var tagItem = this.generateTagItem(this.searchValue);
listOfContainerItem = __spread([tagItem], listOfContainerItem);
this.activatedValue = tagItem.nzValue;
}
if (this.listOfValue.length !== 0 &&
listOfContainerItem.findIndex((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.compareWith(item.nzValue, _this.activatedValue); })) === -1) {
/** @type {?} */
var activatedItem = listOfContainerItem.find((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.compareWith(item.nzValue, _this.listOfValue[0]); })) || listOfContainerItem[0];
this.activatedValue = (activatedItem && activatedItem.nzValue) || null;
}
/** insert group item **/
if (this.listOfNzOptionGroupComponent) {
this.listOfNzOptionGroupComponent.forEach((/**
* @param {?} o
* @return {?}
*/
function (o) {
/** @type {?} */
var groupItem = (/** @type {?} */ ({ groupLabel: o.nzLabel, type: 'group', key: o.nzLabel }));
/** @type {?} */
var index = listOfContainerItem.findIndex((/**
* @param {?} item
* @return {?}
*/
function (item) { return groupItem.groupLabel === item.groupLabel; }));
listOfContainerItem.splice(index, 0, groupItem);
}));
}
this.listOfContainerItem = __spread(listOfContainerItem);
this.updateCdkConnectedOverlayPositions();
};
/**
* @return {?}
*/
NzSelectComponent.prototype.clearInput = /**
* @return {?}
*/
function () {
this.nzSelectTopControlComponent.clearInputValue();
};
/**
* @param {?} listOfValue
* @return {?}
*/
NzSelectComponent.prototype.updateListOfValue = /**
* @param {?} listOfValue
* @return {?}
*/
function (listOfValue) {
/** @type {?} */
var covertListToModel = (/**
* @param {?} list
* @param {?} mode
* @return {?}
*/
function (list, mode) {
if (mode === 'default') {
if (list.length > 0) {
return list[0];
}
else {
return null;
}
}
else {
return list;
}
});
/** @type {?} */
var model = covertListToModel(listOfValue, this.nzMode);
if (this.value !== model) {
this.listOfValue = listOfValue;
this.listOfValue$.next(listOfValue);
this.value = model;
this.onChange(this.value);
}
};
/**
* @param {?} listOfLabel
* @return {?}
*/
NzSelectComponent.prototype.onTokenSeparate = /**
* @param {?} listOfLabel
* @return {?}
*/
function (listOfLabel) {
var _this = this;
/** @type {?} */
var listOfMatchedValue = this.listOfTagAndTemplateItem
.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return listOfLabel.findIndex((/**
* @param {?} label
* @return {?}
*/
function (label) { return label === item.nzLabel; })) !== -1; }))
.map((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.nzValue; }))
.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.listOfValue.findIndex((/**
* @param {?} v
* @return {?}
*/
function (v) { return _this.compareWith(v, item); })) === -1; }));
if (this.nzMode === 'multiple') {
this.updateListOfValue(__spread(this.listOfValue, listOfMatchedValue));
}
else if (this.nzMode === 'tags') {
/** @type {?} */
var listOfUnMatchedLabel = listOfLabel.filter((/**
* @param {?} label
* @return {?}
*/
function (label) { return _this.listOfTagAndTemplateItem.findIndex((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.nzLabel === label; })) === -1; }));
this.updateListOfValue(__spread(this.listOfValue, listOfMatchedValue, listOfUnMatchedLabel));
}
this.clearInput();
};
/**
* @param {?} e
* @return {?}
*/
NzSelectComponent.prototype.onKeyDown = /**
* @param {?} e
* @return {?}
*/
function (e) {
var _this = this;
if (this.nzDisabled) {
return;
}
/** @type {?} */
var listOfFilteredOptionNotDisabled = this.listOfContainerItem.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.type === 'item'; })).filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return !item.nzDisabled; }));
/** @type {?} */
var activatedIndex = listOfFilteredOptionNotDisabled.findIndex((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.compareWith(item.nzValue, _this.activatedValue); }));
switch (e.keyCode) {
case UP_ARROW:
e.preventDefault();
if (this.nzOpen) {
/** @type {?} */
var preIndex = activatedIndex > 0 ? activatedIndex - 1 : listOfFilteredOptionNotDisabled.length - 1;
this.activatedValue = listOfFilteredOptionNotDisabled[preIndex].nzValue;
}
break;
case DOWN_ARROW:
e.preventDefault();
if (this.nzOpen) {
/** @type {?} */
var nextIndex = activatedIndex < listOfFilteredOptionNotDisabled.length - 1 ? activatedIndex + 1 : 0;
this.activatedValue = listOfFilteredOptionNotDisabled[nextIndex].nzValue;
}
else {
this.setOpenState(true);
}
break;
case ENTER:
e.preventDefault();
if (this.nzOpen) {
if (this.activatedValue) {
this.onItemClick(this.activatedValue);
}
}
else {
this.setOpenState(true);
}
break;
case SPACE:
if (!this.nzOpen) {
this.setOpenState(true);
e.preventDefault();
}
break;
case TAB:
this.setOpenState(false);
break;
}
};
/**
* @param {?} value
* @return {?}
*/
NzSelectComponent.prototype.setOpenState = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (this.nzOpen !== value) {
this.nzOpen = value;
this.nzOpenChange.emit(value);
this.onOpenChange();
this.cdr.markForCheck();
}
};
/**
* @return {?}
*/
NzSelectComponent.prototype.onOpenChange = /**
* @return {?}
*/
function () {
this.updateCdkConnectedOverlayStatus();
this.clearInput();
};
/**
* @param {?} value
* @return {?}
*/
NzSelectComponent.prototype.onInputValueChange = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.searchValue = value;
this.updateListOfContainerItem();
this.nzOnSearch.emit(value);
this.updateCdkConnectedOverlayPositions();
};
/**
* @return {?}
*/
NzSelectComponent.prototype.onClearSelection = /**
* @return {?}
*/
function () {
this.updateListOfValue([]);
};
/**
* @return {?}
*/
NzSelectComponent.prototype.focus = /**
* @return {?}
*/
function () {
this.nzSelectTopControlComponent.focus();
};
/**
* @return {?}
*/
NzSelectComponent.prototype.blur = /**
* @return {?}
*/
function () {
this.nzSelectTopControlComponent.blur();
};
/**
* @param {?} position
* @return {?}
*/
NzSelectComponent.prototype.onPositionChange = /**
* @param {?} position
* @return {?}
*/
function (position) {
this.dropDownPosition = position.connectionPair.originY;
};
/**
* @return {?}
*/
NzSelectComponent.prototype.updateCdkConnectedOverlayStatus = /**
* @return {?}
*/
function () {
if (this.platform.isBrowser && this.originElement.nativeElement) {
this.triggerWidth = this.originElement.nativeElement.getBoundingClientRect().width;
}
};
/**
* @return {?}
*/
NzSelectComponent.prototype.updateCdkConnectedOverlayPositions = /**
* @return {?}
*/
function () {
if (this.cdkConnectedOverlay.overlayRef) {
this.cdkConnectedOverlay.overlayRef.updatePosition();
}
};
/**
* @param {?} modelValue
* @return {?}
*/
NzSelectComponent.prototype.writeValue = /**
* @param {?} modelValue
* @return {?}
*/
function (modelValue) {
/** https://github.com/angular/angular/issues/14988 **/
if (this.value !== modelValue) {
this.value = modelValue;
/** @type {?} */
var covertModelToList = (/**
* @param {?} model
* @param {?} mode
* @return {?}
*/
function (model, mode) {
if (model === null || model === undefined) {
return [];
}
else if (mode === 'default') {
return [model];
}
else {
return model;
}
});
/** @type {?} */
var listOfValue = covertModelToList(modelValue, this.nzMode);
this.listOfValue = listOfValue;
this.listOfValue$.next(listOfValue);
this.cdr.markForCheck();
}
};
/**
* @param {?} fn
* @return {?}
*/
NzSelectComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
NzSelectComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onTouched = fn;
};
/**
* @param {?} disabled
* @return {?}
*/
NzSelectComponent.prototype.setDisabledState = /**
* @param {?} disabled
* @return {?}
*/
function (disabled) {
this.nzDisabled = disabled;
if (disabled) {
this.setOpenState(false);
}
this.cdr.markForCheck();
};
/**
* @param {?} changes
* @return {?}
*/
NzSelectComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
var nzOpen = changes.nzOpen, nzDisabled = changes.nzDisabled;
if (nzOpen) {
this.onOpenChange();
}
if (nzDisabled && this.nzDisabled) {
this.setOpenState(false);
}
};
/**
* @return {?}
*/
NzSelectComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.focusMonitor
.monitor(this.elementRef, true)
.pipe(takeUntil(this.destroy$))
.subscribe((/**
* @param {?} focusOrigin
* @return {?}
*/
function (focusOrigin) {
if (!focusOrigin) {
_this.nzBlur.emit();
Promise.resolve().then((/**
* @return {?}
*/
function () {
_this.onTouched();
}));
}
else {
_this.nzFocus.emit();
}
}));
combineLatest([this.listOfValue$, this.listOfTemplateItem$])
.pipe(takeUntil(this.destroy$))
.subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = __read(_a, 2), listOfSelectedValue = _b[0], listOfTemplateItem = _b[1];
/** @type {?} */
var listOfTagItem = listOfSelectedValue
.filter((/**
* @return {?}
*/
function () { return _this.nzMode === 'tags'; }))
.filter((/**
* @param {?} value
* @return {?}
*/
function (value) { return listOfTemplateItem.findIndex((/**
* @param {?} o
* @return {?}
*/
function (o) { return _this.compareWith(o.nzValue, value); })) === -1; }))
.map((/**
* @param {?} value
* @return {?}
*/
function (value) { return _this.listOfTopItem.find((/**
* @param {?} o
* @return {?}
*/
function (o) { return _this.compareWith(o.nzValue, value); })) || _this.generateTagItem(value); }));
_this.listOfTagAndTemplateItem = __spread(listOfTemplateItem, listOfTagItem);
_this.listOfTopItem = _this.listOfValue
.map((/**
* @param {?} v
* @return {?}
*/
function (v) { return (/** @type {?} */ (__spread(_this.listOfTagAndTemplateItem, _this.listOfTopItem).find((/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.compareWith(v, item.nzValue); })))); }))
.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return !!item; }));
_this.updateListOfContainerItem();
}));
};
/**
* @return {?}
*/
NzSelectComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.updateCdkConnectedOverlayStatus();
};
/**
* @return {?}
*/
NzSelectComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
var _this = this;
merge(this.listOfNzOptionGroupComponent.changes, this.listOfNzOptionComponent.changes)
.pipe(startWith(true), switchMap((/**
* @return {?}
*/
function () {
return merge.apply(void 0, __spread([
_this.listOfNzOptionComponent.changes,
_this.listOfNzOptionGroupComponent.changes
], _this.listOfNzOptionComponent.map((/**
* @param {?} option
* @return {?}
*/
function (option) { return option.changes; })), _this.listOfNzOptionGroupComponent.map((/**
* @param {?} option
* @return {?}
*/
function (option) { return option.changes; })))).pipe(startWith(true));
})), takeUntil(this.destroy$))
.subscribe((/**
* @return {?}
*/
function () {
/** @type {?} */
var listOfOptionInterface = _this.listOfNzOptionComponent.toArray().map((/**
* @param {?} item
* @return {?}
*/
function (item) {
var template = item.template, nzLabel = item.nzLabel, nzValue = item.nzValue, nzDisabled = item.nzDisabled, nzHide = item.nzHide, nzCustomContent = item.nzCustomContent, groupLabel = item.groupLabel;
return { template: template, nzLabel: nzLabel, nzValue: nzValue, nzDisabled: nzDisabled, nzHide: nzHide, nzCustomContent: nzCustomContent, groupLabel: groupLabel, type: 'item', key: nzValue };
}));
_this.listOfTemplateItem$.next(listOfOptionInterface);
_this.cdr.markForCheck();
}));
};
/**
* @return {?}
*/
NzSelectComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.destroy$.next();
this.destroy$.complete();
};
NzSelectComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-select',
exportAs: 'nzSelect',
preserveWhitespaces: false,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return NzSelectComponent; })),
multi: true
}
],
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
animations: [slideMotion],
template: "\n <nz-select-top-control\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n [open]=\"nzOpen\"\n [disabled]=\"nzDisabled\"\n [mode]=\"nzMode\"\n [@.disabled]=\"noAnimation?.nzNoAnimation\"\n [nzNoAnimation]=\"noAnimation?.nzNoAnimation\"\n [maxTagPlaceholder]=\"nzMaxTagPlaceholder\"\n [removeIcon]=\"nzRemoveIcon\"\n [placeHolder]=\"nzPlaceHolder\"\n [maxTagCount]=\"nzMaxTagCount\"\n [customTemplate]=\"nzCustomTemplate\"\n [tokenSeparators]=\"nzTokenSeparators\"\n [showSearch]=\"nzShowSearch\"\n [autofocus]=\"nzAutoFocus\"\n [listOfTopItem]=\"listOfTopItem\"\n (inputValueChange)=\"onInputValueChange($event)\"\n (tokenize)=\"onTokenSeparate($event)\"\n (animationEnd)=\"updateCdkConnectedOverlayPositions()\"\n (deleteItem)=\"onItemDelete($event)\"\n (keydown)=\"onKeyDown($event)\"\n (openChange)=\"setOpenState($event)\"\n ></nz-select-top-control>\n <nz-select-clear\n *ngIf=\"nzAllowClear && !nzDisabled && listOfValue.length\"\n [clearIcon]=\"nzClearIcon\"\n (clear)=\"onClearSelection()\"\n ></nz-select-clear>\n <nz-select-arrow\n *ngIf=\"nzShowArrow && nzMode === 'default'\"\n [loading]=\"nzLoading\"\n [search]=\"nzOpen && nzShowSearch\"\n [suffixIcon]=\"nzSuffixIcon\"\n ></nz-select-arrow>\n <ng-template\n cdkConnectedOverlay\n nzConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayMinWidth]=\"nzDropdownMatchSelectWidth ? null : triggerWidth\"\n [cdkConnectedOverlayWidth]=\"nzDropdownMatchSelectWidth ? triggerWidth : null\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPanelClass]=\"nzDropdownClassName\"\n (backdropClick)=\"setOpenState(false)\"\n (detach)=\"setOpenState(false)\"\n (positionChange)=\"onPositionChange($event)\"\n [cdkConnectedOverlayOpen]=\"nzOpen\"\n >\n <nz-option-container\n [style]=\"nzDropdownStyle\"\n [matchWidth]=\"nzDropdownMatchSelectWidth\"\n [class.ant-select-dropdown-placement-bottomLeft]=\"dropDownPosition === 'bottom'\"\n [class.ant-select-dropdown-placement-topLeft]=\"dropDownPosition === 'top'\"\n [@slideMotion]=\"dropDownPosition\"\n [@.disabled]=\"noAnimation?.nzNoAnimation\"\n [nzNoAnimation]=\"noAnimation?.nzNoAnimation\"\n [listOfContainerItem]=\"listOfContainerItem\"\n [menuItemSelectedIcon]=\"nzMenuItemSelectedIcon\"\n [notFoundContent]=\"nzNotFoundContent\"\n [activatedValue]=\"activatedValue\"\n [listOfSelectedValue]=\"listOfValue\"\n [dropdownRender]=\"nzDropdownRender\"\n [compareWith]=\"compareWith\"\n [mode]=\"nzMode\"\n (keydown)=\"onKeyDown($event)\"\n (itemClick)=\"onItemClick($event)\"\n (itemHover)=\"onItemHover($event)\"\n (scrollToBottom)=\"nzScrollToBottom.emit()\"\n ></nz-option-container>\n </ng-template>\n ",
host: {
'[class.ant-select]': 'true',
'[class.ant-select-lg]': 'nzSize === "large"',
'[class.ant-select-sm]': 'nzSize === "small"',
'[class.ant-select-show-arrow]': "nzShowArrow && nzMode === 'default'",
'[class.ant-select-disabled]': 'nzDisabled',
'[class.ant-select-show-search]': "nzShowSearch || nzMode !== 'default'",
'[class.ant-select-allow-clear]': 'nzAllowClear',
'[class.ant-select-borderless]': 'nzBorderless',
'[class.ant-select-open]': 'nzOpen',
'[class.ant-select-focused]': 'nzOpen',
'[class.ant-select-single]': "nzMode === 'default'",
'[class.ant-select-multiple]': "nzMode !== 'default'"
}
}] }
];
/** @nocollapse */
NzSelectComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: ElementRef },
{ type: Platform },
{ type: FocusMonitor },
{ type: NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] }
]; };
NzSelectComponent.propDecorators = {
nzSize: [{ type: Input }],
nzDropdownClassName: [{ type: Input }],
nzDropdownMatchSelectWidth: [{ type: Input }],
nzDropdownStyle: [{ type: Input }],
nzNotFoundContent: [{ type: Input }],
nzPlaceHolder: [{ type: Input }],
nzMaxTagCount: [{ type: Input }],
nzDropdownRender: [{ type: Input }],
nzCustomTemplate: [{ type: Input }],
nzSuffixIcon: [{ type: Input }],
nzClearIcon: [{ type: Input }],
nzRemoveIcon: [{ type: Input }],
nzMenuItemSelectedIcon: [{ type: Input }],
nzShowArrow: [{ type: Input }],
nzTokenSeparators: [{ type: Input }],
nzMaxTagPlaceholder: [{ type: Input }],
nzMaxMultipleCount: [{ type: Input }],
nzMode: [{ type: Input }],
nzFilterOption: [{ type: Input }],
compareWith: [{ type: Input }],
nzAllowClear: [{ type: Input }],
nzBorderless: [{ type: Input }],
nzShowSearch: [{ type: Input }],
nzLoading: [{ type: Input }],
nzAutoFocus: [{ type: Input }],
nzAutoClearSearchValue: [{ type: Input }],
nzServerSearch: [{ type: Input }],
nzDisabled: [{ type: Input }],
nzOpen: [{ type: Input }],
nzOnSearch: [{ type: Output }],
nzScrollToBottom: [{ type: Output }],
nzOpenChange: [{ type: Output }],
nzBlur: [{ type: Output }],
nzFocus: [{ type: Output }],
originElement: [{ type: ViewChild, args: [CdkOverlayOrigin, { static: true, read: ElementRef },] }],
cdkConnectedOverlay: [{ type: ViewChild, args: [CdkConnectedOverlay, { static: true },] }],
nzSelectTopControlComponent: [{ type: ViewChild, args: [NzSelectTopControlComponent, { static: true },] }],
listOfNzOptionComponent: [{ type: ContentChildren, args: [NzOptionComponent, { descendants: true },] }],
listOfNzOptionGroupComponent: [{ type: ContentChildren, args: [NzOptionGroupComponent, { descendants: true },] }],
nzOptionGroupComponentElement: [{ type: ViewChild, args: [NzOptionGroupComponent, { static: true, read: ElementRef },] }],
nzSelectTopControlComponentElement: [{ type: ViewChild, args: [NzSelectTopControlComponent, { static: true, read: ElementRef },] }]
};
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzAllowClear", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzBorderless", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzShowSearch", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzLoading", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzAutoFocus", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzAutoClearSearchValue", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzServerSearch", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzDisabled", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzSelectComponent.prototype, "nzOpen", void 0);
return NzSelectComponent;
}());
export { NzSelectComponent };
if (false) {
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzAllowClear;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzBorderless;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzShowSearch;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzLoading;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzAutoFocus;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzAutoClearSearchValue;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzServerSearch;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzDisabled;
/** @type {?} */
NzSelectComponent.ngAcceptInputType_nzOpen;
/** @type {?} */
NzSelectComponent.prototype.nzSize;
/** @type {?} */
NzSelectComponent.prototype.nzDropdownClassName;
/** @type {?} */
NzSelectComponent.prototype.nzDropdownMatchSelectWidth;
/** @type {?} */
NzSelectComponent.prototype.nzDropdownStyle;
/** @type {?} */
NzSelectComponent.prototype.nzNotFoundContent;
/** @type {?} */
NzSelectComponent.prototype.nzPlaceHolder;
/** @type {?} */
NzSelectComponent.prototype.nzMaxTagCount;
/** @type {?} */
NzSelectComponent.prototype.nzDropdownRender;
/** @type {?} */
NzSelectComponent.prototype.nzCustomTemplate;
/** @type {?} */
NzSelectComponent.prototype.nzSuffixIcon;
/** @type {?} */
NzSelectComponent.prototype.nzClearIcon;
/** @type {?} */
NzSelectComponent.prototype.nzRemoveIcon;
/** @type {?} */
NzSelectComponent.prototype.nzMenuItemSelectedIcon;
/** @type {?} */
NzSelectComponent.prototype.nzShowArrow;
/** @type {?} */
NzSelectComponent.prototype.nzTokenSeparators;
/** @type {?} */
NzSelectComponent.prototype.nzMaxTagPlaceholder;
/** @type {?} */
NzSelectComponent.prototype.nzMaxMultipleCount;
/** @type {?} */
NzSelectComponent.prototype.nzMode;
/** @type {?} */
NzSelectComponent.prototype.nzFilterOption;
/** @type {?} */
NzSelectComponent.prototype.compareWith;
/** @type {?} */
NzSelectComponent.prototype.nzAllowClear;
/** @type {?} */
NzSelectComponent.prototype.nzBorderless;
/** @type {?} */
NzSelectComponent.prototype.nzShowSearch;
/** @type {?} */
NzSelectComponent.prototype.nzLoading;
/** @type {?} */
NzSelectComponent.prototype.nzAutoFocus;
/** @type {?} */
NzSelectComponent.prototype.nzAutoClearSearchValue;
/** @type {?} */
NzSelectComponent.prototype.nzServerSearch;
/** @type {?} */
NzSelectComponent.prototype.nzDisabled;
/** @type {?} */
NzSelectComponent.prototype.nzOpen;
/** @type {?} */
NzSelectComponent.prototype.nzOnSearch;
/** @type {?} */
NzSelectComponent.prototype.nzScrollToBottom;
/** @type {?} */
NzSelectComponent.prototype.nzOpenChange;
/** @type {?} */
NzSelectComponent.prototype.nzBlur;
/** @type {?} */
NzSelectComponent.prototype.nzFocus;
/** @type {?} */
NzSelectComponent.prototype.originElement;
/** @type {?} */
NzSelectComponent.prototype.cdkConnectedOverlay;
/** @type {?} */
NzSelectComponent.prototype.nzSelectTopControlComponent;
/** @type {?} */
NzSelectComponent.prototype.listOfNzOptionComponent;
/** @type {?} */
NzSelectComponent.prototype.listOfNzOptionGroupComponent;
/** @type {?} */
NzSelectComponent.prototype.nzOptionGroupComponentElement;
/** @type {?} */
NzSelectComponent.prototype.nzSelectTopControlComponentElement;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.listOfValue$;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.listOfTemplateItem$;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.listOfTagAndTemplateItem;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.searchValue;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.value;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.destroy$;
/** @type {?} */
NzSelectComponent.prototype.onChange;
/** @type {?} */
NzSelectComponent.prototype.onTouched;
/** @type {?} */
NzSelectComponent.prototype.dropDownPosition;
/** @type {?} */
NzSelectComponent.prototype.triggerWidth;
/** @type {?} */
NzSelectComponent.prototype.listOfContainerItem;
/** @type {?} */
NzSelectComponent.prototype.listOfTopItem;
/** @type {?} */
NzSelectComponent.prototype.activatedValue;
/** @type {?} */
NzSelectComponent.prototype.listOfValue;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.cdr;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.elementRef;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.platform;
/**
* @type {?}
* @private
*/
NzSelectComponent.prototype.focusMonitor;
/** @type {?} */
NzSelectComponent.prototype.noAnimation;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvc2VsZWN0LyIsInNvdXJjZXMiOlsic2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFrQyxNQUFNLHNCQUFzQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBR0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLElBQUksRUFDSixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxN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eUNBQWtDOztJQUNsQyx3Q0FBK0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFLCBUQUIsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIENka092ZXJsYXlPcmlnaW4sIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBzbGlkZU1vdGlvbiB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9hbmltYXRpb24nO1xuaW1wb3J0IHsgTnpOb0FuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9uby1hbmltYXRpb24nO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOelNhZmVBbnksIE9uQ2hhbmdlVHlwZSwgT25Ub3VjaGVkVHlwZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTnpPcHRpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vb3B0aW9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOek9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC10b3AtY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnpGaWx0ZXJPcHRpb25UeXBlLCBOelNlbGVjdEl0ZW1JbnRlcmZhY2UsIE56U2VsZWN0TW9kZVR5cGUgfSBmcm9tICcuL3NlbGVjdC50eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRGaWx0ZXJPcHRpb246IE56RmlsdGVyT3B0aW9uVHlwZSA9IChzZWFyY2hWYWx1ZTogc3RyaW5nLCBpdGVtOiBOelNlbGVjdEl0ZW1JbnRlcmZhY2UpOiBib29sZWFuID0+IHtcbiAgaWYgKGl0ZW0gJiYgaXRlbS5uekxhYmVsKSB7XG4gICAgcmV0dXJuIGl0ZW0ubnpMYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkgPiAtMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCB0eXBlIE56U2VsZWN0U2l6ZVR5cGUgPSAnbGFyZ2UnIHwgJ2RlZmF1bHQnIHwgJ3NtYWxsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnotc2VsZWN0JyxcbiAgZXhwb3J0QXM6ICduelNlbGVjdCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE56U2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW3NsaWRlTW90aW9uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnotc2VsZWN0LXRvcC1jb250cm9sXG4gICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICBbb3Blbl09XCJuek9wZW5cIlxuICAgICAgW2Rpc2FibGVkXT1cIm56RGlzYWJsZWRcIlxuICAgICAgW21vZGVdPVwibnpNb2RlXCJcbiAgICAgIFtALmRpc2FibGVkXT1cIm5vQW5pbWF0aW9uPy5uek5vQW5pbWF0aW9uXCJcbiAgICAgIFtuek5vQW5pbWF0aW9uXT1cIm5vQW5pbWF0aW9uPy5uek5vQW5pbWF0aW9uXCJcbiAgICAgIFttYXhUYWdQbGFjZWhvbGRlcl09XCJuek1heFRhZ1BsYWNlaG9sZGVyXCJcbiAgICAgIFtyZW1vdmVJY29uXT1cIm56UmVtb3ZlSWNvblwiXG4gICAgICBbcGxhY2VIb2xkZXJdPVwibnpQbGFjZUhvbGRlclwiXG4gICAgICBbbWF4VGFnQ291bnRdPVwibnpNYXhUYWdDb3VudFwiXG4gICAgICBbY3VzdG9tVGVtcGxhdGVdPVwibnpDdXN0b21UZW1wbGF0ZVwiXG4gICAgICBbdG9rZW5TZXBhcmF0b3JzXT1cIm56VG9rZW5TZXBhcmF0b3JzXCJcbiAgICAgIFtzaG93U2VhcmNoXT1cIm56U2hvd1NlYXJjaFwiXG4gICAgICBbYXV0b2ZvY3VzXT1cIm56QXV0b0ZvY3VzXCJcbiAgICAgIFtsaXN0T2ZUb3BJdGVtXT1cImxpc3RPZlRvcEl0ZW1cIlxuICAgICAgKGlucHV0VmFsdWVDaGFuZ2UpPVwib25JbnB1dFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHRva2VuaXplKT1cIm9uVG9rZW5TZXBhcmF0ZSgkZXZlbnQpXCJcbiAgICAgIChhbmltYXRpb25FbmQpPVwidXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucygpXCJcbiAgICAgIChkZWxldGVJdGVtKT1cIm9uSXRlbURlbGV0ZSgkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIChvcGVuQ2hhbmdlKT1cInNldE9wZW5TdGF0ZSgkZXZlbnQpXCJcbiAgICA+PC9uei1zZWxlY3QtdG9wLWNvbnRyb2w+XG4gICAgPG56LXNlbGVjdC1jbGVhclxuICAgICAgKm5nSWY9XCJuekFsbG93Q2xlYXIgJiYgIW56RGlzYWJsZWQgJiYgbGlzdE9mVmFsdWUubGVuZ3RoXCJcbiAgICAgIFtjbGVhckljb25dPVwibnpDbGVhckljb25cIlxuICAgICAgKGNsZWFyKT1cIm9uQ2xlYXJTZWxlY3Rpb24oKVwiXG4gICAgPjwvbnotc2VsZWN0LWNsZWFyPlxuICAgIDxuei1zZWxlY3QtYXJyb3dcbiAgICAgICpuZ0lmPVwibnpTaG93QXJyb3cgJiYgbnpNb2RlID09PSAnZGVmYXVsdCdcIlxuICAgICAgW2xvYWRpbmddPVwibnpMb2FkaW5nXCJcbiAgICAgIFtzZWFyY2hdPVwibnpPcGVuICYmIG56U2hvd1NlYXJjaFwiXG4gICAgICBbc3VmZml4SWNvbl09XCJuelN1ZmZpeEljb25cIlxuICAgID48L256LXNlbGVjdC1hcnJvdz5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgIG56Q29ubmVjdGVkT3ZlcmxheVxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0cnVlXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwibnpEcm9wZG93bk1hdGNoU2VsZWN0V2lkdGggPyBudWxsIDogdHJpZ2dlcldpZHRoXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGhdPVwibnpEcm9wZG93bk1hdGNoU2VsZWN0V2lkdGggPyB0cmlnZ2VyV2lkdGggOiBudWxsXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpblwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3NdPVwibnpEcm9wZG93bkNsYXNzTmFtZVwiXG4gICAgICAoYmFja2Ryb3BDbGljayk9XCJzZXRPcGVuU3RhdGUoZmFsc2UpXCJcbiAgICAgIChkZXRhY2gpPVwic2V0T3BlblN0YXRlKGZhbHNlKVwiXG4gICAgICAocG9zaXRpb25DaGFuZ2UpPVwib25Qb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJuek9wZW5cIlxuICAgID5cbiAgICAgIDxuei1vcHRpb24tY29udGFpbmVyXG4gICAgICAgIFtzdHlsZV09XCJuekRyb3Bkb3duU3R5bGVcIlxuICAgICAgICBbbWF0Y2hXaWR0aF09XCJuekRyb3Bkb3duTWF0Y2hTZWxlY3RXaWR0aFwiXG4gICAgICAgIFtjbGFzcy5hbnQtc2VsZWN0LWRyb3Bkb3duLXBsYWNlbWVudC1ib3R0b21MZWZ0XT1cImRyb3BEb3duUG9zaXRpb24gPT09ICdib3R0b20nXCJcbiAgICAgICAgW2NsYXNzLmFudC1zZWxlY3QtZHJvcGRvd24tcGxhY2VtZW50LXRvcExlZnRdPVwiZHJvcERvd25Qb3NpdGlvbiA9PT0gJ3RvcCdcIlxuICAgICAgICBbQHNsaWRlTW90aW9uXT1cImRyb3BEb3duUG9zaXRpb25cIlxuICAgICAgICBbQC5kaXNhYmxlZF09XCJub0FuaW1hdGlvbj8ubnpOb0FuaW1hdGlvblwiXG4gICAgICAgIFtuek5vQW5pbWF0aW9uXT1cIm5vQW5pbWF0aW9uPy5uek5vQW5pbWF0aW9uXCJcbiAgICAgICAgW2xpc3RPZkNvbnRhaW5lckl0ZW1dPVwibGlzdE9mQ29udGFpbmVySXRlbVwiXG4gICAgICAgIFttZW51SXRlbVNlbGVjdGVkSWNvbl09XCJuek1lbnVJdGVtU2VsZWN0ZWRJY29uXCJcbiAgICAgICAgW25vdEZvdW5kQ29udGVudF09XCJuek5vdEZvdW5kQ29udGVudFwiXG4gICAgICAgIFthY3RpdmF0ZWRWYWx1ZV09XCJhY3RpdmF0ZWRWYWx1ZVwiXG4gICAgICAgIFtsaXN0T2ZTZWxlY3RlZFZhbHVlXT1cImxpc3RPZlZhbHVlXCJcbiAgICAgICAgW2Ryb3Bkb3duUmVuZGVyXT1cIm56RHJvcGRvd25SZW5kZXJcIlxuICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZVdpdGhcIlxuICAgICAgICBbbW9kZV09XCJuek1vZGVcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChpdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIChpdGVtSG92ZXIpPVwib25JdGVtSG92ZXIoJGV2ZW50KVwiXG4gICAgICAgIChzY3JvbGxUb0JvdHRvbSk9XCJuelNjcm9sbFRvQm90dG9tLmVtaXQoKVwiXG4gICAgICA+PC9uei1vcHRpb24tY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmFudC1zZWxlY3RdJzogJ3RydWUnLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1sZ10nOiAnbnpTaXplID09PSBcImxhcmdlXCInLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1zbV0nOiAnbnpTaXplID09PSBcInNtYWxsXCInLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1zaG93LWFycm93XSc6IGBuelNob3dBcnJvdyAmJiBuek1vZGUgPT09ICdkZWZhdWx0J2AsXG4gICAgJ1tjbGFzcy5hbnQtc2VsZWN0LWRpc2FibGVkXSc6ICduekRpc2FibGVkJyxcbiAgICAnW2NsYXNzLmFudC1zZWxlY3Qtc2hvdy1zZWFyY2hdJzogYG56U2hvd1NlYXJjaCB8fCBuek1vZGUgIT09ICdkZWZhdWx0J2AsXG4gICAgJ1tjbGFzcy5hbnQtc2VsZWN0LWFsbG93LWNsZWFyXSc6ICduekFsbG93Q2xlYXInLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1ib3JkZXJsZXNzXSc6ICduekJvcmRlcmxlc3MnLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1vcGVuXSc6ICduek9wZW4nLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1mb2N1c2VkXSc6ICduek9wZW4nLFxuICAgICdbY2xhc3MuYW50LXNlbGVjdC1zaW5nbGVdJzogYG56TW9kZSA9PT0gJ2RlZmF1bHQnYCxcbiAgICAnW2NsYXNzLmFudC1zZWxlY3QtbXVsdGlwbGVdJzogYG56TW9kZSAhPT0gJ2RlZmF1bHQnYFxuICB9XG59KVxuZXhwb3J0IGNsYXNzIE56U2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpBbGxvd0NsZWFyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekJvcmRlcmxlc3M6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256U2hvd1NlYXJjaDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpMb2FkaW5nOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekF1dG9Gb2N1czogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpBdXRvQ2xlYXJTZWFyY2hWYWx1ZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpTZXJ2ZXJTZWFyY2g6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256RGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256T3BlbjogQm9vbGVhbklucHV0O1xuXG4gIEBJbnB1dCgpIG56U2l6ZTogTnpTZWxlY3RTaXplVHlwZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgbnpEcm9wZG93bkNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG56RHJvcGRvd25NYXRjaFNlbGVjdFdpZHRoID0gdHJ1ZTtcbiAgQElucHV0KCkgbnpEcm9wZG93blN0eWxlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG56Tm90Rm91bmRDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSBuelBsYWNlSG9sZGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG56TWF4VGFnQ291bnQgPSBJbmZpbml0eTtcbiAgQElucHV0KCkgbnpEcm9wZG93blJlbmRlcjogVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBuekN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogTnpTZWxlY3RJdGVtSW50ZXJmYWNlIH0+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG56U3VmZml4SWNvbjogVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBuekNsZWFySWNvbjogVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBuelJlbW92ZUljb246IFRlbXBsYXRlUmVmPE56U2FmZUFueT4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbnpNZW51SXRlbVNlbGVjdGVkSWNvbjogVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBuelNob3dBcnJvdyA9IHRydWU7XG4gIEBJbnB1dCgpIG56VG9rZW5TZXBhcmF0b3JzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBuek1heFRhZ1BsYWNlaG9sZGVyOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogTnpTYWZlQW55W10gfT4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbnpNYXhNdWx0aXBsZUNvdW50ID0gSW5maW5pdHk7XG4gIEBJbnB1dCgpIG56TW9kZTogTnpTZWxlY3RNb2RlVHlwZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgbnpGaWx0ZXJPcHRpb246IE56RmlsdGVyT3B0aW9uVHlwZSA9IGRlZmF1bHRGaWx0ZXJPcHRpb247XG4gIEBJbnB1dCgpIGNvbXBhcmVXaXRoOiAobzE6IE56U2FmZUFueSwgbzI6IE56U2FmZUFueSkgPT4gYm9vbGVhbiA9IChvMTogTnpTYWZlQW55LCBvMjogTnpTYWZlQW55KSA9PiBvMSA9PT0gbzI7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekFsbG93Q2xlYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56Qm9yZGVybGVzcyA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpTaG93U2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekxvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56QXV0b0ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekF1dG9DbGVhclNlYXJjaFZhbHVlID0gdHJ1ZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56U2VydmVyU2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuek9wZW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56T25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56U2Nyb2xsVG9Cb3R0b20gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuek9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuekJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuekZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKENka092ZXJsYXlPcmlnaW4sIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIG9yaWdpbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSwgeyBzdGF0aWM6IHRydWUgfSkgY2RrQ29ubmVjdGVkT3ZlcmxheTogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcbiAgQFZpZXdDaGlsZChOelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIG56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudDogTnpTZWxlY3RUb3BDb250cm9sQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkcmVuKE56T3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGxpc3RPZk56T3B0aW9uQ29tcG9uZW50OiBRdWVyeUxpc3Q8TnpPcHRpb25Db21wb25lbnQ+O1xuICBAQ29udGVudENoaWxkcmVuKE56T3B0aW9uR3JvdXBDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgbGlzdE9mTnpPcHRpb25Hcm91cENvbXBvbmVudDogUXVlcnlMaXN0PE56T3B0aW9uR3JvdXBDb21wb25lbnQ+O1xuICBAVmlld0NoaWxkKE56T3B0aW9uR3JvdXBDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIG56T3B0aW9uR3JvdXBDb21wb25lbnRFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKE56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgbnpTZWxlY3RUb3BDb250cm9sQ29tcG9uZW50RWxlbWVudDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBsaXN0T2ZWYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueVtdPihbXSk7XG4gIHByaXZhdGUgbGlzdE9mVGVtcGxhdGVJdGVtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TnpTZWxlY3RJdGVtSW50ZXJmYWNlW10+KFtdKTtcbiAgcHJpdmF0ZSBsaXN0T2ZUYWdBbmRUZW1wbGF0ZUl0ZW06IE56U2VsZWN0SXRlbUludGVyZmFjZVtdID0gW107XG4gIHByaXZhdGUgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIHZhbHVlOiBOelNhZmVBbnkgfCBOelNhZmVBbnlbXTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uQ2hhbmdlOiBPbkNoYW5nZVR5cGUgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBPblRvdWNoZWRUeXBlID0gKCkgPT4ge307XG4gIGRyb3BEb3duUG9zaXRpb246ICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICB0cmlnZ2VyV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsaXN0T2ZDb250YWluZXJJdGVtOiBOelNlbGVjdEl0ZW1JbnRlcmZhY2VbXSA9IFtdO1xuICBsaXN0T2ZUb3BJdGVtOiBOelNlbGVjdEl0ZW1JbnRlcmZhY2VbXSA9IFtdO1xuICBhY3RpdmF0ZWRWYWx1ZTogTnpTYWZlQW55IHwgbnVsbCA9IG51bGw7XG4gIGxpc3RPZlZhbHVlOiBOelNhZmVBbnlbXSA9IFtdO1xuXG4gIGdlbmVyYXRlVGFnSXRlbSh2YWx1ZTogc3RyaW5nKTogTnpTZWxlY3RJdGVtSW50ZXJmYWNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbnpWYWx1ZTogdmFsdWUsXG4gICAgICBuekxhYmVsOiB2YWx1ZSxcbiAgICAgIHR5cGU6ICdpdGVtJ1xuICAgIH07XG4gIH1cblxuICBvbkl0ZW1DbGljayh2YWx1ZTogTnpTYWZlQW55KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLm56TW9kZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICBpZiAodGhpcy5saXN0T2ZWYWx1ZS5sZW5ndGggPT09IDAgfHwgIXRoaXMuY29tcGFyZVdpdGgodGhpcy5saXN0T2ZWYWx1ZVswXSwgdmFsdWUpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdE9mVmFsdWUoW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldE9wZW5TdGF0ZShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5saXN0T2ZWYWx1ZS5maW5kSW5kZXgobyA9PiB0aGlzLmNvbXBhcmVXaXRoKG8sIHZhbHVlKSk7XG4gICAgICBpZiAodGFyZ2V0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGxpc3RPZlZhbHVlQWZ0ZXJSZW1vdmVkID0gdGhpcy5saXN0T2ZWYWx1ZS5maWx0ZXIoKF8sIGkpID0+IGkgIT09IHRhcmdldEluZGV4KTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0T2ZWYWx1ZShsaXN0T2ZWYWx1ZUFmdGVyUmVtb3ZlZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGlzdE9mVmFsdWUubGVuZ3RoIDwgdGhpcy5uek1heE11bHRpcGxlQ291bnQpIHtcbiAgICAgICAgY29uc3QgbGlzdE9mVmFsdWVBZnRlckFkZGVkID0gWy4uLnRoaXMubGlzdE9mVmFsdWUsIHZhbHVlXTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0T2ZWYWx1ZShsaXN0T2ZWYWx1ZUFmdGVyQWRkZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgaWYgKHRoaXMubnpBdXRvQ2xlYXJTZWFyY2hWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkl0ZW1EZWxldGUoaXRlbTogTnpTZWxlY3RJdGVtSW50ZXJmYWNlKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdE9mU2VsZWN0ZWRWYWx1ZSA9IHRoaXMubGlzdE9mVmFsdWUuZmlsdGVyKHYgPT4gIXRoaXMuY29tcGFyZVdpdGgodiwgaXRlbS5uelZhbHVlKSk7XG4gICAgdGhpcy51cGRhdGVMaXN0T2ZWYWx1ZShsaXN0T2ZTZWxlY3RlZFZhbHVlKTtcbiAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgfVxuXG4gIG9uSXRlbUhvdmVyKHZhbHVlOiBOelNhZmVBbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICB1cGRhdGVMaXN0T2ZDb250YWluZXJJdGVtKCk6IHZvaWQge1xuICAgIGxldCBsaXN0T2ZDb250YWluZXJJdGVtID0gdGhpcy5saXN0T2ZUYWdBbmRUZW1wbGF0ZUl0ZW1cbiAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXRlbS5uekhpZGUpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoIXRoaXMubnpTZXJ2ZXJTZWFyY2ggJiYgdGhpcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm56RmlsdGVyT3B0aW9uKHRoaXMuc2VhcmNoVmFsdWUsIGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBpZiAoXG4gICAgICB0aGlzLm56TW9kZSA9PT0gJ3RhZ3MnICYmXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlICYmXG4gICAgICB0aGlzLmxpc3RPZlRhZ0FuZFRlbXBsYXRlSXRlbS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLm56TGFiZWwgPT09IHRoaXMuc2VhcmNoVmFsdWUpID09PSAtMVxuICAgICkge1xuICAgICAgY29uc3QgdGFnSXRlbSA9IHRoaXMuZ2VuZXJhdGVUYWdJdGVtKHRoaXMuc2VhcmNoVmFsdWUpO1xuICAgICAgbGlzdE9mQ29udGFpbmVySXRlbSA9IFt0YWdJdGVtLCAuLi5saXN0T2ZDb250YWluZXJJdGVtXTtcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSB0YWdJdGVtLm56VmFsdWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubGlzdE9mVmFsdWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBsaXN0T2ZDb250YWluZXJJdGVtLmZpbmRJbmRleChpdGVtID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbS5uelZhbHVlLCB0aGlzLmFjdGl2YXRlZFZhbHVlKSkgPT09IC0xXG4gICAgKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRJdGVtID0gbGlzdE9mQ29udGFpbmVySXRlbS5maW5kKGl0ZW0gPT4gdGhpcy5jb21wYXJlV2l0aChpdGVtLm56VmFsdWUsIHRoaXMubGlzdE9mVmFsdWVbMF0pKSB8fCBsaXN0T2ZDb250YWluZXJJdGVtWzBdO1xuICAgICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IChhY3RpdmF0ZWRJdGVtICYmIGFjdGl2YXRlZEl0ZW0ubnpWYWx1ZSkgfHwgbnVsbDtcbiAgICB9XG4gICAgLyoqIGluc2VydCBncm91cCBpdGVtICoqL1xuICAgIGlmICh0aGlzLmxpc3RPZk56T3B0aW9uR3JvdXBDb21wb25lbnQpIHtcbiAgICAgIHRoaXMubGlzdE9mTnpPcHRpb25Hcm91cENvbXBvbmVudC5mb3JFYWNoKG8gPT4ge1xuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSB7IGdyb3VwTGFiZWw6IG8ubnpMYWJlbCwgdHlwZTogJ2dyb3VwJywga2V5OiBvLm56TGFiZWwgfSBhcyBOelNlbGVjdEl0ZW1JbnRlcmZhY2U7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdE9mQ29udGFpbmVySXRlbS5maW5kSW5kZXgoaXRlbSA9PiBncm91cEl0ZW0uZ3JvdXBMYWJlbCA9PT0gaXRlbS5ncm91cExhYmVsKTtcbiAgICAgICAgbGlzdE9mQ29udGFpbmVySXRlbS5zcGxpY2UoaW5kZXgsIDAsIGdyb3VwSXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5saXN0T2ZDb250YWluZXJJdGVtID0gWy4uLmxpc3RPZkNvbnRhaW5lckl0ZW1dO1xuICAgIHRoaXMudXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucygpO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLm56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudC5jbGVhcklucHV0VmFsdWUoKTtcbiAgfVxuXG4gIHVwZGF0ZUxpc3RPZlZhbHVlKGxpc3RPZlZhbHVlOiBOelNhZmVBbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvdmVydExpc3RUb01vZGVsID0gKGxpc3Q6IE56U2FmZUFueVtdLCBtb2RlOiBOelNlbGVjdE1vZGVUeXBlKTogTnpTYWZlQW55W10gfCBOelNhZmVBbnkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGxpc3RbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW9kZWwgPSBjb3ZlcnRMaXN0VG9Nb2RlbChsaXN0T2ZWYWx1ZSwgdGhpcy5uek1vZGUpO1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSBtb2RlbCkge1xuICAgICAgdGhpcy5saXN0T2ZWYWx1ZSA9IGxpc3RPZlZhbHVlO1xuICAgICAgdGhpcy5saXN0T2ZWYWx1ZSQubmV4dChsaXN0T2ZWYWx1ZSk7XG4gICAgICB0aGlzLnZhbHVlID0gbW9kZWw7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uVG9rZW5TZXBhcmF0ZShsaXN0T2ZMYWJlbDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0T2ZNYXRjaGVkVmFsdWUgPSB0aGlzLmxpc3RPZlRhZ0FuZFRlbXBsYXRlSXRlbVxuICAgICAgLmZpbHRlcihpdGVtID0+IGxpc3RPZkxhYmVsLmZpbmRJbmRleChsYWJlbCA9PiBsYWJlbCA9PT0gaXRlbS5uekxhYmVsKSAhPT0gLTEpXG4gICAgICAubWFwKGl0ZW0gPT4gaXRlbS5uelZhbHVlKVxuICAgICAgLmZpbHRlcihpdGVtID0+IHRoaXMubGlzdE9mVmFsdWUuZmluZEluZGV4KHYgPT4gdGhpcy5jb21wYXJlV2l0aCh2LCBpdGVtKSkgPT09IC0xKTtcbiAgICBpZiAodGhpcy5uek1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgIHRoaXMudXBkYXRlTGlzdE9mVmFsdWUoWy4uLnRoaXMubGlzdE9mVmFsdWUsIC4uLmxpc3RPZk1hdGNoZWRWYWx1ZV0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5uek1vZGUgPT09ICd0YWdzJykge1xuICAgICAgY29uc3QgbGlzdE9mVW5NYXRjaGVkTGFiZWwgPSBsaXN0T2ZMYWJlbC5maWx0ZXIoXG4gICAgICAgIGxhYmVsID0+IHRoaXMubGlzdE9mVGFnQW5kVGVtcGxhdGVJdGVtLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ubnpMYWJlbCA9PT0gbGFiZWwpID09PSAtMVxuICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlTGlzdE9mVmFsdWUoWy4uLnRoaXMubGlzdE9mVmFsdWUsIC4uLmxpc3RPZk1hdGNoZWRWYWx1ZSwgLi4ubGlzdE9mVW5NYXRjaGVkTGFiZWxdKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhcklucHV0KCk7XG4gIH1cblxuICBvbktleURvd24oZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm56RGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGlzdE9mRmlsdGVyZWRPcHRpb25Ob3REaXNhYmxlZCA9IHRoaXMubGlzdE9mQ29udGFpbmVySXRlbS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdpdGVtJykuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ubnpEaXNhYmxlZCk7XG4gICAgY29uc3QgYWN0aXZhdGVkSW5kZXggPSBsaXN0T2ZGaWx0ZXJlZE9wdGlvbk5vdERpc2FibGVkLmZpbmRJbmRleChpdGVtID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbS5uelZhbHVlLCB0aGlzLmFjdGl2YXRlZFZhbHVlKSk7XG4gICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMubnpPcGVuKSB7XG4gICAgICAgICAgY29uc3QgcHJlSW5kZXggPSBhY3RpdmF0ZWRJbmRleCA+IDAgPyBhY3RpdmF0ZWRJbmRleCAtIDEgOiBsaXN0T2ZGaWx0ZXJlZE9wdGlvbk5vdERpc2FibGVkLmxlbmd0aCAtIDE7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IGxpc3RPZkZpbHRlcmVkT3B0aW9uTm90RGlzYWJsZWRbcHJlSW5kZXhdLm56VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMubnpPcGVuKSB7XG4gICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gYWN0aXZhdGVkSW5kZXggPCBsaXN0T2ZGaWx0ZXJlZE9wdGlvbk5vdERpc2FibGVkLmxlbmd0aCAtIDEgPyBhY3RpdmF0ZWRJbmRleCArIDEgOiAwO1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSBsaXN0T2ZGaWx0ZXJlZE9wdGlvbk5vdERpc2FibGVkW25leHRJbmRleF0ubnpWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldE9wZW5TdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMubnpPcGVuKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2sodGhpcy5hY3RpdmF0ZWRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0T3BlblN0YXRlKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTUEFDRTpcbiAgICAgICAgaWYgKCF0aGlzLm56T3Blbikge1xuICAgICAgICAgIHRoaXMuc2V0T3BlblN0YXRlKHRydWUpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVEFCOlxuICAgICAgICB0aGlzLnNldE9wZW5TdGF0ZShmYWxzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wZW5TdGF0ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLm56T3BlbiAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubnpPcGVuID0gdmFsdWU7XG4gICAgICB0aGlzLm56T3BlbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMub25PcGVuQ2hhbmdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5U3RhdHVzKCk7XG4gICAgdGhpcy5jbGVhcklucHV0KCk7XG4gIH1cblxuICBvbklucHV0VmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUxpc3RPZkNvbnRhaW5lckl0ZW0oKTtcbiAgICB0aGlzLm56T25TZWFyY2guZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zKCk7XG4gIH1cblxuICBvbkNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTGlzdE9mVmFsdWUoW10pO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5uelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5uelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQuYmx1cigpO1xuICB9XG5cbiAgb25Qb3NpdGlvbkNoYW5nZShwb3NpdGlvbjogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wRG93blBvc2l0aW9uID0gcG9zaXRpb24uY29ubmVjdGlvblBhaXIub3JpZ2luWTtcbiAgfVxuXG4gIHVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlTdGF0dXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXNCcm93c2VyICYmIHRoaXMub3JpZ2luRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnRyaWdnZXJXaWR0aCA9IHRoaXMub3JpZ2luRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICBASG9zdCgpIEBPcHRpb25hbCgpIHB1YmxpYyBub0FuaW1hdGlvbj86IE56Tm9BbmltYXRpb25EaXJlY3RpdmVcbiAgKSB7fVxuXG4gIHdyaXRlVmFsdWUobW9kZWxWYWx1ZTogTnpTYWZlQW55IHwgTnpTYWZlQW55W10pOiB2b2lkIHtcbiAgICAvKiogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTQ5ODggKiovXG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBtb2RlbFZhbHVlO1xuICAgICAgY29uc3QgY292ZXJ0TW9kZWxUb0xpc3QgPSAobW9kZWw6IE56U2FmZUFueVtdIHwgTnpTYWZlQW55LCBtb2RlOiBOelNlbGVjdE1vZGVUeXBlKTogTnpTYWZlQW55W10gPT4ge1xuICAgICAgICBpZiAobW9kZWwgPT09IG51bGwgfHwgbW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICByZXR1cm4gW21vZGVsXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBsaXN0T2ZWYWx1ZSA9IGNvdmVydE1vZGVsVG9MaXN0KG1vZGVsVmFsdWUsIHRoaXMubnpNb2RlKTtcbiAgICAgIHRoaXMubGlzdE9mVmFsdWUgPSBsaXN0T2ZWYWx1ZTtcbiAgICAgIHRoaXMubGlzdE9mVmFsdWUkLm5leHQobGlzdE9mVmFsdWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogT25DaGFuZ2VUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IE9uVG91Y2hlZFR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubnpEaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy5zZXRPcGVuU3RhdGUoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG56T3BlbiwgbnpEaXNhYmxlZCB9ID0gY2hhbmdlcztcbiAgICBpZiAobnpPcGVuKSB7XG4gICAgICB0aGlzLm9uT3BlbkNoYW5nZSgpO1xuICAgIH1cbiAgICBpZiAobnpEaXNhYmxlZCAmJiB0aGlzLm56RGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0T3BlblN0YXRlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzTW9uaXRvclxuICAgICAgLm1vbml0b3IodGhpcy5lbGVtZW50UmVmLCB0cnVlKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShmb2N1c09yaWdpbiA9PiB7XG4gICAgICAgIGlmICghZm9jdXNPcmlnaW4pIHtcbiAgICAgICAgICB0aGlzLm56Qmx1ci5lbWl0KCk7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubnpGb2N1cy5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubGlzdE9mVmFsdWUkLCB0aGlzLmxpc3RPZlRlbXBsYXRlSXRlbSRdKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoW2xpc3RPZlNlbGVjdGVkVmFsdWUsIGxpc3RPZlRlbXBsYXRlSXRlbV0pID0+IHtcbiAgICAgICAgY29uc3QgbGlzdE9mVGFnSXRlbSA9IGxpc3RPZlNlbGVjdGVkVmFsdWVcbiAgICAgICAgICAuZmlsdGVyKCgpID0+IHRoaXMubnpNb2RlID09PSAndGFncycpXG4gICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiBsaXN0T2ZUZW1wbGF0ZUl0ZW0uZmluZEluZGV4KG8gPT4gdGhpcy5jb21wYXJlV2l0aChvLm56VmFsdWUsIHZhbHVlKSkgPT09IC0xKVxuICAgICAgICAgIC5tYXAodmFsdWUgPT4gdGhpcy5saXN0T2ZUb3BJdGVtLmZpbmQobyA9PiB0aGlzLmNvbXBhcmVXaXRoKG8ubnpWYWx1ZSwgdmFsdWUpKSB8fCB0aGlzLmdlbmVyYXRlVGFnSXRlbSh2YWx1ZSkpO1xuICAgICAgICB0aGlzLmxpc3RPZlRhZ0FuZFRlbXBsYXRlSXRlbSA9IFsuLi5saXN0T2ZUZW1wbGF0ZUl0ZW0sIC4uLmxpc3RPZlRhZ0l0ZW1dO1xuICAgICAgICB0aGlzLmxpc3RPZlRvcEl0ZW0gPSB0aGlzLmxpc3RPZlZhbHVlXG4gICAgICAgICAgLm1hcCh2ID0+IFsuLi50aGlzLmxpc3RPZlRhZ0FuZFRlbXBsYXRlSXRlbSwgLi4udGhpcy5saXN0T2ZUb3BJdGVtXS5maW5kKGl0ZW0gPT4gdGhpcy5jb21wYXJlV2l0aCh2LCBpdGVtLm56VmFsdWUpKSEpXG4gICAgICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdE9mQ29udGFpbmVySXRlbSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5U3RhdHVzKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgbWVyZ2UodGhpcy5saXN0T2ZOek9wdGlvbkdyb3VwQ29tcG9uZW50LmNoYW5nZXMsIHRoaXMubGlzdE9mTnpPcHRpb25Db21wb25lbnQuY2hhbmdlcylcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodHJ1ZSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgLi4uW1xuICAgICAgICAgICAgICB0aGlzLmxpc3RPZk56T3B0aW9uQ29tcG9uZW50LmNoYW5nZXMsXG4gICAgICAgICAgICAgIHRoaXMubGlzdE9mTnpPcHRpb25Hcm91cENvbXBvbmVudC5jaGFuZ2VzLFxuICAgICAgICAgICAgICAuLi50aGlzLmxpc3RPZk56T3B0aW9uQ29tcG9uZW50Lm1hcChvcHRpb24gPT4gb3B0aW9uLmNoYW5nZXMpLFxuICAgICAgICAgICAgICAuLi50aGlzLmxpc3RPZk56T3B0aW9uR3JvdXBDb21wb25lbnQubWFwKG9wdGlvbiA9PiBvcHRpb24uY2hhbmdlcylcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLnBpcGUoc3RhcnRXaXRoKHRydWUpKVxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBsaXN0T2ZPcHRpb25JbnRlcmZhY2UgPSB0aGlzLmxpc3RPZk56T3B0aW9uQ29tcG9uZW50LnRvQXJyYXkoKS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB0ZW1wbGF0ZSwgbnpMYWJlbCwgbnpWYWx1ZSwgbnpEaXNhYmxlZCwgbnpIaWRlLCBuekN1c3RvbUNvbnRlbnQsIGdyb3VwTGFiZWwgfSA9IGl0ZW07XG4gICAgICAgICAgcmV0dXJuIHsgdGVtcGxhdGUsIG56TGFiZWwsIG56VmFsdWUsIG56RGlzYWJsZWQsIG56SGlkZSwgbnpDdXN0b21Db250ZW50LCBncm91cExhYmVsLCB0eXBlOiAnaXRlbScsIGtleTogbnpWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5saXN0T2ZUZW1wbGF0ZUl0ZW0kLm5leHQobGlzdE9mT3B0aW9uSW50ZXJmYWNlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19