ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
20,885 lines • 1.95 MB
JavaScript
import { Component, Input, HostBinding, NgModule, ViewEncapsulation, TemplateRef, ElementRef, Renderer2, Output, EventEmitter, ViewChild, forwardRef, InjectionToken, Inject, Injectable, Optional, SkipSelf, ApplicationRef, ComponentFactoryResolver, NgZone, HostListener, ContentChildren, ChangeDetectorRef, Directive, ViewContainerRef, Injector, Pipe, Compiler } from '@angular/core';
import { CommonModule, NgSwitch, NgSwitchCase } from '@angular/common';
import { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
import { BehaviorSubject, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { trigger, state, animate, transition, style } from '@angular/animations';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
import { ComponentPortal } from '@angular/cdk/portal';
import { DomSanitizer } from '@angular/platform-browser';
import { ObserversModule } from '@angular/cdk/observers';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ActivityIndicator {
constructor() {
this.prefixCls = 'am-activity-indicator';
this.spinnerClass = {};
this._size = 'small';
this._toast = false;
this._animating = true;
this.clsActIndicator = true;
}
/**
* @return {?}
*/
get animating() {
return this._animating;
}
/**
* @param {?} v
* @return {?}
*/
set animating(v) {
this._animating = v;
this.setClass();
}
/**
* @param {?} v
* @return {?}
*/
set size(v) {
this._size = v;
this.setClass();
}
/**
* @return {?}
*/
get toast() {
return this._toast;
}
/**
* @param {?} v
* @return {?}
*/
set toast(v) {
this._toast = v;
this.setClass();
}
/**
* @return {?}
*/
get text() {
return this._text;
}
/**
* @param {?} v
* @return {?}
*/
set text(v) {
this._text = v;
}
/**
* @return {?}
*/
setClass() {
if (this._animating) {
this.clsActIndicator = true;
this.clsActIndicatorToast = !!this._toast;
this.clsActIndicatorLg = this._size === 'large';
this.clsActIndicatorSm = this._size === 'small';
this.spinnerClass = {
[`${this.prefixCls}-spinner`]: true,
[`${this.prefixCls}-spinner-lg`]: !!this._toast || this._size === 'large'
};
}
else {
this.clsActIndicator = false;
this.clsActIndicatorLg = false;
this.clsActIndicatorSm = false;
this.clsActIndicatorToast = false;
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setClass();
}
}
ActivityIndicator.decorators = [
{ type: Component, args: [{
selector: 'ActivityIndicator , nzm-ctivity-indicator',
template: "<div *ngIf=\"animating && toast && text && text.length>0\">\n <div class=\"{{prefixCls}}-content\">\n <span [ngClass]=\"spinnerClass\" aria-hidden=\"'true'\"></span>\n <span class=\"{{prefixCls}}-toast\">{{text}}</span>\n </div>\n</div>\n<div *ngIf=\"animating && toast && !text\">\n <div class=\"{{prefixCls}}-content\">\n <span [ngClass]=\"spinnerClass\" aria-label=\"'Loading'\"></span>\n </div>\n</div>\n<div *ngIf=\"animating && !toast && text && text.length>0\">\n <span [ngClass]=\"spinnerClass\" aria-hidden=\"true\"></span>\n <span class=\"{{prefixCls}}-tip\">{{text}}</span>\n</div>\n<div *ngIf=\"animating &&! toast && !text\">\n <span [ngClass]=\"spinnerClass\" aria-label=\"'loading'\"></span>\n</div>\n"
}] }
];
/** @nocollapse */
ActivityIndicator.ctorParameters = () => [];
ActivityIndicator.propDecorators = {
animating: [{ type: Input }],
size: [{ type: Input }],
toast: [{ type: Input }],
text: [{ type: Input }],
clsActIndicator: [{ type: HostBinding, args: ['class.am-activity-indicator',] }],
clsActIndicatorToast: [{ type: HostBinding, args: ['class.am-activity-indicator-toast',] }],
clsActIndicatorLg: [{ type: HostBinding, args: ['class.am-activity-indicator-lg',] }],
clsActIndicatorSm: [{ type: HostBinding, args: ['class.am-activity-indicator-sm',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ActivityIndicatorModule {
}
ActivityIndicatorModule.decorators = [
{ type: NgModule, args: [{
exports: [ActivityIndicator],
declarations: [ActivityIndicator],
imports: [CommonModule, FormsModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Card {
constructor() {
this.full = false;
this.cardWrapper = true;
}
/**
* @return {?}
*/
get cardFull() {
return this.full;
}
}
Card.decorators = [
{ type: Component, args: [{
selector: 'Card, nzm-card',
template: "<ng-content></ng-content>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
Card.ctorParameters = () => [];
Card.propDecorators = {
full: [{ type: Input }],
cardWrapper: [{ type: HostBinding, args: ['class.am-card',] }],
cardFull: [{ type: HostBinding, args: ['class.am-card-full',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CardHeader {
constructor() {
this.prefixCls = 'am-card-header';
this.thumb = null;
this.thumbStyle = null;
this.title = null;
this.extra = null;
this.cardBodyWrapper = true;
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
return value instanceof TemplateRef;
}
}
CardHeader.decorators = [
{ type: Component, args: [{
selector: 'CardHeader, nzm-card-header',
template: "<div class=\"{{prefixCls}}-content\">\n <img *ngIf='thumb && !isTemplateRef(thumb)' src=\"{{thumb}}\" [ngStyle]=\"thumbStyle\">\n <ng-container *ngIf=\"thumb && isTemplateRef(thumb)\" [ngTemplateOutlet]=\"thumb\"></ng-container>\n <ng-container *ngIf=\"!isTemplateRef(title);else titleTemplate\">{{title}}</ng-container>\n</div>\n<div *ngIf=\"extra\" class=\"{{prefixCls}}-extra\">\n <ng-container *ngIf=\"!isTemplateRef(extra);else extraTemplate\">{{extra}}</ng-container>\n</div>\n<ng-template #titleTemplate>\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n</ng-template>\n<ng-template #extraTemplate>\n <ng-template [ngTemplateOutlet]=\"extra\"></ng-template>\n</ng-template>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
CardHeader.ctorParameters = () => [];
CardHeader.propDecorators = {
thumb: [{ type: Input }],
thumbStyle: [{ type: Input }],
title: [{ type: Input }],
extra: [{ type: Input }],
cardBodyWrapper: [{ type: HostBinding, args: ['class.am-card-header',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CardBody {
constructor() {
this.cardBodyWrapper = true;
}
}
CardBody.decorators = [
{ type: Component, args: [{
selector: 'CardBody, nzm-card-body',
template: `<ng-content></ng-content>`,
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
CardBody.ctorParameters = () => [];
CardBody.propDecorators = {
cardBodyWrapper: [{ type: HostBinding, args: ['class.am-card-body',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CardFooter {
constructor() {
this.prefixCls = 'am-card-footer';
this.content = null;
this.extra = null;
this.cardFooterWrapper = true;
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
return value instanceof TemplateRef;
}
}
CardFooter.decorators = [
{ type: Component, args: [{
selector: 'CardFooter, nzm-card-footer',
template: "<div class=\"{{prefixCls}}-content\">\n <ng-container *ngIf=\"!isTemplateRef(content);else contentTemplate\">{{content}}</ng-container>\n</div>\n<div *ngIf=\"extra\" class=\"{{prefixCls}}-extra\">\n <ng-container *ngIf=\"!isTemplateRef(extra);else extraTemplate\">{{extra}}</ng-container>\n</div>\n<ng-template #contentTemplate>\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n</ng-template>\n<ng-template #extraTemplate>\n <ng-template [ngTemplateOutlet]=\"extra\"></ng-template>\n</ng-template>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
CardFooter.ctorParameters = () => [];
CardFooter.propDecorators = {
content: [{ type: Input }],
extra: [{ type: Input }],
cardFooterWrapper: [{ type: HostBinding, args: ['class.am-card-footer',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CardModule {
}
CardModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
declarations: [Card, CardHeader, CardBody, CardFooter],
exports: [Card, CardHeader, CardBody, CardFooter]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Badge {
/**
* @param {?} _ref
* @param {?} render
*/
constructor(_ref, render) {
this._ref = _ref;
this.render = render;
this.prefixCls = 'am-badge';
this.scrollNumberCls = {};
this.style = {};
this._size = 'small';
this._dot = false;
this._hot = false;
this._corner = false;
this._children = false;
this._overflowCount = 99;
this.clsBadge = true;
this.clsBadgeWrp = !this._children;
this.clsBadgeCornerWrp = this._corner;
this.clsBadgeHot = !!this._hot;
this.clsBadgeCornerWrpLg = this._corner && this._size === 'large';
}
/**
* @param {?} v
* @return {?}
*/
set size(v) {
this._size = v;
this.setCls();
}
/**
* @return {?}
*/
get text() {
return this._text;
}
/**
* @param {?} v
* @return {?}
*/
set text(v) {
this._text = v;
this.setCls();
}
/**
* @param {?} v
* @return {?}
*/
set corner(v) {
this._corner = v;
this.setCls();
}
/**
* @return {?}
*/
get dot() {
return this._dot;
}
/**
* @param {?} v
* @return {?}
*/
set dot(v) {
this._dot = v;
if (this._dot) {
this._text = '';
}
this.setCls();
}
/**
* @param {?} v
* @return {?}
*/
set overflowCount(v) {
this._overflowCount = v;
}
/**
* @param {?} v
* @return {?}
*/
set hot(v) {
this._hot = v;
this.setCls();
}
/**
* @param {?} v
* @return {?}
*/
set setStyle(v) {
this.style = v;
}
/**
* @param {?} v
* @return {?}
*/
set className(v) {
this._setClass = v;
/** @type {?} */
const clsArr = this._setClass.split(' ');
clsArr.forEach(cls => {
this.render.addClass(this._ref.nativeElement, cls);
});
}
/**
* @return {?}
*/
setCls() {
this.scrollNumberCls = {
[`${this.prefixCls}-dot`]: this._dot,
[`${this.prefixCls}-dot-large`]: this._dot && this._size === 'large',
[`${this.prefixCls}-text`]: !this._dot && !this._corner,
[`${this.prefixCls}-corner`]: this._corner,
[`${this.prefixCls}-corner-large`]: this._corner && this._size === 'large'
};
this.clsBadgeWrp = !this._children;
this.clsBadgeCornerWrp = this._corner;
this.clsBadgeHot = !!this._hot;
this.clsBadgeCornerWrpLg = this._corner && this._size === 'large';
}
/**
* @return {?}
*/
ngOnChanges() {
if (typeof this._text === 'number' && this._text > this._overflowCount) {
this._text = this._overflowCount + '+';
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setCls();
}
/**
* @return {?}
*/
ngAfterViewInit() {
setTimeout(() => {
if (this._ref.nativeElement.children.length > 1) {
this._children = true;
this.setCls();
}
}, 10);
}
}
Badge.decorators = [
{ type: Component, args: [{
selector: 'Badge, nzm-badge',
template: "<ng-content></ng-content>\n<sup *ngIf=\"dot || text\"\n [ngClass]=\"scrollNumberCls\"\n [ngStyle]=\"style\">{{text}}\n</sup>\n"
}] }
];
/** @nocollapse */
Badge.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
Badge.propDecorators = {
size: [{ type: Input }],
text: [{ type: Input }],
corner: [{ type: Input }],
dot: [{ type: Input }],
overflowCount: [{ type: Input }],
hot: [{ type: Input }],
setStyle: [{ type: Input }],
className: [{ type: Input }],
clsBadge: [{ type: HostBinding, args: ['class.am-badge',] }],
clsBadgeWrp: [{ type: HostBinding, args: ['class.am-badge-not-a-wrapper',] }],
clsBadgeCornerWrp: [{ type: HostBinding, args: ['class.am-badge-corner-wrapper',] }],
clsBadgeHot: [{ type: HostBinding, args: ['class.am-badge-hot',] }],
clsBadgeCornerWrpLg: [{ type: HostBinding, args: ['class.am-badge-corner-wrapper-large',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class BadgeModule {
}
BadgeModule.decorators = [
{ type: NgModule, args: [{
exports: [Badge],
declarations: [Badge],
imports: [CommonModule, FormsModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class InputItem {
/**
* @param {?} element
* @param {?} render
*/
constructor(element, render) {
this.element = element;
this.render = render;
this.prefixCls = 'am-input';
this.setFocus = {};
this.pattern = '';
this.autoFocus = false;
this.inputType = 'text';
this._type = 'text';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._clear = false;
this._error = false;
this._extra = '';
this._labelNumber = 5;
this._updatePlaceholder = false;
this._prefixListCls = 'am-list';
this._moneyKeyboardAlign = 'right';
this._focus = false;
this._isClear = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.onErrorClick = new EventEmitter();
this.onExtraClick = new EventEmitter();
this.clsItem = true;
this.clsDisabled = this._disabled;
this.clsError = this._error;
this.clsFocus = this._focus;
this.clsAndroid = this._focus;
this._onChange = (_) => { };
this._el = element.nativeElement;
}
/**
* @return {?}
*/
get type() {
return this._type;
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
if (value && value.length > 0) {
this.inputType = value;
if (value === 'bankCard' || value === 'phone') {
this._type = 'tel';
}
else if (value === 'password') {
this._type = 'password';
}
else if (value === 'digit') {
this._type = 'number';
}
else if (value !== 'text' && value !== 'number') {
this._type = value;
}
if (value === 'number') {
this.pattern = '[0-9]*';
}
}
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} v
* @return {?}
*/
set value(v) {
if (typeof v === undefined || v === null) {
this._value = '';
}
this._value = v;
}
/**
* @return {?}
*/
get defaultValue() {
return this._defaultValue;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
}
/**
* @return {?}
*/
get placeholder() {
return this._placeholder;
}
/**
* @param {?} value
* @return {?}
*/
set placeholder(value) {
this._placeholder = value;
}
/**
* @return {?}
*/
get editable() {
return this._editable;
}
/**
* @param {?} value
* @return {?}
*/
set editable(value) {
this._editable = value;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.clsDisabled = value;
}
/**
* @return {?}
*/
get clear() {
return this._clear;
}
/**
* @param {?} value
* @return {?}
*/
set clear(value) {
this._clear = value;
}
/**
* @return {?}
*/
get maxLength() {
return this._maxLength;
}
/**
* @param {?} value
* @return {?}
*/
set maxLength(value) {
this._maxLength = value;
}
/**
* @return {?}
*/
get error() {
return this._error;
}
/**
* @param {?} value
* @return {?}
*/
set error(value) {
this._error = value;
this.clsError = value;
}
/**
* @return {?}
*/
get extra() {
return this._extra;
}
/**
* @param {?} value
* @return {?}
*/
set extra(value) {
this._extra = value;
}
/**
* @param {?} value
* @return {?}
*/
set labelNumber(value) {
this._labelNumber = value;
this.setCls();
}
/**
* @param {?} value
* @return {?}
*/
set updatePlaceholder(value) {
this._updatePlaceholder = value;
}
/**
* @return {?}
*/
get prefixListCls() {
return this._prefixListCls;
}
/**
* @param {?} value
* @return {?}
*/
set prefixListCls(value) {
this._prefixListCls = value;
this.render.addClass(this._el, value + '-item');
this.render.addClass(this._el, value + '-item-middle');
}
/**
* @return {?}
*/
get name() {
return this._name;
}
/**
* @param {?} value
* @return {?}
*/
set name(value) {
this._name = value;
}
/**
* @return {?}
*/
get moneyKeyboardAlign() {
return this._moneyKeyboardAlign;
}
/**
* @param {?} value
* @return {?}
*/
set moneyKeyboardAlign(value) {
this._moneyKeyboardAlign = value;
}
/**
* @param {?} value
* @return {?}
*/
set locale(value) {
this._locale = value;
}
/**
* @param {?} value
* @return {?}
*/
set focus(value) {
if (value && value.focus) {
this.autoFocus = value.focus;
if (this._type === 'money') {
this.setFocus = value;
}
else if (this.inputElementRef) {
this._focus = true;
this.inputElementRef.nativeElement.focus();
this.inputFocus('');
}
}
}
/**
* @return {?}
*/
setCls() {
if (this.lableRef.nativeElement.children.length > 0 ||
(this.lableRef.nativeElement && this.lableRef.nativeElement.innerText !== '')) {
this.labelCls = {
[`${this.prefixCls}-label`]: true,
[`${this.prefixCls}-label-2`]: this._labelNumber === 2,
[`${this.prefixCls}-label-3`]: this._labelNumber === 3,
[`${this.prefixCls}-label-4`]: this._labelNumber === 4,
[`${this.prefixCls}-label-5`]: this._labelNumber === 5,
[`${this.prefixCls}-label-6`]: this._labelNumber === 6,
[`${this.prefixCls}-label-7`]: this._labelNumber === 7
};
}
this.controlCls = { [`${this.prefixCls}-control`]: true };
}
/**
* @param {?} e
* @return {?}
*/
inputChange(e) {
/** @type {?} */
let value = e;
switch (this.inputType) {
case 'text':
break;
case 'bankCard':
value = value.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ');
break;
case 'phone':
value = value.replace(/\D/g, '').substring(0, 11);
/** @type {?} */
const valueLen = value.length;
if (valueLen > 3 && valueLen < 8) {
value = `${value.substr(0, 3)} ${value.substr(3)}`;
}
else if (valueLen >= 8) {
value = `${value.substr(0, 3)} ${value.substr(3, 4)} ${value.substr(7)}`;
}
break;
case 'number':
value = value.replace(/\D/g, '');
break;
case 'password':
break;
default:
this._value = value;
break;
}
this._value = value;
if (this._type !== 'money') {
this.inputElementRef.nativeElement.value = this._value;
}
this._onChange(this._value);
this.onChange.emit(this._value);
}
/**
* @param {?} value
* @return {?}
*/
inputFocus(value) {
setTimeout(() => {
this._focus = true;
this.clsFocus = true;
this.clsAndroid = true;
}, 100);
this.onFocus.emit(value);
}
/**
* @param {?} value
* @param {?} event
* @return {?}
*/
inputBlur(value, event) {
setTimeout(() => {
if (!this._isClear) {
this._focus = false;
this.clsFocus = false;
this.clsAndroid = false;
this.onBlur.emit(value);
}
this._isClear = false;
}, 100);
}
/**
* @return {?}
*/
clearInput() {
if (this._type !== 'password' && this._updatePlaceholder) {
this._placeholder = this._value;
}
this._value = '';
this.onChange.emit('');
this._isClear = true;
if (this._type !== 'money') {
this.inputElementRef.nativeElement.value = this._value;
}
this.inputFocus(this._value);
}
/**
* @param {?} e
* @return {?}
*/
errorClick(e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
}
/**
* @param {?} e
* @return {?}
*/
extraClick(e) {
if (this.onExtraClick) {
this.onExtraClick.emit(e);
}
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (value) {
this._value = value;
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) { }
/**
* @return {?}
*/
ngOnChanges() {
if (this.inputElementRef && this._type !== 'money' && this._value !== undefined) {
this.inputElementRef.nativeElement.value = this._value;
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setCls();
this.render.addClass(this._el, this._prefixListCls + '-item');
this.render.addClass(this._el, this._prefixListCls + '-item-middle');
}
}
InputItem.decorators = [
{ type: Component, args: [{
selector: 'InputItem, nzm-input-item',
template: "<div class=\"{{prefixListCls}}-line\">\n <div #lableContent [ngClass]=\"labelCls\">\n <ng-content></ng-content>\n </div>\n <div [ngClass]=\"controlCls\">\n <CustomInput *ngIf=\"type==='money'\"\n [value]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [editable]=\"editable\"\n [moneyKeyboardAlign]=\"moneyKeyboardAlign\"\n [setFocus]=\"setFocus\"\n [maxLength]=\"maxLength\"\n (onChange)=\"inputChange($event)\"\n (onBlur)=\"inputBlur(value)\"\n (onFocus)=\"inputFocus(value)\">\n </CustomInput>\n <div *ngIf=\"type!=='money'\">\n <input #inputElement\n [type]=\"type\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n [maxlength]=\"maxLength\"\n [pattern]=\"pattern\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value , $event)\"\n (focus)=\"inputFocus(value)\"\n style=\"outline:none\" />\n </div>\n </div>\n <div *ngIf=\"clear && editable && !disabled && (value && value.length >0 )\"\n class=\"{{prefixCls}}-clear\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\"\n class=\"{{prefixCls}}-error-extra\"\n (click)=\"errorClick($event)\"\n ></div>\n <div *ngIf=\"extra!==''\"\n class=\"{{prefixCls}}-extra\"\n (click)=\"extraClick($event)\"\n >{{extra}}</div>\n</div>",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputItem),
multi: true
}
]
}] }
];
/** @nocollapse */
InputItem.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
InputItem.propDecorators = {
lableRef: [{ type: ViewChild, args: ['lableContent',] }],
inputElementRef: [{ type: ViewChild, args: ['inputElement',] }],
type: [{ type: Input }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
clear: [{ type: Input }],
maxLength: [{ type: Input }],
error: [{ type: Input }],
extra: [{ type: Input }],
labelNumber: [{ type: Input }],
updatePlaceholder: [{ type: Input }],
prefixListCls: [{ type: Input }],
name: [{ type: Input }],
moneyKeyboardAlign: [{ type: Input }],
locale: [{ type: Input }],
focus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
onErrorClick: [{ type: Output }],
onExtraClick: [{ type: Output }],
clsItem: [{ type: HostBinding, args: ['class.am-input-item',] }],
clsDisabled: [{ type: HostBinding, args: ['class.am-input-disabled',] }],
clsError: [{ type: HostBinding, args: ['class.am-input-error',] }],
clsFocus: [{ type: HostBinding, args: ['class.am-input-focus',] }],
clsAndroid: [{ type: HostBinding, args: ['class.am-input-android,',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
const LOCAL_PROVIDER_TOKEN = new InjectionToken('locale-provider-token');
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Picker = {
okText: '确定',
dismissText: '取消',
extra: '请选择',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/zh_CN';
var DatePicker = {
okText: '确定',
dismissText: '取消',
extra: '请选择',
// DatePickerLocale,
year: '年',
month: '月',
day: '日',
hour: '时',
minute: '分',
am: '上午',
pm: '下午'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/zh_CN';
var DatePickerView = {
okText: '确定',
dismissText: '取消',
extra: '请选择',
// DatePickerLocale,
year: '年',
month: '月',
day: '日',
hour: '时',
minute: '分',
am: '上午',
pm: '下午'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Menu = {
okText: '确定',
cancelText: '取消',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// 同步自 'rmc-calendar/lib/locale/zh_CN';
var defaultLocale = {
title: '日期选择',
today: '今天',
month: '月',
year: '年',
am: '上午',
pm: '下午',
dateTimeFormat: 'yyyy年MM月dd日 星期w hh:mm',
dateFormat: 'yyyy年MM月dd日 星期w',
noChoose: '未选择',
week: ['日', '一', '二', '三', '四', '五', '六'],
clear: '清除',
selectTime: '选择时间',
selectStartTime: '选择开始时间',
selectEndTime: '选择结束时间',
start: '开始',
end: '结束',
begin: '起',
over: '止',
begin_over: '起/止',
confirm: '确认',
monthTitle: 'yyyy年MM月',
loadPrevMonth: '加载上一个月',
yesterday: '昨天',
lastWeek: '近一周',
lastMonth: '近一个月'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var SearchBar = {
cancelText: '取消',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var InputItem$1 = {
confirmLabel: '确定',
backspaceLabel: '退格',
cancelKeyboardLabel: '收起键盘',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Pagination = {
prevText: '上一页',
nextText: '下一页',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var PullToRefresh = {
activateText: '松开立即刷新',
deactivateText: '下拉可以刷新',
finishText: '完成刷新',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var zh_CN = {
locale: 'zh_CN',
Picker,
DatePicker,
DatePickerView,
Menu,
Calendar: defaultLocale,
SearchBar,
InputItem: InputItem$1,
Pagination,
PullToRefresh
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class LocaleProviderService {
/**
* @param {?} locale
*/
constructor(locale) {
this._change = new BehaviorSubject(this._locale);
this.setLocale(locale || zh_CN);
}
/**
* @return {?}
*/
get localeChange() {
return this._change.asObservable();
}
/**
* @param {?} keyPath
* @return {?}
*/
getLocaleValue(keyPath) {
/** @type {?} */
const content = /** @type {?} */ (this._getObjectPath(this._locale, keyPath));
if (typeof content === 'string') {
return content;
}
return '';
}
/**
* @param {?} keyPath
* @return {?}
*/
getLocaleSubObj(keyPath) {
/** @type {?} */
const content = /** @type {?} */ (this._getObjectPath(this._locale, keyPath));
if (typeof content === 'object') {
return content;
}
return null;
}
/**
* @param {?} locale
* @return {?}
*/
setLocale(locale) {
if (!locale || (this._locale && this._locale.locale === locale.locale)) {
return;
}
this._locale = locale;
this._change.next(locale);
}
/**
* @return {?}
*/
getLocaleId() {
return this._locale && this._locale.locale ? this._locale.locale : '';
}
/**
* @return {?}
*/
getLocale() {
return this._locale;
}
/**
* @param {?} obj
* @param {?} path
* @return {?}
*/
_getObjectPath(obj, path) {
/** @type {?} */
let res = obj;
/** @type {?} */
const paths = path.split('.');
/** @type {?} */
const depth = paths.length;
/** @type {?} */
let index = 0;
while (res && index < depth) {
res = res[paths[index++]];
}
return index === depth ? res : null;
}
}
LocaleProviderService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
LocaleProviderService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [LOCAL_PROVIDER_TOKEN,] }] }
];
/**
* @param {?} exist
* @param {?} locale
* @return {?}
*/
function LOCALE_PROVIDER_SERVICE_FACTORY(exist, locale) {
return exist || new LocaleProviderService(locale);
}
/** @type {?} */
const LOCALE_PROVIDER_SERVICE_PROVIDER = {
provide: LocaleProviderService,
useFactory: LOCALE_PROVIDER_SERVICE_FACTORY,
deps: [[new Optional(), new SkipSelf(), LocaleProviderService], LOCAL_PROVIDER_TOKEN]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CustomKeyboard {
/**
* @param {?} _localeProvider
*/
constructor(_localeProvider) {
this._localeProvider = _localeProvider;
this.prefixCls = 'am-number-keyboard';
this.okText = '';
this._locale = {};
this._unsubscribe$ = new Subject();
this.onClick = new EventEmitter();
}
/**
* @param {?} e
* @return {?}
*/
tdClick(e) {
this.onClick.emit(e);
}
/**
* @return {?}
*/
ngOnInit() {
this.wrapCls = {
[`${this.prefixCls}-item`]: true
};
this.wrapperCls = {
[`${this.prefixCls}-wrapper`]: true
};
this._localeProvider.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe(_ => {
this._locale = this._localeProvider.getLocaleSubObj('InputItem');
this.okText = this._locale.confirmLabel;
});
}
/**
* @return {?}
*/
ngOnDestroy() {
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
}
CustomKeyboard.decorators = [
{ type: Component, args: [{
selector: 'CustomKeyboard',
template: "<div [ngClass]=\"wrapperCls\">\n<table>\n <tbody>\n <tr>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(1)\">1\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(2)\">2\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(3)\">3\n </td>\n <td class=\"keyboard-delete\" [rowSpan]=\"2\" [ngClass]=\"wrapCls\" (click)=\"tdClick('delete')\">\n </td>\n </tr>\n <tr>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(4)\">4\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(5)\">5\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(6)\">6\n </td>\n\n </tr>\n <tr>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(7)\">7\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(8)\">8\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(9)\">9\n </td>\n <td class=\"keyboard-confirm\" [rowSpan]=\"2\" [ngClass]=\"wrapCls\" (click)=\"tdClick('confirm')\">{{okText}}\n </td>\n </tr>\n <tr>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick('.')\">.\n </td>\n <td [ngClass]=\"wrapCls\" (click)=\"tdClick(0)\">0\n </td>\n <td class=\"keyboard-hide\" [ngClass]=\"wrapCls\" (click)=\"tdClick('hide')\">\n </td>\n </tr>\n </tbody>\n</table>\n</div>\n\n",
encapsulation: ViewEncapsulation.None,
providers: [LocaleProviderService]
}] }
];
/** @nocollapse */
CustomKeyboard.ctorParameters = () => [
{ type: LocaleProviderService }
];
CustomKeyboard.propDecorators = {
onClick: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CustomInputService {
/**
* @param {?} _appRef
* @param {?} _cfr
*/
constructor(_appRef, _cfr) {
this._appRef = _appRef;
this._cfr = _cfr;
CustomInputService.appRef = this._appRef;
CustomInputService._inputCompFactory = this._cfr.resolveComponentFactory(CustomKeyboard);
}
/**
* @return {?}
*/
static getShowStatus() {
return CustomInputService.isShow;
}
/**
* @return {?}
*/
static showKeyboard() {
if (!this.isShow) {
if (this.compRef) {
this.compRef.instance.wrapperCls = {
[`am-number-keyboard-wrapper`]: true
};
}
else {
/** @type {?} */
let container = document.querySelector(`#${this._keyboardPrefixCls}-container`);
if (!container) {
container = document.createElement('div');
container.setAttribute('id', `${this._keyboardPrefixCls}-container`);
document.body.appendChild(container);
container.appendChild(document.createElement(CustomInputService._inputCompFactory.selector));
this.compRef = this.appRef.bootstrap(CustomInputService._inputCompFactory);
this.compRef.instance.onClick.subscribe(e => {
this.clickValue = e;
});
}
}
this.isShow = true;
}
}
/**
* @return {?}
*/
static hideKeyboard() {
if (this.compRef && this.isShow) {
this.isShow = false;
this.compRef.instance.wrapperCls = {
[`am-number-keyboard-wrapper`]: true,
[`am-number-keyboard-wrapper-hide`]: true
};
}
}
}
CustomInputService.compRef = null;
CustomInputService.appRef = null;
CustomInputService.isShow = false;
CustomInputService.clickValue = null;
CustomInputService._inputCompFactory = null;
CustomInputService._keyboardPrefixCls = 'am-number-keyboard';
CustomInputService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
CustomInputService.ctorParameters = () => [
{ type: ApplicationRef },
{ type: ComponentFactoryResolver }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CustomInput {
/**
* @param {?} _ref
* @param {?} _customInputService
* @param {?} _ngZone
*/
constructor(_ref, _customInputService, _ngZone) {
this._ref = _ref;
this._customInputService = _customInputService;
this._ngZone = _ngZone;
this.keyboardPrefixCls = 'am-number-keyboard';
this.focus = false;
this._value = '';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._setFocus = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.clsFakeContainer = true;
this.inputFocus = () => {
this.removeBlurListener();
/** @type {?} */
const focus = this.focus;
if (!focus || this._setFocus) {
this.onInputFocus();
}
setTimeout(() => {
this.addBlurListener();
}, 50);
};
this.doBlur = ev => {
/** @type {?} */
const value = this._value;
/** @type {?} */
let parentFound = false;
/** @type {?} */
let isInput = false;
/** @type {?} */
let isKeyboard = false;
/** @type {?} */
let isClear = false;
/** @type {?} */
let target = ev.target;
while (target && target !== null && !parentFound) {
if (target === this._ref.nativeElement) {
parentFound = true;
}
if (target.localName === 'custominput') {
isInput = true;
}
if (target.localName === 'customkeyboard') {
isKeyboard = true;
}
if (target.className.indexOf('am-input-clear') >= 0) {
isClear = true;
}
target = target.parentElement;
}
// 当点击目标是本身的时候,获取焦点、不隐藏keyboard
// 当点击目标不是本身但是其他的custom-input时,失去焦点、不隐藏keyboard
// 当点击目标是keyboard时,不失去焦点,不隐藏keyboard
if (parentFound) {
this.focus = true;
}
else if (isInput) {
this._setFocus = false;
this.focus = false;
this.onBlur.emit(this._value);
}
if (this.focus && isKeyboard) {
this.focus = true;
this.onKeyboardClick(CustomInputService.clickValue);
}
if (!parentFound && !isInput && !isKeyboard && !isClear && !this._setFocus) {
this.focus = false;
this._setFocus = false;
this.onBlur.emit(this._value);
CustomInputService.hideKeyboard();
}
this.setFakeInputCls();
};
this.removeBlurListener = () => {
document.removeEventListener('click', this.doBlur, false);
};
this.addBlurListener = () => {
document.addEventListener('click', this.doBlur, false);
};
this.onInputBlur = value => {
this.focus = false;
this.setFakeInputCls();
this.onBlur.emit(this._value);
CustomInputService.hideKeyboard();
};
this.onInputFocus = () => {
this.onFocus.emit(this._value);
this.focus = true;
this._setFocus = false;
this.setFakeInputCls();
setTimeout(() => {
CustomInputService.showKeyboard();
}, 100);
};
this.setFakeInputCls = () => {
this.fakeInputCls = {
[`fake-input`]: true,
['fake-input-disabled']: this._disabled,
['focus']: this.focus
};
};
this.setContainerCls = () => {
this.clsFakeContainerLeft = this._moneyKeyboardAlign === 'left';
};
this.onKeyboardClick = keyboardItemValue => {
/** @type {?} */
let valueAfterChange;
// 删除键
if (keyboardItemValue === 'delete') {
valueAfterChange = this._value.substring(0, this._value.length - 1);
this.onChange.emit(valueAfterChange);
// 确认键
}
else if (keyboardItemValue === 'confirm') {
valueAfterChange = this._value;
this.onChange.emit(valueAfterChange);
this.onInputBlur(this._value);
// 收起键
}
else if (keyboardItemValue === 'hide') {
valueAfterChange = this._value;
this.onInputBlur(valueAfterChange);
}
else {
if (this._maxLength !== undefined &&
+this._maxLength >= 0 &&
(this._value + keyboardItemValue).length > this._maxLength) {
valueAfterChange = (this._value + keyboardItemValue).substr(0, this._maxLength);
this.onChange.emit(valueAfterChange);
}
else {
valueAfterChange = this._value + keyboardItemValue;
this.onChange.emit(valueAfterChange);
}
}
this._ngZone.run(() => {
this._value = valueAfterChange;
});
};
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} v
* @return {?}
*/
set value(v) {
if (typeof v === undefined || v === null) {
this._value = '';
}
else if (this._maxLength !== undefined && this._maxLength >= 0) {
this._value = v.substr(0, this._maxLength);
}
else {
this._value = v;
}
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
}
/**
* @param {?} value
* @return {?}
*/
set maxLength(value) {
this._maxLength = value;
}
/**
* @return {?}
*/
get placeholder() {
return this._placeholder;
}
/**
* @param {?} value
* @return {?}
*/
set placeholder(value) {
this._placeholder = value;
}
/**
* @param {?} value
* @return {?}
*/
set editable(value) {
this._editable = value;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
}
/**
* @param {?} value
* @return {?}
*/
set moneyKeyboardAlign(value) {
this._moneyKeyboardAlign = value;
this.setContainerCls();
}
/**
* @param {?} value
* @return {?}
*/
set setFocus(value) {
if (value) {
this._setFocus = value.focus;
if (this._setFocus) {
this.inputFocus();
}
}
}
/**
* @return {?}
*/
onFakeInputClick() {
if (this._preventKeyboard) {
return;
}
this.inputFocus();
}
/**
* @return {?}
*/
ngOnInit() {
this._preventKeyboard = this._disabled || !this._editable;
this.setFakeInputCls();
this.setContainerCls();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.removeBlurListener();
if (CustomInputService) {
CustomInputService.hideKeyboard();
CustomInputService.compRef = null;
}
/** @type {?} */
const container = document.querySelector(`#${this.keyboardPrefixCls}-container`);
if (container) {
container.remove();
}
}
}
CustomInput.decorators = [
{ type: Component, args: [{
selector: 'CustomInput',
template: "<div *ngIf=\"value===''\" class=\"fake-input-placeholder\">\n {{placeholder}}\n</div>\n<div [ngClass]=\"fakeInputCls\" (click)=\"onFakeInputClick()\">\n {{value}}\n</div>\n",
encapsulation: ViewEncapsulation.None,
providers: [CustomInputService]
}] }
];
/** @nocollapse */
CustomInput.ctorParameters = () => [
{ type: ElementRef },
{ type: CustomInputService },
{ type: NgZone }
];
CustomInput.propDecorators = {
value: [{ type: Input }],
defaultValue: [{ type: Input }],
maxLength: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
moneyKeyboardAlign: [{ type: Input }],
setFocus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
clsFakeContainer: [{ type: HostBinding, args: ['class.fake-input-container',] }],
clsFakeContainerLeft: [{ type: HostBinding, args: ['class.fake-input-container-left',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class InputItemModule {
}
InputItemModule.decorators = [
{ type: NgModule, args: [{
exports: [InputItem, CustomKeyboard, CustomInput],
declarations: [InputItem, CustomKeyboard, CustomInput],
entryComponents: [CustomKeyboard],
imports: [CommonModule, FormsModule, ReactiveFormsModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Button {
/**
* @param {?} _elementRef
* @param {?} _render
*/
constructor(_elementRef, _render) {
this._elementRef = _elementRef;
this._render = _render;
this.prefixCls = 'am-button';
this.ngTemplate = false;
this._className = '';
this._classList = [];
this._size = 'large';
this._loading = false;
this._active = false;
this._inline = false;
this._disabled = false;
this._icon = '';
this._userAgent = (/** @type {?} */ (navigator)).userAgent || (/** @type {?} */ (navigator)).vendor || (/** @type {?} */ (window)).opera;
this.onClick = new EventEmitter();
this._el = this._elementRef.nativeElement;
this._render.addClass(this._el, this.prefixCls);
this._className = this._el.className;
}
/**
* @return {?}
*/
get type() {
return this._type;
}
/**
* @return {?}
*/
get size() {
return this._size;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @return {?}
*/
get loading() {
return this._loading;
}
/**
* @return {?}
*/
get inline() {
return this._inline;
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
if (value instanceof TemplateRef) {
this.ngTemplate = true;
this._icon = value;
}
else {
this.ngTemplate = false;
this._icon = /** @type {?} */ (value);
this.setClassMap();
}
}
/**
* @param {?} v
* @return {?}
*/
set className(v) {
this._className = this._className + ' ' + v;
this.setClassMap();
}
/**
* @param {?} event
* @return {?}
*/
touchStart(event) {
if (this._disabled) {
return;
}
this._active = true;
this.setClassMap();
}
/**
* @param {?} event
* @return {?}
*/
touchEnd(event) {
if (this._disabled) {
return;
}
this._active = false;
this.setClassMap();
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
if (this._disabled) {
return;
}
this.onClick.emit();
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
if (value) {
return value instanceof TemplateRef;
}
return false;
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
this._type = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set loading(value) {
this._loading = value;
if (value) {
if (this._el.querySelector('icon')) {
this._el.querySelector('icon').parentNode.removeChild(this._el.querySelector('icon'));
}
}
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set size(value) {
this._size = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set inline(value) {
this._inline = value;
this.setClassMap();
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this._el.querySelector('img')) {
/** @type {?} */
const amSize = this._size === 'small' ? 'am-icon-xxs' : 'am-icon-md';
this._el.querySelector('img').setAttribute('class', `am-icon ${this.prefixCls}-icon ${amSize}`);
this._render.addClass(this._el, `${this.prefixCls}-icon`);
}
}
/**
* @return {?}
*/
setClassMap() {
this.iconType = this._loading ? 'loading' : this._icon;
this._classList = [
this._type && `${this.prefixCls}-${this._type}`,
this._size === 'small' && `${this.prefixCls}-${this._size}`,
this._disabled && `${this.prefixCls}-disabled`,
this._loading && `${this.prefixCls}-loading`,
this.iconType && `${this.prefixCls}-icon`,
this._active && `${this.prefixCls}-active`,
this._inline && `${this.prefixCls}-inline`
].filter(item => {
return !!item;
});
this._el.className = this._className + ' ' + this._classList.join(' ');
}
}
Button.decorators = [
{ type: Component, args: [{
selector: '[Button], nzm-button',
encapsulation: ViewEncapsulation.None,
template: "<Icon *ngIf=\"!ngTemplate\"\n class=\"{{prefixCls}}-icon\"\n [type]=\"iconType\"\n [size]=\"size ==='small' ? 'xxs' : 'md'\"\n></Icon>\n<ng-template *ngIf=\"ngTemplate\" [ngTemplateOutlet]=\"icon\"></ng-template>\n<ng-content select=\"img\"></ng-content>\n<div class=\"{{prefixCls}}-content\">\n <span>\n <ng-content></ng-content>\n </span>\n</div>"
}] }
];
/** @nocollapse */
Button.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
Button.propDecorators = {
type: [{ type: Input }],
size: [{ type: Input }],
disabled: [{ type: Input }],
loading: [{ type: Input }],
inline: [{ type: Input }],
icon: [{ type: Input }],
className: [{ type: Input }],
onClick: [{ type: Output }],
touchStart: [{ type: HostListener, args: ['touchstart', ['$event'],] }, { type: HostListener, args: ['mousedown', ['$event'],] }],
touchEnd: [{ type: HostListener, args: ['touchend', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }, { type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchcancel', ['$event'],] }],
click: [{ type: HostListener, args: ['click', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
const svgSprite = contents => `
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="__ANTD_MOBILE_SVG_SPRITE_NODE__"
style="position:absolute;width:0;height:0"
>
<defs>
${contents}
</defs>
</svg>
`;
class IconHandler {
constructor() {
this.contents = [];
// both minified by https://github.com/svg/svgo
this.icons = {
check: '<svg viewBox="0 0 44 44"><path fill-rule="evenodd" d="M34.538 8L38 11.518 17.808 32 8 22.033l3.462-3.518 6.346 6.45z"/></svg>',
'check-circle': '<svg viewBox="0 0 48 48"><path d="M24 48c13.255 0 24-10.745 24-24S37.255 0 24 0 0 10.745 0 24s10.745 24 24 24zM13.1 23.2l-2.2 2.1 10 9.9L38.1 15l-2.2-2-15.2 17.8-7.6-7.6z" fill-rule="evenodd"/></svg>',
'check-circle-o': '<svg viewBox="0 0 48 48"><g fill-rule="evenodd"><path d="M24 48c13.255 0 24-10.745 24-24S37.255 0 24 0 0 10.745 0 24s10.745 24 24 24zm0-3c11.598 0 21-9.402 21-21S35.598 3 24 3 3 12.402 3 24s9.402 21 21 21z"/><path d="M12.2 23.2L10 25.3l10 9.9L37.2 15 35 13 19.8 30.8z"/></g></svg>',
cross: '<svg viewBox="0 0 44 44"><path fill-rule="evenodd" d="M24.008 21.852l8.97-8.968L31.092 11l-8.97 8.968L13.157 11l-1.884 1.884 8.968 8.968-9.24 9.24 1.884 1.885 9.24-9.24 9.24 9.24 1.885-1.884-9.24-9.24z"/></svg>',
'cross-circle': '<svg viewBox="0 0 48 48"><g fill-rule="evenodd"><path d="M24 48c13.255 0 24-10.745 24-24S37.255 0 24 0 0 10.745 0 24s10.745 24 24 24zm0-3c11.598 0 21-9.402 21-21S35.598 3 24 3 3 12.402 3 24s9.402 21 21 21z"/><path d="M24.34 22.22l-7.775-7.775a1.5 1.5 0 1 0-2.12 2.12l7.773 7.775-7.774 7.775a1.5 1.5 0 1 0 2.12 2.12l7.775-7.773 7.774 7.774a1.5 1.5 0 1 0 2.12-2.12L26.46 24.34l7.774-7.774a1.5 1.5 0 1 0-2.12-2.12l-7.776 7.773z"/></g></svg>',
'cross-circle-o': '<svg viewBox="0 0 48 48"><path d="M24 48c13.255 0 24-10.745 24-24S37.255 0 24 0 0 10.745 0 24s10.745 24 24 24zm.353-25.77l-7.593-7.593c-.797-.8-1.538-.822-2.263-.207-.724.614-.56 1.617-.124 2.067l7.852 7.847-7.72 7.723c-.727.728-.56 1.646-.066 2.177.493.532 1.553.683 2.31-.174l7.588-7.584 7.644 7.623c.796.798 1.608.724 2.21.145.605-.58.72-1.442-.074-2.24l-7.657-7.67 7.545-7.52c.81-.697.9-1.76.297-2.34-.92-.885-1.85-.338-2.264.078l-7.685 7.667z" fill-rule="evenodd"/></svg>',
// Todo: simplify direction to 2, use css transform
left: '<svg viewBox="0 0 44 44"><defs><path id="a" d="M-129-845h24v24h-24z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><g clip-path="url(#b)"><defs><path id="c" d="M-903-949H947V996H-903z"/></defs></g><path d="M16.247 21.4L28.48 9.165l2.12 2.12-10.117 10.12L30.6 31.524l-2.12 2.12-12.233-12.232.007-.006z"/></svg>',
right: '<svg viewBox="0 0 44 44"><defs><path id="a" d="M-129-845h24v24h-24z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><g clip-path="url(#b)"><defs><path id="c" d="M-903-949H947V996H-903z"/></defs></g><path d="M30.6 21.4L18.37 9.165l-2.12 2.12 10.117 10.12-10.118 10.118 2.12 2.12 12.234-12.232-.005-.006z"/></svg>',
down: '<svg viewBox="0 0 44 44"><path d="M22.355 28.237l-11.483-10.9c-.607-.576-1.714-.396-2.48.41l.674-.71c-.763.802-.73 2.07-.282 2.496l11.37 10.793-.04.04 2.088 2.195L23.3 31.52l12.308-11.682c.447-.425.48-1.694-.282-2.496l.674.71c-.766-.806-1.873-.986-2.48-.41L22.355 28.237z" fill-rule="evenodd"/></svg>',
up: '<svg viewBox="0 0 44 44"><path fill="none" d="M-1-1h46v46H-1z"/><defs><path id="a" d="M-129-845h24v24h-24z"/></defs><clipPath id="b"><use xlink:href="#a"/></clipPath><g clip-path="url(#b)"><defs><path id="c" d="M-903-949H947V996H-903z"/></defs></g><path d="M23.417 14.23L11.184 26.46l2.12 2.12 10.12-10.117 10.118 10.118 2.12-2.12L23.43 14.228l-.006.005z"/></svg>',
loading: '<svg viewBox="0 -2 59.75 60.25"><path fill="#ccc" d="M29.69-.527C14.044-.527 1.36 12.158 1.36 27.806S14.043 56.14 29.69 56.14c15.65 0 28.334-12.686 28.334-28.334S45.34-.527 29.69-.527zm.185 53.75c-14.037 0-25.417-11.38-25.417-25.417S15.838 2.39 29.875 2.39s25.417 11.38 25.417 25.417-11.38 25.416-25.417 25.416z"/><path fill="none" stroke="#108ee9" stroke-width="3" stroke-linecap="round" stroke-miterlimit="10" d="M56.587 29.766c.37-7.438-1.658-14.7-6.393-19.552"/></svg>',
search: '<svg viewBox="0 0 44 44"><path d="M32.98 29.255l8.915 8.293L39.603 40l-8.86-8.242a15.952 15.952 0 0 1-10.753 4.147C11.16 35.905 4 28.763 4 19.952 4 11.142 11.16 4 19.99 4s15.99 7.142 15.99 15.952c0 3.472-1.112 6.685-3 9.303zm.05-9.21c0 7.123-5.7 12.918-12.88 12.918-7.176 0-13.015-5.795-13.015-12.918 0-7.12 5.84-12.917 13.017-12.917 7.178 0 12.88 5.797 12.88 12.917z" fill-rule="evenodd"/></svg>',
ellipsis: '<svg viewBox="0 0 44 44"><circle cx="21.888" cy="22" r="4.045"/><circle cx="5.913" cy="22" r="4.045"/><circle cx="37.863" cy="22" r="4.045"/></svg>',
'ellipsis-circle': '<svg viewBox="0 0 44 44"><g fill-rule="evenodd"><path d="M22.13.11C10.05.11.255 9.902.255 21.983S10.05 43.86 22.13 43.86s21.875-9.795 21.875-21.876S34.21.11 22.13.11zm0 40.7c-10.396 0-18.825-8.43-18.825-18.826S11.735 3.16 22.13 3.16c10.396 0 18.825 8.428 18.825 18.824S32.525 40.81 22.13 40.81z"/><circle cx="21.888" cy="22.701" r="2.445"/><circle cx="12.23" cy="22.701" r="2.445"/><circle cx="31.546" cy="22.701" r="2.445"/></g></svg>',
'exclamation-circle': '<svg viewBox="0 0 64 64"><path d="M59.58 40.89L41.193 9.11C39.135 5.382 35.723 3 31.387 3c-3.11 0-6.52 2.382-8.58 6.11L4.42 40.89c-2.788 4.635-3.126 8.81-1.225 12.22C5.015 56.208 7.572 58 13 58h36.773c5.428 0 9.21-1.792 11.03-4.89 1.9-3.41 1.565-7.583-1.224-12.22zm-2.452 11c-.635 1.694-3.802 2.443-7.354 2.443H13c-3.59 0-5.493-.75-6.13-2.444-1.71-2.41-1.374-5.263 0-8.557l18.387-31.777c2.116-3.168 4.394-4.89 6.13-4.89 2.96 0 5.238 1.722 7.354 4.89l18.387 31.777c1.374 3.294 1.713 6.146 0 8.556zm-25.74-33c-.405 0-1.227.835-1.227 2.443v15.89c0 1.608.823 2.444 1.227 2.444 1.628 0 2.452-.836 2.452-2.445v-15.89c0-1.607-.825-2.443-2.453-2.443zm0 23.22c-.405 0-1.227.79-1.227 1.223v2.445c0 .434.823 1.222 1.227 1.222 1.628 0 2.452-.788 2.452-1.222v-2.445c0-.434-.825-1.222-2.453-1.222z" fill-rule="evenodd"/></svg>',
'info-circle': '<svg viewBox="0 0 44 44"><circle cx="13.828" cy="19.63" r="1.938"/><circle cx="21.767" cy="19.63" r="1.938"/><circle cx="29.767" cy="19.63" r="1.938"/><path d="M22.102 4.16c-9.918 0-17.958 7.147-17.958 15.962 0 4.935 2.522 9.345 6.48 12.273v5.667l.04.012a2.627 2.627 0 1 0 4.5 1.455h.002l5.026-3.54c.628.06 1.265.094 1.91.094 9.92 0 17.96-7.146 17.96-15.96C40.06 11.306 32.02 4.16 22.1 4.16zm-.04 29.902c-.902 0-1.78-.08-2.642-.207l-5.882 4.234c-.024.024-.055.04-.083.06l-.008.005a.51.51 0 0 1-.284.095.525.525 0 0 1-.525-.525l.005-6.375c-3.91-2.516-6.456-6.544-6.456-11.1 0-7.628 7.107-13.812 15.875-13.812s15.875 6.184 15.875 13.812-7.107 13.812-15.875 13.812z"/></svg>',
'question-circle': '<svg viewBox="0 0 44 44"><g fill-rule="evenodd"><path d="M21.186 3c-10.853 0-19.36 8.506-19.36 19.358C1.827 32.494 10.334 41 21.187 41c10.133 0 18.64-8.506 18.64-18.642C39.827 11.506 31.32 3 21.187 3m15.64 19c0 8.823-7.178 16-16 16s-16-7.177-16-16 7.178-16 16-16 16 7.177 16 16z"/><path d="M22.827 31.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m4-15.48c0 .957-.203 1.822-.61 2.593-.427.792-1.117 1.612-2.073 2.457-.867.734-1.453 1.435-1.754 2.096-.302.7-.453 1.693-.453 2.98a.828.828 0 0 1-.823.854.828.828 0 0 1-.584-.22.877.877 0 0 1-.24-.635c0-1.305.168-2.38.506-3.227.336-.883.93-1.682 1.78-2.4 1.01-.883 1.71-1.692 2.1-2.428.336-.645.503-1.38.503-2.21-.02-.935-.3-1.7-.85-2.288-.655-.717-1.62-1.075-2.897-1.075-1.506 0-2.596.535-3.27 1.6-.46.754-.688 1.645-.688 2.677a.92.92 0 0 1-.266.66.747.747 0 0 1-.56.25.73.73 0 0 1-.584-.194c-.16-.164-.24-.393-.24-.69 0-1.82.585-3.272 1.755-4.357C18.645 11.486 19.928 11 21.434 11h.293c1.452 0 2.638.414 3.56 1.24 1.028.903 1.54 2.163 1.54 3.78z"/></g></svg>',
voice: '<svg viewBox="0 0 38 33"><g fill-rule="evenodd"><path d="M17.838 28.8c-.564-.468-1.192-.983-1.836-1.496-4.244-3.385-5.294-3.67-6.006-3.67-.014 0-.027.005-.04.005-.015 0-.028-.006-.042-.006H3.562c-.734 0-.903-.203-.903-.928v-12.62c0-.49.057-.8.66-.8H9.1c.694 0 1.76-.28 6.4-3.63.83-.596 1.638-1.196 2.337-1.722V28.8zM19.682.19c-.463-.22-1.014-.158-1.417.157-.02.016-1.983 1.552-4.152 3.125C10.34 6.21 9.243 6.664 9.02 6.737H3.676c-.027 0-.053.003-.08.004H1.183c-.608 0-1.1.487-1.1 1.086V25.14c0 .598.492 1.084 1.1 1.084h8.71c.22.08 1.257.55 4.605 3.24 1.947 1.562 3.694 3.088 3.712 3.103.25.22.568.333.89.333.186 0 .373-.038.55-.116.48-.213.79-.684.79-1.204V1.38c0-.506-.294-.968-.758-1.19z" mask="url(#mask-2)"/><path d="M31.42 16.475c0-3.363-1.854-6.297-4.606-7.876-.125-.067-.42-.193-.625-.193-.613 0-1.11.488-1.11 1.09 0 .404.22.764.55.952 2.13 1.19 3.566 3.44 3.566 6.024 0 2.627-1.486 4.913-3.677 6.087-.32.19-.53.54-.53.935 0 .602.495 1.09 1.106 1.09.26.002.568-.15.568-.15 2.835-1.556 4.754-4.538 4.754-7.96" mask="url(#mask-4)"/><path d="M30.14 3.057c-.205-.122-.41-.22-.658-.22-.608 0-1.1.485-1.1 1.084 0 .434.26.78.627.978 4.042 2.323 6.76 6.636 6.76 11.578 0 4.938-2.715 9.248-6.754 11.572-.354.19-.66.55-.66.993 0 .6.494 1.085 1.102 1.085.243 0 .438-.092.65-.213 4.692-2.695 7.848-7.7 7.848-13.435 0-5.723-3.142-10.718-7.817-13.418" mask="url(#mask-6)"/></g></svg>',
plus: '<svg viewBox="0 0 30 30"><path d="M14 14H0v2h14v14h2V16h14v-2H16V0h-2v14z" fill-rule="evenodd"/></svg>',
minus: '<svg viewBox="0 0 30 2"><path d="M0 0h30v2H0z" fill-rule="evenodd"/></svg>',
dislike: '<svg viewBox="0 0 72 72"><g fill="none" fill-rule="evenodd"><path d="M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36zm0-2c18.778 0 34-15.222 34-34S54.778 2 36 2 2 17.222 2 36s15.222 34 34 34z" fill="#FFF"/><path fill="#FFF" d="M47 22h2v6h-2zm-24 0h2v6h-2z"/><path d="M21 51s4.6-7 15-7 15 7 15 7" stroke="#FFF" stroke-width="2"/></g></svg>',
fail: '<svg viewBox="0 0 72 72"><g fill="none" fill-rule="evenodd"><path d="M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36zm0-2c18.778 0 34-15.222 34-34S54.778 2 36 2 2 17.222 2 36s15.222 34 34 34z" fill="#FFF"/><path d="M22 22l28.304 28.304m-28.304 0L50.304 22" stroke="#FFF" stroke-width="2"/></g></svg>',
success: '<svg viewBox="0 0 72 72"><g fill="none" fill-rule="evenodd"><path d="M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36zm0-2c18.778 0 34-15.222 34-34S54.778 2 36 2 2 17.222 2 36s15.222 34 34 34z" fill="#FFF"/><path stroke="#FFF" stroke-width="2" d="M19 34.54l11.545 11.923L52.815 24"/></g></svg>'
};
}
/**
* @return {?}
*/
renderSvgSprite() {
/** @type {?} */
const symbols = Object.keys(this.icons)
.map(iconName => {
/** @type {?} */
const svgContent = this.icons[iconName].split('svg')[1];
return `<symbol id=${iconName}${svgContent}symbol>`;
})
.join('');
return svgSprite(symbols);
}
/**
* @return {?}
*/
load() {
if (!document) {
return;
}
/** @type {?} */
const existing = document.getElementById('__ANTD_MOBILE_SVG_SPRITE_NODE__');
/** @type {?} */
const mountNode = document.body;
if (!existing) {
mountNode.insertAdjacentHTML('afterbegin', this.renderSvgSprite());
}
}
}
IconHandler.decorators = [
{ type: Injectable }
];
/** @nocollapse */
IconHandler.ctorParameters = () => [];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class IconComponent {
/**
* @param {?} _iconHandler
*/
constructor(_iconHandler) {
this._iconHandler = _iconHandler;
this.clsMap = {};
this._type = '';
this._size = 'md';
this._src = '';
this.color = '';
this._iconHandler.load();
}
/**
* @return {?}
*/
get type() {
return this._type;
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
this._type = value;
this.setClsMap();
}
/**
* @return {?}
*/
get src() {
return this._src;
}
/**
* @param {?} value
* @return {?}
*/
set src(value) {
this._src = value;
this.setClsMap();
}
/**
* @return {?}
*/
get size() {
return this._size;
}
/**
* @param {?} value
* @return {?}
*/
set size(value) {
this._size = value;
this.setClsMap();
}
/**
* @return {?}
*/
setClsMap() {
this.clsMap = {
[`am-icon-${this._type}`]: true,
[`am-icon-${this._size}`]: true
};
}
}
IconComponent.decorators = [
{ type: Component, args: [{
selector: 'Icon, nzm-icon',
template: "<svg *ngIf=\"type\"\n class=\"am-icon\"\n [ngClass]=\"clsMap\"\n [ngStyle]=\"{color: color}\"\n>\n <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" attr.xlink:href=\"#{{type}}\"></use>\n</svg>\n<img *ngIf=\"src\" src=\"{{src}}\" class=\"am-icon\" [ngClass]=\"clsMap\">\n<ng-content></ng-content>\n",
encapsulation: ViewEncapsulation.None,
providers: [IconHandler]
}] }
];
/** @nocollapse */
IconComponent.ctorParameters = () => [
{ type: IconHandler }
];
IconComponent.propDecorators = {
color: [{ type: Input }],
type: [{ type: Input }],
src: [{ type: Input }],
size: [{ type: Input }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class IconModule {
}
IconModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
exports: [IconComponent],
declarations: [IconComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class WingBlank {
constructor() {
this.prefixCls = 'am-wingblank';
this.size = 'lg';
this.amWingBlank = true;
}
/**
* @return {?}
*/
get amWingBlnkSm() {
return this.size === 'sm';
}
/**
* @return {?}
*/
get amWingBlnkMd() {
return this.size === 'md';
}
/**
* @return {?}
*/
get amWingBlnkLg() {
return this.size === 'lg';
}
}
WingBlank.decorators = [
{ type: Component, args: [{
selector: 'WingBlank, nzm-wingblank',
template: "<ng-content></ng-content>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
WingBlank.ctorParameters = () => [];
WingBlank.propDecorators = {
size: [{ type: Input }],
amWingBlank: [{ type: HostBinding, args: ['class.am-wingblank',] }],
amWingBlnkSm: [{ type: HostBinding, args: ['class.am-wingblank-sm',] }],
amWingBlnkMd: [{ type: HostBinding, args: ['class.am-wingblank-md',] }],
amWingBlnkLg: [{ type: HostBinding, args: ['class.am-wingblank-lg',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class WingBlankModule {
}
WingBlankModule.decorators = [
{ type: NgModule, args: [{
declarations: [WingBlank],
exports: [WingBlank],
imports: [CommonModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class WhiteSpace {
constructor() {
this.prefixCls = 'am-whitespace';
this.size = 'md';
this.amWhiteSpace = true;
}
/**
* @return {?}
*/
get amWhitespaceXs() {
return this.size === 'xs';
}
/**
* @return {?}
*/
get amWhitespaceSm() {
return this.size === 'sm';
}
/**
* @return {?}
*/
get amWhitespaceMd() {
return this.size === 'md';
}
/**
* @return {?}
*/
get amWhitespaceLg() {
return this.size === 'lg';
}
/**
* @return {?}
*/
get amWhitespaceXl() {
return this.size === 'xl';
}
}
WhiteSpace.decorators = [
{ type: Component, args: [{
selector: 'WhiteSpace, nzm-whitespace',
template: ``
}] }
];
/** @nocollapse */
WhiteSpace.ctorParameters = () => [];
WhiteSpace.propDecorators = {
size: [{ type: Input }],
amWhiteSpace: [{ type: HostBinding, args: ['class.am-whitespace',] }],
amWhitespaceXs: [{ type: HostBinding, args: ['class.am-whitespace-xs',] }],
amWhitespaceSm: [{ type: HostBinding, args: ['class.am-whitespace-sm',] }],
amWhitespaceMd: [{ type: HostBinding, args: ['class.am-whitespace-md',] }],
amWhitespaceLg: [{ type: HostBinding, args: ['class.am-whitespace-lg',] }],
amWhitespaceXl: [{ type: HostBinding, args: ['class.am-whitespace-xl',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class WhiteSpaceModule {
}
WhiteSpaceModule.decorators = [
{ type: NgModule, args: [{
declarations: [WhiteSpace],
exports: [WhiteSpace],
imports: [CommonModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class List {
constructor() {
this.defaultProps = {
prefixCls: 'am-list'
};
this._renderHeader = '';
this._renderFooter = '';
this._className = '';
}
/**
* @param {?} value
* @return {?}
*/
set className(value) {
this._className = value;
}
/**
* @return {?}
*/
get renderHeader() {
return this._renderHeader;
}
/**
* @param {?} value
* @return {?}
*/
set renderHeader(value) {
this._renderHeader = value;
}
/**
* @return {?}
*/
get renderFooter() {
return this._renderFooter;
}
/**
* @param {?} value
* @return {?}
*/
set renderFooter(value) {
this._renderFooter = value;
}
/**
* @return {?}
*/
get hostClassName() {
return 'am-list ' + this._className;
}
}
List.decorators = [
{ type: Component, args: [{
selector: 'List, nzm-list',
template: "<div *ngIf=\"renderHeader\" class=\"{{defaultProps.prefixCls}}-header\">\n {{renderHeader()}}\n</div>\n<div class=\"{{defaultProps.prefixCls}}-body\">\n <ng-content></ng-content>\n</div>\n<div *ngIf=\"renderFooter\" class=\"{{defaultProps.prefixCls}}-footer\">\n {{renderFooter()}}\n</div>\n\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
List.ctorParameters = () => [];
List.propDecorators = {
className: [{ type: Input }],
renderHeader: [{ type: Input }],
renderFooter: [{ type: Input }],
hostClassName: [{ type: HostBinding, args: ['class',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ListItem {
constructor() {
this.defaultProps = {
prefixCls: 'am-list',
align: 'middle',
error: false,
multipleLine: false,
wrap: false,
platform: 'ios',
rippleStyle: {}
};
this.arrowCls = {};
this.lineCls = {};
this.wrapCls = '';
this.rippleCls = {};
this.rippleClicked = false;
this._thumb_component = false;
this._thumb_src = '';
this._extra_component = false;
this._extra_title = '';
this._arrow = '';
this._disabled = false;
this._className = '';
this._active = false;
this.onClick = new EventEmitter();
}
/**
* @return {?}
*/
get extra() {
return this._extra;
}
/**
* @return {?}
*/
get extra_component() {
return this._extra_component;
}
/**
* @return {?}
*/
get extra_title() {
return this._extra_title;
}
/**
* @param {?} value
* @return {?}
*/
set extra(value) {
if (value instanceof TemplateRef) {
this._extra_component = true;
this._extra = value;
}
else {
this._extra_component = false;
this._extra_title = /** @type {?} */ (value);
}
}
/**
* @param {?} value
* @return {?}
*/
set className(value) {
this._className = value;
this.setClsMap();
}
/**
* @return {?}
*/
get arrow() {
return this._arrow;
}
/**
* @param {?} value
* @return {?}
*/
set arrow(value) {
this._arrow = value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set multipleLine(value) {
this.defaultProps.multipleLine = value === '' ? true : value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set error(value) {
this.defaultProps.error = value === '' ? true : value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set wrap(value) {
this.defaultProps.wrap = value === '' ? true : value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set align(value) {
this.defaultProps.align = value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set platform(value) {
this.defaultProps.platform = value;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
if (typeof value === 'boolean') {
this._disabled = value;
}
else {
if (value === 'true') {
this._disabled = true;
}
else {
this._disabled = false;
}
}
this.setClsMap();
}
/**
* @return {?}
*/
get thumb() {
return this._thumb;
}
/**
* @return {?}
*/
get thumb_component() {
return this._thumb_component;
}
/**
* @return {?}
*/
get thumb_src() {
return this._thumb_src;
}
/**
* @param {?} value
* @return {?}
*/
set thumb(value) {
if (value instanceof TemplateRef) {
this._thumb_component = true;
this._thumb = value;
}
else {
this._thumb_component = false;
this._thumb_src = /** @type {?} */ (value);
}
}
/**
* @return {?}
*/
get bingClassName() {
return this.wrapCls;
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
this.onItemClick(event);
}
/**
* @return {?}
*/
start() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
}
/**
* @return {?}
*/
move() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
}
/**
* @return {?}
*/
end() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
}
/**
* @return {?}
*/
mouse_start() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
}
/**
* @return {?}
*/
mouse_end() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
}
/**
* @return {?}
*/
setClsMap() {
/** @type {?} */
const classNameList = this._className.split(' ');
/** @type {?} */
let classNameObj = {};
this.wrapCls = '';
for (const value of classNameList) {
if (value) {
classNameObj = Object.assign({}, classNameObj, { [`${value}`]: true });
}
}
/** @type {?} */
const wrapClsObj = Object.assign({ [`${this.defaultProps.prefixCls}-item`]: true, [`${this.defaultProps.prefixCls}-item-disabled`]: this._disabled, [`${this.defaultProps.prefixCls}-item-active`]: this._active, [`${this.defaultProps.prefixCls}-item-error`]: this.defaultProps.error, [`${this.defaultProps.prefixCls}-item-top`]: this.defaultProps.align === 'top', [`${this.defaultProps.prefixCls}-item-middle`]: this.defaultProps.align === 'middle', [`${this.defaultProps.prefixCls}-item-bottom`]: this.defaultProps.align === 'bottom' }, classNameObj);
for (const key in wrapClsObj) {
if (wrapClsObj[key]) {
this.wrapCls += ` ${key}`;
}
}
this.rippleCls = {
[`${this.defaultProps.prefixCls}-ripple`]: true,
[`${this.defaultProps.prefixCls}-ripple-animate`]: this.rippleClicked
};
this.lineCls = {
[`${this.defaultProps.prefixCls}-line`]: true,
[`${this.defaultProps.prefixCls}-line-multiple`]: this.defaultProps.multipleLine,
[`${this.defaultProps.prefixCls}-line-wrap`]: this.defaultProps.wrap
};
this.arrowCls = {
[`${this.defaultProps.prefixCls}-arrow`]: true,
[`${this.defaultProps.prefixCls}-arrow-horizontal`]: this._arrow === 'horizontal',
[`${this.defaultProps.prefixCls}-arrow-vertical`]: this._arrow === 'down' || this._arrow === 'up',
[`${this.defaultProps.prefixCls}-arrow-vertical-up`]: this._arrow === 'up'
};
}
/**
* @param {?} ev
* @return {?}
*/
onItemClick(ev) {
/** @type {?} */
const isAndroid = this.defaultProps.platform === 'android';
if (isAndroid) {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
/** @type {?} */
const Item = ev.currentTarget;
/** @type {?} */
const RippleWidth = Math.max(Item.offsetHeight, Item.offsetWidth);
/** @type {?} */
const ClientRect = ev.currentTarget.getBoundingClientRect();
/** @type {?} */
const pointX = ev.clientX - ClientRect.left - Item.offsetWidth / 2;
/** @type {?} */
const pointY = ev.clientY - ClientRect.top - Item.offsetWidth / 2;
/** @type {?} */
const coverRippleStyle = {
width: `${RippleWidth}px`,
height: `${RippleWidth}px`,
left: `${pointX}px`,
top: `${pointY}px`
};
this.defaultProps.rippleStyle = coverRippleStyle;
this.rippleClicked = true;
this.setClsMap();
this.debounceTimeout = setTimeout(() => {
this.rippleClicked = false;
this.defaultProps.rippleStyle = { display: 'none' };
this.setClsMap();
}, 1000);
}
this.onClick.emit(ev);
}
/**
* @return {?}
*/
ngOnInit() {
this.defaultProps.rippleStyle = { display: 'none' };
this.setClsMap();
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
}
}
ListItem.decorators = [
{ type: Component, args: [{
selector: 'ListItem, nzm-list-item',
template: "<div *ngIf=\"thumb_src && !thumb_component\" class=\"{{defaultProps.prefixCls}}-thumb\">\n <img src={{thumb_src}}/>\n</div>\n<div *ngIf=\"thumb && thumb_component\" class=\"{{defaultProps.prefixCls}}-thumb\">\n <ng-template [ngTemplateOutlet]=\"thumb\"></ng-template>\n</div>\n<div [ngClass]=\"lineCls\">\n <div class=\"{{defaultProps.prefixCls}}-content\">\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"extra_title && !extra_component\"\n class=\"{{defaultProps.prefixCls}}-extra\"\n [innerHTML]=\"extra_title\"\n ></div>\n <div *ngIf=\"extra && extra_component\" class=\"{{defaultProps.prefixCls}}-extra\">\n <ng-template [ngTemplateOutlet]=\"extra\"></ng-template>\n </div>\n <div *ngIf=\"arrow\" [ngClass]=\"arrowCls\" aria-hidden=\"true\"></div>\n</div>\n<div [ngClass]=\"rippleCls\" [ngStyle]=\"defaultProps.rippleStyle\"></div>\n\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ListItem.ctorParameters = () => [];
ListItem.propDecorators = {
extra: [{ type: Input }],
className: [{ type: Input }],
arrow: [{ type: Input }],
multipleLine: [{ type: Input }],
error: [{ type: Input }],
wrap: [{ type: Input }],
align: [{ type: Input }],
platform: [{ type: Input }],
disabled: [{ type: Input }],
thumb: [{ type: Input }],
onClick: [{ type: Output }],
bingClassName: [{ type: HostBinding, args: ['class',] }],
click: [{ type: HostListener, args: ['click', ['$event'],] }],
start: [{ type: HostListener, args: ['touchstart',] }],
move: [{ type: HostListener, args: ['touchmove',] }],
end: [{ type: HostListener, args: ['touchend',] }],
mouse_start: [{ type: HostListener, args: ['mousedown',] }],
mouse_end: [{ type: HostListener, args: ['mouseup',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Brief {
constructor() {
this.defaultProps = {
prefixCls: 'am-list'
};
}
}
Brief.decorators = [
{ type: Component, args: [{
selector: 'Brief, nzm-brief',
template: "<div class=\"{{defaultProps.prefixCls}}-brief\">\n <ng-content></ng-content>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ListModule {
}
ListModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FormsModule],
exports: [List, ListItem, Brief],
declarations: [List, ListItem, Brief]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
const NZ_BUTTON_DIRECTIVES = [Button];
class ButtonModule {
}
ButtonModule.decorators = [
{ type: NgModule, args: [{
declarations: NZ_BUTTON_DIRECTIVES,
exports: NZ_BUTTON_DIRECTIVES,
imports: [CommonModule, IconModule, WingBlankModule, WhiteSpaceModule, ListModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Switch {
constructor() {
this.prefixCls = 'am-switch';
this.wrapCls = 'am-switch';
this.checkboxCls = {
'checkbox-disabled': false
};
this.colorStyle = {};
this._color = '';
this._platform = 'ios';
this._disabled = false;
this.onChange = new EventEmitter();
this.onClick = new EventEmitter();
this.dispaly = true;
}
/**
* @param {?} value
* @return {?}
*/
set color(value) {
this._color = value;
this.colorStyle = { background: this._color };
}
/**
* @param {?} value
* @return {?}
*/
set platform(value) {
this._platform = value;
this.wrapCls = value === 'android' ? `${this.prefixCls}-android` : this.prefixCls;
}
/**
* @param {?} value
* @return {?}
*/
set checked(value) {
this.switchChecked = value;
this.colorStyle = { background: value ? this._color : '' };
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.checkboxCls = {
'checkbox-disabled': value
};
}
/**
* @param {?} checkedValue
* @return {?}
*/
changeSwitch(checkedValue) {
this.switchChecked = checkedValue;
this.colorStyle = { background: checkedValue ? this._color : '' };
this.onChange.emit(checkedValue);
}
/**
* @return {?}
*/
click() {
this.onClick.emit(this.switchChecked);
}
}
Switch.decorators = [
{ type: Component, args: [{
selector: 'Switch, nzm-switch',
template: "<label class=\"{{prefixCls}}\" [ngClass]=\"wrapCls\">\n <input #switchValue\n type=\"checkbox\"\n name=\"name\"\n class=\"{{prefixCls}}-checkbox\"\n [checked]=\"switchChecked\"\n [value]=\"switchChecked\"\n [disabled]=\"disabled\"\n (change)=\"changeSwitch(switchValue.checked)\"\n />\n <div class=\"checkbox\"\n [ngClass]=\"checkboxCls\"\n [ngStyle]=\"colorStyle\"\n (click)=\"click()\"\n ></div>\n</label>",
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => Switch),
multi: true
}
]
}] }
];
/** @nocollapse */
Switch.ctorParameters = () => [];
Switch.propDecorators = {
color: [{ type: Input }],
name: [{ type: Input }],
platform: [{ type: Input }],
checked: [{ type: Input }],
disabled: [{ type: Input }],
onChange: [{ type: Output }],
onClick: [{ type: Output }],
dispaly: [{ type: HostBinding, args: ['style.display',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SwitchModule {
}
SwitchModule.decorators = [
{ type: NgModule, args: [{
exports: [Switch],
declarations: [Switch],
imports: [CommonModule, WingBlankModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SearchBar$1 {
/**
* @param {?} _elementRef
* @param {?} _localeProvider
*/
constructor(_elementRef, _localeProvider) {
this._elementRef = _elementRef;
this._localeProvider = _localeProvider;
this.prefixCls = 'am-search';
this.cancelCls = {
[`${this.prefixCls}-cancel`]: true
};
this._defaultValue = '';
this._value = '';
this._placeholder = '';
this._showCancelButton = false;
this._disabled = false;
this._focus = false;
this._isSubmit = false;
this._isCustomText = false;
this._isClearClicking = false;
this._blurFromOnClear = false;
this.locale = {};
this._unsubscribe$ = new Subject();
this.onSubmit = new EventEmitter();
this.onChange = new EventEmitter();
this.onFocus = new EventEmitter();
this.onBlur = new EventEmitter();
this.onCancel = new EventEmitter();
this.onClear = new EventEmitter();
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = value;
this.inputElementRef.nativeElement.value = this._value;
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} v
* @return {?}
*/
set value(v) {
this._value = v || '';
this.inputElementRef.nativeElement.value = this._value;
this.setClass();
}
/**
* @return {?}
*/
get placeholder() {
return this._placeholder;
}
/**
* @param {?} value
* @return {?}
*/
set placeholder(value) {
this._placeholder = value;
}
/**
* @return {?}
*/
get showCancelButton() {
return this._showCancelButton;
}
/**
* @param {?} value
* @return {?}
*/
set showCancelButton(value) {
this._showCancelButton = value;
this.setClass();
}
/**
* @return {?}
*/
get cancelText() {
return this._cancelText;
}
/**
* @param {?} value
* @return {?}
*/
set cancelText(value) {
if (value !== undefined) {
this._cancelText = value;
this._isCustomText = true;
}
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
}
/**
* @return {?}
*/
get maxLength() {
return this._maxLength;
}
/**
* @param {?} value
* @return {?}
*/
set maxLength(value) {
this._maxLength = value;
}
/**
* @param {?} value
* @return {?}
*/
set setFocus(value) {
if (value) {
if (value.focusValue) {
this._focus = true;
this.inputElementRef.nativeElement.focus();
this._blurFromOnClear = true;
this.onSearchbarFocus();
}
else {
this._blurFromOnClear = false;
this.onSearchbarBlur();
}
}
}
/**
* @return {?}
*/
setClass() {
this.wrapCls = {
[`${this.prefixCls}`]: true,
[`${this.prefixCls}-start`]: !!(this._focus || (this._value && this._value.length > 0)) && !this._disabled
};
this.cancelCls = {
[`${this.prefixCls}-cancel`]: true,
[`${this.prefixCls}-cancel-show`]: this._showCancelButton || this._focus || (this._value && this._value.length > 0),
[`${this.prefixCls}-cancel-anim`]: this._focus
};
this.clearCls = {
[`${this.prefixCls}-clear`]: this._value && this._value.length > 0,
[`${this.prefixCls}-clear-show`]: this._value && this._value.length > 0 && !this._isSubmit,
[`${this.prefixCls}-clear-active`]: this._isClearClicking
};
}
/**
* @return {?}
*/
setStyle() {
if (this._inputContainerRef.className.indexOf(`${this.prefixCls}-start`) > -1) {
/** @type {?} */
const realWidth = this._syntheticPhContainerRef.getBoundingClientRect().width;
this._syntheticPhRef.style.width = Math.ceil(realWidth) + 'px';
if (!this._showCancelButton) {
this._rightBtnRef.style.marginRight = '0';
}
}
else {
this._syntheticPhRef.style.width = '100%';
if (!this._showCancelButton) {
this._rightBtnInitMarginLeft = window.getComputedStyle(this._rightBtnRef)['margin-left'];
/** @type {?} */
const btnMarginRight = this._rightBtnRef.offsetWidth + parseInt(this._rightBtnInitMarginLeft, 10);
this._rightBtnRef.style.marginRight = '-' + btnMarginRight + 'px';
}
}
}
/**
* @return {?}
*/
onSearchbarBlur() {
/** @type {?} */
const self = this;
setTimeout(() => {
if (!self._blurFromOnClear && self._value === '' && self._focus) {
self._focus = false;
self._value = '';
self.onBlur.emit();
self.setClass();
}
self._blurFromOnClear = false;
}, 50);
}
/**
* @return {?}
*/
onSearchbarFocus() {
this._focus = true;
this._isSubmit = false;
this.onFocus.emit();
this.setClass();
}
/**
* @param {?} e
* @return {?}
*/
onSearchbarChange(e) {
this._focus = true;
this.onChange.emit(e);
this.setClass();
}
/**
* @param {?} e
* @return {?}
*/
onSearchSubmit(e) {
e.preventDefault();
this._value = e.target[0].value;
this._isSubmit = true;
this.onSubmit.emit(this._value);
this.setClass();
this._blurFromOnClear = true;
}
/**
* @return {?}
*/
onSearchbarCancel() {
this._focus = false;
this._value = '';
this.onCancel.emit();
this.setClass();
}
/**
* @return {?}
*/
onSearchbarClear() {
this._blurFromOnClear = true;
this._isClearClicking = true;
this.onSearchbarChange('');
this.inputElementRef.nativeElement.focus();
this.onClear.emit(this._value);
this.setClass();
setTimeout(() => {
this._value = '';
this._isClearClicking = false;
this._blurFromOnClear = false;
this.setClass();
}, 100);
this.onSearchbarFocus();
}
/**
* @return {?}
*/
ngOnInit() {
this.setClass();
this._localeProvider.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe(_ => {
this.locale = this._localeProvider.getLocaleSubObj('SearchBar');
this._cancelText = this._isCustomText ? this._cancelText : this.locale.cancelText;
});
}
/**
* @return {?}
*/
ngAfterViewInit() {
this._syntheticPhContainerRef = this._elementRef.nativeElement.getElementsByClassName(`${this.prefixCls}-synthetic-ph-container`)[0];
this._syntheticPhRef = this._elementRef.nativeElement.getElementsByClassName(`${this.prefixCls}-synthetic-ph`)[0];
this._rightBtnRef = this._elementRef.nativeElement.getElementsByClassName('cancel')[0];
this._inputContainerRef = this._elementRef.nativeElement.getElementsByClassName(`${this.prefixCls}`)[0];
}
/**
* @return {?}
*/
ngAfterViewChecked() {
this.setStyle();
}
/**
* @return {?}
*/
ngOnDestroy() {
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
}
SearchBar$1.decorators = [
{ type: Component, args: [{
selector: 'SearchBar, nzm-search-bar',
template: "<form name=\"myForm\"\n class=\"{{prefixCls}}\"\n [ngClass]=\"wrapCls\"\n action=\"#\"\n (submit)=\"onSearchSubmit($event)\"\n>\n <div class=\"{{prefixCls}}-input\">\n <div class=\"{{prefixCls}}-synthetic-ph\"\n style=\"box-sizing:unset\"\n [@cancelButtonState]=\"showCancelButton?'visible' : 'hidden'\"\n >\n <span class=\"{{prefixCls}}-synthetic-ph-container\">\n <i class=\"{{prefixCls}}-synthetic-ph-icon\"></i>\n <span class=\"{{prefixCls}}-synthetic-ph-placeholder\"\n [ngStyle]=\"{'visibility' : (placeholder && !value) ? 'visible' : 'hidden'}\"\n >\n {{placeholder}}\n </span>\n </span>\n </div>\n <input #search\n class=\"{{prefixCls}}-value\"\n style=\"outline:none;\"\n [name]=\"'search'\"\n [type]=\"'search'\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxLength\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"value\"\n (blur)=\"onSearchbarBlur()\"\n (focus)=\"onSearchbarFocus()\"\n (ngModelChange)=\"onSearchbarChange($event)\"\n />\n <a [ngClass]=\"clearCls\"\n style=\"box-sizing: content-box;transition: 0s\"\n (click)=\"onSearchbarClear()\"\n ></a>\n </div>\n <div class=\"cancel\"\n [ngClass]=\"cancelCls\"\n (click)=\"onSearchbarCancel()\"\n >\n {{cancelText}}\n </div>\n</form>",
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => SearchBar$1),
multi: true
}
],
animations: [
trigger('cancelButtonState', [
state('visible', style({ width: '*' })),
state('hidden', style({ width: '100%' })),
transition('visible =>hidden', [animate(300, style({ width: '100%' }))]),
transition('hidden => visible', [animate(300, style({ width: '*' }))])
])
]
}] }
];
/** @nocollapse */
SearchBar$1.ctorParameters = () => [
{ type: ElementRef },
{ type: LocaleProviderService }
];
SearchBar$1.propDecorators = {
inputElementRef: [{ type: ViewChild, args: ['search',] }],
defaultValue: [{ type: Input }],
value: [{ type: Input }],
placeholder: [{ type: Input }],
showCancelButton: [{ type: Input }],
cancelText: [{ type: Input }],
disabled: [{ type: Input }],
maxLength: [{ type: Input }],
setFocus: [{ type: Input }],
onSubmit: [{ type: Output }],
onChange: [{ type: Output }],
onFocus: [{ type: Output }],
onBlur: [{ type: Output }],
onCancel: [{ type: Output }],
onClear: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SearchBarModule {
}
SearchBarModule.decorators = [
{ type: NgModule, args: [{
exports: [SearchBar$1],
declarations: [SearchBar$1],
imports: [CommonModule, FormsModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Stepper {
constructor() {
this.prefixCls = 'am-stepper';
this._max = Infinity;
this._min = -Infinity;
this._step = 1;
this._disabled = false;
this._readOnly = false;
this._showNumber = false;
this._upDisabled = false;
this._downDisabled = false;
this._isUpClick = false;
this._isDownClick = false;
this.onChange = new EventEmitter();
this.clsStepper = true;
this.clsStpDisabled = this._disabled;
this.clsShowNum = this._showNumber;
}
/**
* @return {?}
*/
get max() {
return this._max;
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
this._max = value;
}
/**
* @return {?}
*/
get min() {
return this._min;
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
this._min = value;
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} v
* @return {?}
*/
set value(v) {
this._value = v;
}
/**
* @return {?}
*/
get step() {
return this._step;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
if (value) {
this._defaultValue = value;
this._value = value;
}
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
if (value) {
this._disabled = true;
this._downDisabled = true;
this._upDisabled = true;
}
this.clsStpDisabled = value;
}
/**
* @return {?}
*/
get readOnly() {
return this._readOnly;
}
/**
* @param {?} value
* @return {?}
*/
set readOnly(value) {
this._readOnly = value;
}
/**
* @param {?} value
* @return {?}
*/
set showNumber(value) {
this._showNumber = value;
this.clsShowNum = value;
}
/**
* @return {?}
*/
onIncrease() {
if (!this._upDisabled) {
this._value = this._value + this._step;
this.onChange.emit(this._value);
if (this._value + this._step > this._max) {
this._upDisabled = true;
}
if (this._value - this._step >= this._min) {
this._downDisabled = false;
}
this._isUpClick = true;
this.setCls();
setTimeout(() => {
this._isUpClick = false;
this.setCls();
}, 100);
}
}
/**
* @return {?}
*/
onDecrease() {
if (!this._downDisabled) {
this._value = this._value - this._step;
this.onChange.emit(this._value);
if (this._value - this._step < this._min) {
this._downDisabled = true;
}
if (this._value + this._step <= this._max) {
this._upDisabled = false;
}
this._isDownClick = true;
this.setCls();
setTimeout(() => {
this._isDownClick = false;
this.setCls();
}, 100);
}
}
/**
* @param {?} event
* @return {?}
*/
inputChange(event) {
/** @type {?} */
const value = event.target.value;
this._value = value ? parseInt(value, null) : 0;
if (value < this._min) {
this._value = this._min;
}
if (value > this._max) {
this._value = this._max;
}
this.onChange.emit(this._value);
}
/**
* @return {?}
*/
setCls() {
this.upDisableCls = {
[`${this.prefixCls}-handler-up-disabled`]: this._upDisabled,
[`${this.prefixCls}-handler-active`]: this._isUpClick
};
this.downDisableCls = {
[`${this.prefixCls}-handler-down-disabled`]: this._downDisabled,
[`${this.prefixCls}-handler-active`]: this._isDownClick
};
}
/**
* @return {?}
*/
ngOnChanges() {
if (this._value + this._step > this._max) {
this._upDisabled = true;
}
if (this._value - this._step < this._min) {
this._downDisabled = true;
}
this.setCls();
}
}
Stepper.decorators = [
{ type: Component, args: [{
selector: 'Stepper , nzm-stepper',
template: "<div class=\"{{prefixCls}}-handler-wrap\">\n <span role=\"button\"\n class=\"{{prefixCls}}-handler {{prefixCls}}-handler-up\"\n style=\"line-height:28px;\"\n [ngClass]=\"upDisableCls\"\n (click)=\"onIncrease()\">\n <Icon [type]=\"'plus'\"\n [size]=\"'xxs'\">\n </Icon>\n </span>\n <span role=\"button\"\n class=\"{{prefixCls}}-handler {{prefixCls}}-handler-down\"\n style=\"line-height:28px;\"\n [ngClass]=\"downDisableCls\"\n (click)=\"onDecrease()\">\n <Icon [type]=\"'minus'\"\n [size]=\"'xxs'\">\n </Icon>\n </span>\n</div>\n<div class=\"{{prefixCls}}-input-wrap\">\n <input class=\"{{prefixCls}}-input\"\n style=\"outline:none\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [autocomplete]=\"'off'\"\n [max]=\"max\"\n [min]=\"min\"\n [(ngModel)]=\"value\"\n (change)=\"inputChange($event)\">\n</div>"
}] }
];
/** @nocollapse */
Stepper.ctorParameters = () => [];
Stepper.propDecorators = {
max: [{ type: Input }],
min: [{ type: Input }],
value: [{ type: Input }],
step: [{ type: Input }],
defaultValue: [{ type: Input }],
disabled: [{ type: Input }],
readOnly: [{ type: Input }],
showNumber: [{ type: Input }],
onChange: [{ type: Output }],
clsStepper: [{ type: HostBinding, args: ['class.am-stepper',] }],
clsStpDisabled: [{ type: HostBinding, args: ['class.am-stepper-disabled',] }],
clsShowNum: [{ type: HostBinding, args: ['class.showNumber',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class StepperModule {
}
StepperModule.decorators = [
{ type: NgModule, args: [{
exports: [Stepper],
declarations: [Stepper],
imports: [CommonModule, FormsModule, IconModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Step {
/**
* @param {?} _el
*/
constructor(_el) {
this._el = _el;
this.prefixCls = 'am-steps';
this.stepItemCls = {};
this.isIconString = true;
this.clsStepItem = true;
}
/**
* @return {?}
*/
get status() {
return this._status;
}
/**
* @param {?} value
* @return {?}
*/
set status(value) {
if (value) {
this._status = value;
this.setClass();
}
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
this._title = value;
}
/**
* @return {?}
*/
get description() {
return this._description;
}
/**
* @param {?} value
* @return {?}
*/
set description(value) {
this._description = value;
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
if (value) {
if (typeof value !== 'string') {
this.isIconString = false;
}
this._icon = value;
this.setClass();
}
}
/**
* @return {?}
*/
setClass() {
this.iconCls = {
[`${this.prefixCls}-icon`]: true
};
this.stepItemCls = Object.assign(this.stepItemCls, {
[`${this.prefixCls}-item-${this.status}`]: true,
[`${this.prefixCls}-item-custom`]: this.icon
});
}
/**
* @return {?}
*/
ngOnInit() {
}
}
Step.decorators = [
{ type: Component, args: [{
selector: 'Step, nzm-step',
template: "<div [ngClass]=\"stepItemCls\">\n <div class=\"{{prefixCls}}-item-tail\">\n {{tailContent}}\n </div>\n <div class=\"{{prefixCls}}-item-icon\">\n <span *ngIf=\"!isIconString\" [ngClass]=\"iconCls\">\n <ng-template [ngTemplateOutlet]=\"icon\"></ng-template>\n </span>\n <span *ngIf=\"isIconString && (status=== 'error' || status==='finish' || status==='wait' )\" [ngClass]=\"iconCls\">\n <Icon [type]=\"icon\" [size]=\"iconSize\">\n </Icon>\n </span>\n <span *ngIf=\"isIconString && !(status=== 'error' || status==='finish' || status==='wait')\" [ngClass]=\"iconCls\">{{stepNumber}}\n </span>\n </div>\n <div class=\"{{prefixCls}}-item-content\">\n <div class=\"{{prefixCls}}-item-title\">\n {{title}}\n </div>\n <div *ngIf=\"description\" class=\"{{prefixCls}}-item-description\">{{description}}</div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => Step),
multi: true
}
]
}] }
];
/** @nocollapse */
Step.ctorParameters = () => [
{ type: ElementRef }
];
Step.propDecorators = {
status: [{ type: Input }],
title: [{ type: Input }],
description: [{ type: Input }],
icon: [{ type: Input }],
clsStepItem: [{ type: HostBinding, args: ['class.am-steps-item',] }]
};
/** @enum {string} */
const StatusEnum = {
WAIT: 'wait',
PROCESS: 'process',
FINISH: 'finish',
ERROR: 'error',
};
/** @enum {string} */
const DirectionEnum = {
VERTICAL: 'vertical',
HORIZONTAL: 'horizontal',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Steps {
/**
* @param {?} _elf
* @param {?} _render
*/
constructor(_elf, _render) {
this._elf = _elf;
this._render = _render;
this.prefixCls = 'am-steps';
this._current = 0;
this._status = StatusEnum.PROCESS;
this._direction = DirectionEnum.VERTICAL;
this.clsSteps = true;
}
/**
* @param {?} value
* @return {?}
*/
set current(value) {
if (value >= 0) {
this._current = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set size(value) {
this._size = value;
this.setCls();
}
/**
* @param {?} value
* @return {?}
*/
set status(value) {
this._status = value;
if (this.stepItems) {
this.setStepStyle();
}
}
/**
* @param {?} value
* @return {?}
*/
set direction(value) {
this._direction = value;
this.setCls();
}
/**
* @return {?}
*/
setStepStyle() {
/** @type {?} */
const itemCount = this.stepItems.length;
/** @type {?} */
const itemArr = this.stepItems['_results'];
for (let index = 0; index < itemCount; index++) {
/** @type {?} */
const step = itemArr[index];
step.stepNumber = index + 1;
if (index < itemCount - 1 && itemArr[index + 1].status === StatusEnum.ERROR) {
step.stepItemCls = step.stepItemCls
? Object.assign(step.stepItemCls, { 'error-tail': true })
: { 'error-tail': true };
}
/** @type {?} */
let icon = step.icon;
if (!step.status) {
if (index === this._current) {
step.status = this._status;
}
else if (index < this._current) {
step.status = StatusEnum.FINISH;
}
else {
step.status = StatusEnum.WAIT;
}
}
if (!icon) {
if (index < this._current) {
icon = 'check-circle-o';
}
else if (index > this._current) {
icon = 'ellipsis';
step.stepItemCls = step.stepItemCls
? Object.assign(step.stepItemCls, { 'ellipsis-item': true })
: { 'ellipsis-item': true };
}
if ((this._status === StatusEnum.ERROR && index === this._current) || step.status === StatusEnum.ERROR) {
icon = 'cross-circle-o';
}
}
step.icon = icon;
step.iconSize = this._size === 'small' ? (this._status === StatusEnum.WAIT ? 'xxs' : 'xs') : 'md';
step.setClass();
}
}
/**
* @return {?}
*/
setCls() {
if (this._direction === DirectionEnum.HORIZONTAL) {
this.clsStepsLabelVtl = true;
this.clsStepsHztl = true;
this.clsStepsVtl = false;
}
else if (this._direction === DirectionEnum.VERTICAL) {
this.clsStepsVtl = true;
this.clsStepsHztl = false;
}
if (this._size === 'small') {
this.clsStepsSmall = true;
}
else {
this.clsStepsSmall = false;
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setCls();
}
/**
* @return {?}
*/
ngAfterContentInit() {
setTimeout(() => {
this.setStepStyle();
}, 0);
}
}
Steps.decorators = [
{ type: Component, args: [{
selector: 'Steps,nzm-steps',
template: "<ng-content></ng-content>"
}] }
];
/** @nocollapse */
Steps.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
Steps.propDecorators = {
stepItems: [{ type: ContentChildren, args: [Step,] }],
current: [{ type: Input }],
size: [{ type: Input }],
status: [{ type: Input }],
direction: [{ type: Input }],
clsSteps: [{ type: HostBinding, args: ['class.am-steps',] }],
clsStepsSmall: [{ type: HostBinding, args: ['class.am-steps-small',] }],
clsStepsLabelVtl: [{ type: HostBinding, args: ['class.am-steps-label-vertical',] }],
clsStepsVtl: [{ type: HostBinding, args: ['class.am-steps-vertical',] }],
clsStepsHztl: [{ type: HostBinding, args: ['class.am-steps-horizontal',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class StepsModule {
}
StepsModule.decorators = [
{ type: NgModule, args: [{
exports: [Steps, Step],
declarations: [Steps, Step],
imports: [CommonModule, FormsModule, IconModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CarouselSlideComponent {
constructor() {
this.container = true;
this.height = 'auto';
}
}
CarouselSlideComponent.decorators = [
{ type: Component, args: [{
selector: 'CarouselSlide, nzm-carousel-slide',
template: "<ng-content></ng-content>\n",
encapsulation: ViewEncapsulation.None
}] }
];
CarouselSlideComponent.propDecorators = {
container: [{ type: HostBinding, args: ['class.carousel-container',] }],
width: [{ type: HostBinding, args: ['style.width.px',] }],
height: [{ type: HostBinding, args: ['style.height',] }],
left: [{ type: HostBinding, args: ['style.left.px',] }],
top: [{ type: HostBinding, args: ['style.top.px',] }],
margin: [{ type: HostBinding, args: ['style.margin',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @param {?} event
* @return {?}
*/
function getEventTarget(event) {
if (event.type === 'mousedown' || event.type === 'mousemove' || event.type === 'mouseup' || event.type === 'mouseleave') {
return event;
}
else {
if (event && event.changedTouches && event.changedTouches[0]) {
return event.changedTouches[0];
}
return null;
}
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CarouselComponent {
/**
* @param {?} _ele
*/
constructor(_ele) {
this._ele = _ele;
this.style = {
height: 'auto',
width: '100%',
transform: 'translate3d(0px, 0px, 0px)',
margin: ''
};
this._nodeArr = [];
this._lastIndex = 0;
this._isMouseDown = false;
this._rationWidth = 0;
this._currentSlideWidth = 0;
this._currentSlideHeight = 0;
this._transition = '';
this._spaceWidth = 0;
this.speed = 500;
this.selectedIndex = 0;
this.dots = true;
this.vertical = false;
this.autoplay = false;
this.autoplayInterval = 3000;
this.infinite = false;
this.dotStyle = {};
this.dotActiveStyle = {};
this.frameOverflow = 'hidden';
this.cellSpacing = 0;
this.slideWidth = 1;
this.swipeSpeed = 12;
this.dragging = true;
this.afterChange = new EventEmitter();
this.beforeChange = new EventEmitter();
this.carouselWrapper = true;
this.carouselwrap = true;
}
/**
* @param {?} event
* @return {?}
*/
panstart(event) {
event.stopPropagation();
if (!this.dragging) {
return;
}
this.stopTimer();
this._isMouseDown = true;
this.touchObject = {
startX: getEventTarget(event).pageX,
startY: getEventTarget(event).pageY,
direction: this.touchObject.direction
};
}
/**
* @param {?} event
* @return {?}
*/
panmove(event) {
event.stopPropagation();
if (!this.dragging && !this._isMouseDown) {
return;
}
const { direction } = this.swipeDirection(this.touchObject.startX, getEventTarget(event).pageX, this.touchObject.startY, getEventTarget(event).pageY);
if (direction !== 0) {
event.preventDefault();
}
/** @type {?} */
const length = this.vertical
? Math.abs(getEventTarget(event).pageY - this.touchObject.startY)
: Math.abs(getEventTarget(event).pageX - this.touchObject.startX);
/** @type {?} */
const offset = -this.touchObject.direction * length - this.selectedIndex * this._rationWidth;
this.touchObject = {
startX: this.touchObject.startX,
startY: this.touchObject.startY,
endX: getEventTarget(event).pageX,
endY: getEventTarget(event).pageY,
length,
direction,
offset
};
if (direction !== 0) {
this.setSlideStyles(this.selectedIndex, this.touchObject.direction);
}
this.getListStyles(offset);
}
/**
* @param {?} event
* @return {?}
*/
panend(event) {
event.stopPropagation();
if (!this.dragging && !this._isMouseDown) {
return;
}
this._isMouseDown = false;
if (this.touchObject.length > this.swipeSpeed) {
this.carousel(this.touchObject.direction);
}
else {
this.getListStyles(this.touchObject.direction * this.touchObject.length + this.touchObject.offset);
this.style['transition'] = this._transition;
}
setTimeout(() => {
this.startTimer();
}, this.speed);
}
/**
* @return {?}
*/
cancel() {
setTimeout(() => {
this.startTimer();
}, this.speed);
}
/**
* @return {?}
*/
initCarouselSize() {
/** @type {?} */
const nativeElement = this._ele.nativeElement;
this.slideHeight = nativeElement.querySelector('carouselslide').clientHeight;
this._currentSlideHeight = this.slideHeight * this.slideWidth;
this._currentSlideWidth = nativeElement.clientWidth;
this._rationWidth = this.vertical ? this._currentSlideWidth : this._currentSlideWidth * this.slideWidth;
this._spaceWidth = ((this.vertical ? this.slideHeight : this._currentSlideWidth) - this._rationWidth) / 2;
}
/**
* @param {?} items
* @return {?}
*/
carouselInit(items) {
this.infinite = this.infinite || true;
this._nodeArr = items['_results'];
this.dragging = this.dragging ? this.dragging : false;
if (this._nodeArr.length > 1) {
this._lastIndex = this._nodeArr.length - 1;
setTimeout(() => {
this._nodeArr.forEach((v, index) => {
v.width = this.vertical ? 'auto' : this._rationWidth - this.cellSpacing;
v.left = this.vertical ? 0 : index === this._lastIndex ? -this._rationWidth : index * this._rationWidth;
v.top = this.vertical ? (index === this._lastIndex ? -this._rationWidth : index * this._rationWidth) : 0;
v.margin = this.vertical ? `${this.cellSpacing / 2}px auto` : `auto ${this.cellSpacing / 2}px`;
});
this.startTimer();
}, 0);
}
else if (this._nodeArr.length === 1) {
setTimeout(() => {
this._nodeArr.forEach((v) => {
v.width = this._rationWidth - this.cellSpacing;
v.left = 0;
v.top = 0;
v.margin = `auto ${this.cellSpacing / 2}px`;
});
}, 0);
}
}
/**
* @return {?}
*/
startTimer() {
if (!this.autoplay) {
return;
}
this.stopTimer();
this._timer = this.autoplayInterval
? setInterval(() => {
this.carousel(1);
}, this.autoplayInterval)
: 0;
}
/**
* @return {?}
*/
stopTimer() {
clearInterval(this._timer);
}
/**
* @param {?} moveDirection
* @return {?}
*/
carousel(moveDirection) {
if (this.vertical) {
if (moveDirection === 1) {
this.moveUp();
}
else if (moveDirection === -1) {
this.moveDown();
}
}
else {
if (moveDirection === 1) {
this.moveLeft();
}
else if (moveDirection === -1) {
this.moveRight();
}
}
this.style['transition'] = this._transition;
}
/**
* @return {?}
*/
moveUp() {
this.gotoCarousel(this.getAfterNode(false));
}
/**
* @return {?}
*/
moveDown() {
this.gotoCarousel(this.getAfterNode(true));
}
/**
* @return {?}
*/
moveLeft() {
this.gotoCarousel(this.getAfterNode(false));
}
/**
* @return {?}
*/
moveRight() {
this.gotoCarousel(this.getAfterNode(true));
}
/**
* @param {?} pre
* @return {?}
*/
getAfterNode(pre) {
/** @type {?} */
let nextIndex;
if (pre) {
if (this.selectedIndex <= 0) {
this.getListStyles(this._rationWidth);
setTimeout(() => {
this._nodeArr.forEach((v, tempIndex) => {
if (tempIndex === 0) {
v.left = this.vertical ? 0 : this._nodeArr.length * this._rationWidth;
v.top = this.vertical ? this._nodeArr.length * this._rationWidth : 0;
}
else {
v.left = this.vertical ? 0 : tempIndex * this._rationWidth;
v.top = this.vertical ? tempIndex * this._rationWidth : 0;
}
});
this.getListStyles(-this._rationWidth * (this.items.length - 1));
}, this.speed);
nextIndex = !this.infinite ? null : this._lastIndex;
this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex });
return nextIndex;
}
nextIndex = this.selectedIndex - 1;
this.getListStyles(nextIndex * this._rationWidth * this.touchObject.direction);
this._nodeArr.forEach((v, tempIndex) => {
if (0 === tempIndex && nextIndex === this._nodeArr.length - 2) {
v.left = 0;
v.top = 0;
}
});
this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex });
return nextIndex;
}
else {
if (this.selectedIndex >= this._lastIndex) {
this.setSlideStyles(this.selectedIndex, 1);
this.getListStyles(-(this._lastIndex + 1) * this._rationWidth);
nextIndex = !this.infinite ? null : 0;
this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex });
return nextIndex;
}
nextIndex = this.selectedIndex + 1;
this.setSlideStyles(this.selectedIndex, 1);
this.getListStyles(-nextIndex * this._rationWidth);
this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex });
return nextIndex;
}
}
/**
* @return {?}
*/
caculateDirectionLeftCurrentIndex() {
/** @type {?} */
const previousIndex = this.selectedIndex;
this.selectedIndex = (previousIndex + 1) % this.items.length;
}
/**
* @return {?}
*/
caculateDirectionRightCurrentIndex() {
if (this.selectedIndex === 0) {
this.selectedIndex = this.items.length;
}
/** @type {?} */
const previousIndex = this.selectedIndex;
this.selectedIndex = (previousIndex - 1) % this.items.length;
}
/**
* @param {?} afterIndex
* @return {?}
*/
gotoCarousel(afterIndex) {
if (afterIndex === null) {
return;
}
this.getCurrentIndex();
if (afterIndex === 0) {
setTimeout(() => {
this._nodeArr.forEach((v, index) => {
if (index === this._nodeArr.length - 1) {
v.left = this.vertical ? 0 : -this._rationWidth;
v.top = this.vertical ? -this._rationWidth : 0;
}
else {
v.left = this.vertical ? 0 : index * this._rationWidth;
v.top = this.vertical ? index * this._rationWidth : 0;
}
});
this.startTimer();
this.getListStyles(0);
}, this.speed);
}
this.selectedIndex = afterIndex;
this.afterChange.emit(this.selectedIndex);
}
/**
* @return {?}
*/
getCurrentIndex() {
if (this.touchObject.direction === 1) {
this.caculateDirectionLeftCurrentIndex();
}
else {
this.caculateDirectionRightCurrentIndex();
}
}
/**
* @param {?} index
* @param {?} direction
* @param {?=} xDist
* @return {?}
*/
setSlideStyles(index, direction, xDist = 0) {
if (direction === 1) {
this._nodeArr.forEach((v, tempIndex) => {
if (index < this._nodeArr.length && index - 1 === tempIndex) {
if (xDist === 0 || xDist > this._spaceWidth) {
v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth;
v.top = this.vertical ? (this._nodeArr.length + tempIndex) * this._rationWidth : 0;
}
}
else if (this._nodeArr.length - 1 === tempIndex && index !== 2) {
if (xDist === 0 || xDist > this._spaceWidth) {
v.left = this.vertical ? 0 : (this._nodeArr.length - 1) * this._rationWidth;
v.top = this.vertical ? (this._nodeArr.length - 1) * this._rationWidth : 0;
}
}
else if (index === this._nodeArr.length - 1 && tempIndex === 1 && this.autoplay) {
v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth;
v.top = this.vertical ? tempIndex * this._rationWidth : 0;
}
else if (index === this._nodeArr.length - 1 && tempIndex === 0 && !this.autoplay) {
v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth;
v.top = this.vertical ? tempIndex * this._rationWidth : 0;
}
});
}
else if (direction === -1) {
this._nodeArr.forEach((v, tempIndex) => {
if (index === 0 && this._nodeArr.length - 1 === tempIndex) {
v.left = this.vertical ? 0 : direction * this._rationWidth;
v.top = this.vertical ? direction * this._rationWidth : 0;
}
else if (index === this._nodeArr.length - 2 && index + 1 === tempIndex) {
v.left = this.vertical ? 0 : direction * this._rationWidth;
v.top = this.vertical ? direction * this._rationWidth : 0;
}
else if (index === 1 && 0 === tempIndex) {
v.left = this.vertical ? 0 : direction * this._rationWidth * tempIndex;
v.top = this.vertical ? direction * this._rationWidth : 0;
}
else if (index > 1) {
v.left = this.vertical ? 0 : tempIndex * this._rationWidth;
v.top = this.vertical ? tempIndex * this._rationWidth : 0;
}
});
}
}
/**
* @param {?=} offset
* @return {?}
*/
getListStyles(offset = 0) {
/** @type {?} */
const positionOffset = offset +
(this.vertical
? (this.slideHeight - this._currentSlideHeight) / 2
: (this._currentSlideWidth - this._rationWidth) / 2) -
this.cellSpacing;
this.style = {
height: this._currentSlideHeight + 'px',
width: this.items.length * this._rationWidth + 'px',
transform: this.vertical
? `translate3d(0px, ${positionOffset}px, 0px)`
: `translate3d(${positionOffset}px, 0px, 0px)`,
margin: this.vertical ? `${(this.cellSpacing / 2) * -1}px 0px` : `0px ${(this.cellSpacing / 2) * -1}px`
};
}
/**
* @param {?} x1
* @param {?} x2
* @param {?} y1
* @param {?} y2
* @return {?}
*/
swipeDirection(x1, x2, y1, y2) {
/** @type {?} */
const xDist = x1 - x2;
/** @type {?} */
const yDist = y1 - y2;
/** @type {?} */
const r = Math.atan2(yDist, xDist);
/** @type {?} */
let swipeAngle = Math.round((r * 180) / Math.PI);
if (swipeAngle < 0) {
swipeAngle = 360 - Math.abs(swipeAngle);
}
if (swipeAngle <= 45 && swipeAngle >= 0) {
return {
direction: 1,
xDist: xDist
};
}
if (swipeAngle <= 360 && swipeAngle >= 315) {
return {
direction: 1,
xDist: xDist
};
}
if (swipeAngle >= 135 && swipeAngle <= 225) {
return {
direction: -1,
xDist: xDist
};
}
if (this.vertical === true) {
if (swipeAngle >= 35 + 33 && swipeAngle <= 135) {
return {
direction: 1,
xDist: xDist
};
}
else {
return {
direction: -1,
xDist: xDist
};
}
}
return {
direction: 0,
xDist: xDist
};
}
/**
* @return {?}
*/
get page() {
return this.dots ? this.selectedIndex : 0;
}
/**
* @return {?}
*/
get pageCount() {
return this.dots ? this.items.length : 0;
}
/**
* @return {?}
*/
get dotindicatorStatus() {
return this.dots ? (this.items.length > 1) : this.dots;
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.touchObject = { direction: 1 };
this._transition = `transform ${this.speed / 1000}s`;
this.items.changes.subscribe(items => {
this.carouselInit(items);
});
this.initCarouselSize();
this.getListStyles();
this.carouselInit(this.items);
/** @type {?} */
const nativeElement = this._ele.nativeElement;
/** @type {?} */
const targetNode = nativeElement.querySelector('carouselslide');
/** @type {?} */
const config = { attributes: true, childList: true, subtree: true };
/** @type {?} */
const callback = (mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type == 'attributes') {
if (this.slideHeight !== nativeElement.querySelector('carouselslide').clientHeight) {
this.initCarouselSize();
this.getListStyles();
}
}
}
};
this.observer = new MutationObserver(callback);
this.observer.observe(targetNode, config);
}
/**
* @return {?}
*/
ngOnDestroy() {
this.observer.disconnect();
this.observer = null;
this.stopTimer();
}
}
CarouselComponent.decorators = [
{ type: Component, args: [{
selector: 'Carousel, nzm-carousel',
encapsulation: ViewEncapsulation.None,
template: "<div class=\"slider-frame\" [ngStyle]=\"{overflow: frameOverflow}\">\n <ul class=\"slider-list\" [ngStyle]=\"style\">\n <ng-content></ng-content>\n </ul>\n</div>\n<DotIndicator *ngIf=\"dotindicatorStatus\"\n class=\"am-carousel-wrap-dot\"\n [page]=\"page\"\n [dotStyle]=\"dotStyle\"\n [pageCount]=\"pageCount\"\n [dotActiveStyle]=\"dotActiveStyle\"\n></DotIndicator>\n"
}] }
];
/** @nocollapse */
CarouselComponent.ctorParameters = () => [
{ type: ElementRef }
];
CarouselComponent.propDecorators = {
items: [{ type: ContentChildren, args: [CarouselSlideComponent,] }],
speed: [{ type: Input }],
selectedIndex: [{ type: Input }],
dots: [{ type: Input }],
vertical: [{ type: Input }],
autoplay: [{ type: Input }],
autoplayInterval: [{ type: Input }],
infinite: [{ type: Input }],
dotStyle: [{ type: Input }],
dotActiveStyle: [{ type: Input }],
frameOverflow: [{ type: Input }],
cellSpacing: [{ type: Input }],
slideWidth: [{ type: Input }],
swipeSpeed: [{ type: Input }],
dragging: [{ type: Input }],
afterChange: [{ type: Output }],
beforeChange: [{ type: Output }],
carouselWrapper: [{ type: HostBinding, args: ['class.am-carousel',] }],
carouselwrap: [{ type: HostBinding, args: ['class.carousel',] }],
panstart: [{ type: HostListener, args: ['mousedown', ['$event'],] }, { type: HostListener, args: ['touchstart', ['$event'],] }],
panmove: [{ type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }],
panend: [{ type: HostListener, args: ['mouseleave', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['touchend', ['$event'],] }],
cancel: [{ type: HostListener, args: ['touchcancel', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DotIndicatorComponent {
constructor() {
this.items = [];
this._page = 0;
this._pageCount = 0;
this.dotStyle = {};
this.dotActiveStyle = {};
this.dotColor = 'white';
this.dotIndicator = true;
}
/**
* @param {?} p
* @return {?}
*/
set page(p) {
this._page = p;
this.updateSelected();
}
/**
* @param {?} p
* @return {?}
*/
set pageCount(p) {
this._pageCount = p || 0;
this.updateItems();
}
/**
* @return {?}
*/
updateItems() {
this.items = new Array(this._pageCount);
for (let i = 0; i < this._pageCount; i++) {
this.items[i] = { active: i == this._page };
}
}
/**
* @return {?}
*/
updateSelected() {
if (this.items.length != this._pageCount) {
return this.updateItems();
}
if (this.items.length == 0) {
return;
}
for (let i = 0; i < this._pageCount; i++) {
this.items[i].active = false;
}
this.items[this._page].active = true;
}
}
DotIndicatorComponent.decorators = [
{ type: Component, args: [{
selector: 'DotIndicator, nzm-dot-indicator',
template: "<div class=\"am-carousel-wrap\">\n <div *ngFor=\"let item of items\"\n class=\"am-carousel-wrap-dot\"\n [class.am-carousel-wrap-dot-active]=\"item.active\"\n >\n <span [ngStyle]=\"item.active ? dotActiveStyle : dotStyle\"></span>\n </div>\n</div>",
encapsulation: ViewEncapsulation.None
}] }
];
DotIndicatorComponent.propDecorators = {
page: [{ type: Input }],
pageCount: [{ type: Input }],
dotStyle: [{ type: Input }],
dotActiveStyle: [{ type: Input }],
dotColor: [{ type: Input }],
dotIndicator: [{ type: HostBinding, args: ['class.dot-indicator',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CarouselModule {
}
CarouselModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
declarations: [CarouselComponent, CarouselSlideComponent, DotIndicatorComponent],
exports: [CarouselComponent, CarouselSlideComponent, DotIndicatorComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @param {?} value
* @return {?}
*/
function toBoolean(value) {
return coerceBooleanProperty(value);
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Checkbox {
constructor() {
this.prefixCls = 'am-checkbox';
this.classMap = {
[this.prefixCls]: true,
[`${this.prefixCls}-checked`]: this.checked,
[`${this.prefixCls}-disabled`]: this.disabled
};
this._checked = false;
this._disabled = false;
this._ngModelOnChange = Function.prototype;
this._ngModelOnTouched = Function.prototype;
this.onChange = new EventEmitter();
this.checkBoxWrapper = true;
}
/**
* @return {?}
*/
get checked() {
return this._checked;
}
/**
* @param {?} value
* @return {?}
*/
set checked(value) {
if (!this._disabled) {
this._checked = value;
this.updateClassMap();
}
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = toBoolean(value);
}
/**
* @param {?} event
* @return {?}
*/
onClick(event) {
event.preventDefault();
if (!this._disabled) {
this.updateValue(!this._checked);
}
}
/**
* @param {?} value
* @return {?}
*/
updateValue(value) {
this._ngModelOnChange(value);
this.onChange.emit({ name: this.name, value: this.value, checked: value });
this.checked = value;
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (null !== value) {
this.checked = value;
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._ngModelOnChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this._ngModelOnTouched = fn;
}
/**
* @return {?}
*/
ngOnInit() {
this.updateClassMap();
}
/**
* @return {?}
*/
ngOnChanges() {
this.updateClassMap();
}
/**
* @return {?}
*/
updateClassMap() {
this.classMap = {
[this.prefixCls]: true,
[`${this.prefixCls}-checked`]: this.checked,
[`${this.prefixCls}-disabled`]: this.disabled
};
}
}
Checkbox.decorators = [
{ type: Component, args: [{
selector: '[Checkbox], [nzm-checkbox]',
template: "<span [ngClass]=\"classMap\">\n <input type=\"checkbox\"\n class=\"{{prefixCls}}-input\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [(ngModel)]=\"checked\"\n >\n <span class=\"{{prefixCls}}-inner\"></span>\n</span>\n<ng-content></ng-content>\n",
preserveWhitespaces: false,
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => Checkbox),
multi: true
}
]
}] }
];
/** @nocollapse */
Checkbox.ctorParameters = () => [];
Checkbox.propDecorators = {
name: [{ type: Input }],
value: [{ type: Input }],
checked: [{ type: Input }],
disabled: [{ type: Input }],
onChange: [{ type: Output }],
checkBoxWrapper: [{ type: HostBinding, args: ['class.am-checkbox-wrapper',] }],
onClick: [{ type: HostListener, args: ['click', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class AgreeItem {
constructor() {
this.prefixCls = 'am-checkbox';
this.checked = false;
this.disabled = false;
this.onChange = new EventEmitter();
this.checkboxAgree = true;
}
/**
* @return {?}
*/
agree() {
if (!this.disabled) {
this.checked = !this.checked;
}
}
/**
* @param {?} event
* @return {?}
*/
change(event) {
this.onChange.emit(event);
}
}
AgreeItem.decorators = [
{ type: Component, args: [{
selector: 'AgreeItem, nzm-agree-item',
template: "<label Checkbox\n class=\"{{prefixCls}}-agree-label\"\n [name]=\"name\"\n [value]=\"value\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (click)=\"agree()\"\n (onChange)=\"change($event)\"\n>\n <ng-content></ng-content>\n</label>"
}] }
];
/** @nocollapse */
AgreeItem.ctorParameters = () => [];
AgreeItem.propDecorators = {
name: [{ type: Input }],
value: [{ type: Input }],
checked: [{ type: Input }],
disabled: [{ type: Input }],
onChange: [{ type: Output }],
checkboxAgree: [{ type: HostBinding, args: ['class.am-checkbox-agree',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CheckboxItem {
constructor() {
this.prefixCls = 'am-checkbox';
this.checked = false;
this.disabled = false;
this.onChange = new EventEmitter();
this.onClick = new EventEmitter();
}
/**
* @param {?} event
* @return {?}
*/
onCheckboxClick(event) {
if (!this.disabled) {
this.checked = !this.checked;
}
if (this.onClick.observers.length > 0) {
this.onClick.emit(event);
}
}
/**
* @param {?} event
* @return {?}
*/
change(event) {
this.onChange.emit(event);
}
}
CheckboxItem.decorators = [
{ type: Component, args: [{
selector: 'CheckboxItem, nzm-checkbox-item',
template: "<ListItem [className]=\"'am-checkbox-item ' + (disabled ? 'am-checkbox-item-disabled' : '')\"\n [disabled]=\"disabled\"\n [thumb]=\"checkbox\"\n (onClick)=\"onCheckboxClick($event)\"\n>\n <ng-content></ng-content>\n</ListItem>\n<ng-template #checkbox>\n <label Checkbox\n [name]=\"name\"\n [value]=\"value\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (onChange)=\"change($event)\"\n >\n </label>\n</ng-template>\n"
}] }
];
/** @nocollapse */
CheckboxItem.ctorParameters = () => [];
CheckboxItem.propDecorators = {
name: [{ type: Input }],
value: [{ type: Input }],
checked: [{ type: Input }],
disabled: [{ type: Input }],
onChange: [{ type: Output }],
onClick: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CheckboxModule {
}
CheckboxModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FormsModule, ListModule],
declarations: [Checkbox, CheckboxItem, AgreeItem],
exports: [Checkbox, CheckboxItem, AgreeItem]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Radio {
constructor() {
this.prefixCls = 'am-radio';
this.classMap = {
[this.prefixCls]: true,
[`${this.prefixCls}-checked`]: this.checked,
[`${this.prefixCls}-disabled`]: this.disabled
};
this._checked = false;
this._disabled = false;
this._ngModelOnChange = Function.prototype;
this._ngModelOnTouched = Function.prototype;
this.onChange = new EventEmitter();
this.radioWrapper = true;
}
/**
* @return {?}
*/
get checked() {
return this._checked;
}
/**
* @param {?} value
* @return {?}
*/
set checked(value) {
this._checked = value;
this.updateClassMap();
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = toBoolean(value);
}
/**
* @param {?} event
* @return {?}
*/
onClick(event) {
event.preventDefault();
if (!this._disabled && !this._checked) {
this.updateValue(true);
}
}
/**
* @param {?} checkValue
* @return {?}
*/
updateValue(checkValue) {
this._ngModelOnChange(checkValue);
this.onChange.emit({
name: this.name,
value: this.value,
checked: checkValue
});
this.checked = checkValue;
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (null !== value) {
this.checked = value;
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._ngModelOnChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this._ngModelOnTouched = fn;
}
/**
* @return {?}
*/
ngOnInit() {
this.updateClassMap();
}
/**
* @return {?}
*/
ngOnChanges() {
this.updateClassMap();
}
/**
* @return {?}
*/
updateClassMap() {
this.classMap = {
[this.prefixCls]: true,
[`${this.prefixCls}-checked`]: this.checked,
[`${this.prefixCls}-disabled`]: this.disabled
};
}
}
Radio.decorators = [
{ type: Component, args: [{
selector: '[Radio], [nzm-radio]',
template: "<span [ngClass]=\"classMap\">\n <input type=\"radio\"\n class=\"{{prefixCls}}-input\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [(ngModel)]=\"checked\"\n >\n <span class=\"{{prefixCls}}-inner\"></span>\n</span>\n<ng-content></ng-content>\n",
preserveWhitespaces: false,
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => Radio),
multi: true
}
]
}] }
];
/** @nocollapse */
Radio.ctorParameters = () => [];
Radio.propDecorators = {
name: [{ type: Input }],
value: [{ type: Input }],
checked: [{ type: Input }],
disabled: [{ type: Input }],
onChange: [{ type: Output }],
radioWrapper: [{ type: HostBinding, args: ['class.am-radio-wrapper',] }],
onClick: [{ type: HostListener, args: ['click', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class RadioItem {
constructor() {
this.prefixCls = 'am-radio';
this.checked = false;
this.disabled = false;
this.onClick = new EventEmitter();
this.onChange = new EventEmitter();
}
/**
* @param {?} event
* @return {?}
*/
onRadioItemClick(event) {
if (!this.disabled && !this.checked) {
this.checked = true;
this.onChange.emit({
name: this.name,
value: this.value,
checked: true
});
}
if (this.onClick.observers.length > 0) {
this.onClick.emit(event);
}
}
}
RadioItem.decorators = [
{ type: Component, args: [{
selector: 'RadioItem, nzm-radio-item',
template: "<ListItem [className]=\"'am-radio-item ' + (disabled ? 'am-radio-item-disabled' : '')\"\n [extra]=\"radio\"\n [disabled]=\"disabled\"\n (onClick)=\"onRadioItemClick($event)\"\n>\n <ng-content></ng-content>\n</ListItem>\n<ng-template #radio>\n <label Radio\n [name]=\"name\"\n [value]=\"value\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n ></label>\n</ng-template>\n"
}] }
];
/** @nocollapse */
RadioItem.ctorParameters = () => [];
RadioItem.propDecorators = {
name: [{ type: Input }],
value: [{ type: Input }],
checked: [{ type: Input }],
disabled: [{ type: Input }],
onClick: [{ type: Output }],
onChange: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class RadioModule {
}
RadioModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FormsModule, ListModule],
declarations: [Radio, RadioItem],
exports: [Radio, RadioItem]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ProgressComponent {
constructor() {
this.prefixCls = 'am-progress';
this._percent = 0;
this._exceedance = false;
this.unfilled = true;
this.position = 'fixed';
this.barStyle = {};
this.max = 100;
this.outer = true;
}
/**
* @return {?}
*/
get percent() {
return this._percent;
}
/**
* @param {?} value
* @return {?}
*/
set percent(value) {
this._percent = value;
if (value > 100) {
this._exceedance = true;
}
else {
this._exceedance = false;
}
}
/**
* @return {?}
*/
get value() {
return this.percent;
}
/**
* @return {?}
*/
get fixOuter() {
return 'fixed' === this.position;
}
/**
* @return {?}
*/
get hideOuter() {
return !this.unfilled && !this._exceedance;
}
/**
* @return {?}
*/
get exceedance() {
return this._exceedance;
}
}
ProgressComponent.decorators = [
{ type: Component, args: [{
selector: 'Progress, nzm-progress',
template: "<div class=\"{{prefixCls}}-bar\" [ngStyle]=\"barStyle\" [style.width.%]=\"percent\"></div>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ProgressComponent.ctorParameters = () => [];
ProgressComponent.propDecorators = {
unfilled: [{ type: Input }],
position: [{ type: Input }],
barStyle: [{ type: Input }],
percent: [{ type: Input }],
max: [{ type: HostBinding, args: ['attr.max',] }],
value: [{ type: HostBinding, args: ['attr.value',] }],
outer: [{ type: HostBinding, args: ['class.am-progress-outer',] }],
fixOuter: [{ type: HostBinding, args: ['class.am-progress-fixed-outer',] }],
hideOuter: [{ type: HostBinding, args: ['class.am-progress-hide-outer',] }],
exceedance: [{ type: HostBinding, args: ['class.am-progress-exceedance',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ProgressModule {
}
ProgressModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
declarations: [ProgressComponent],
exports: [ProgressComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class AccordionService {
constructor() {
this.accordion = false;
}
/**
* @param {?} component
* @return {?}
*/
getComponent(component) {
this.accordion = component.accordion;
this.component = component;
}
}
AccordionService.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class AccordionGroupComponent {
/**
* @param {?} _accordionService
* @param {?} _cdr
*/
constructor(_accordionService, _cdr) {
this._accordionService = _accordionService;
this._cdr = _cdr;
this.isShowChild = true;
this.isOpened = false;
this.disabled = false;
this.onOpen = new EventEmitter();
this.onClose = new EventEmitter();
this.onChange = new EventEmitter();
this._amItem = true;
this._isActive = this.isOpened;
this._addon = true;
}
/**
* @return {?}
*/
checkAndToggle() {
this.toggle();
}
/**
* @return {?}
*/
get slide() {
return this.isOpened ? 'down' : 'up';
}
/**
* @return {?}
*/
toggle() {
if (this.disabled) {
return;
}
this.isShowChild = true;
/** @type {?} */
const isOpenedBeforeWeChange = this.isOpened;
if (this._accordionService.accordion) {
this._accordionService.component.closeAll();
}
this.isOpened = !isOpenedBeforeWeChange;
if (this.isOpened) {
this.onOpen.emit();
}
else {
this.onClose.emit();
}
this.onChange.emit(this.isOpened);
}
/**
* @return {?}
*/
openOnInitialization() {
setTimeout(() => {
this.isOpened = true;
this._cdr.detectChanges();
}, 0);
}
/**
* @param {?} event
* @return {?}
*/
slideAnimationDoen(event) {
if (event.fromState === 'down' && event.toState === 'up') {
this.isShowChild = false;
}
}
}
AccordionGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'AccordionPanel',
template: "<div role=\"tab\"\n class=\"am-accordion-header\"\n data-scale=\"true\"\n [attr.aria-expanded]=\"isOpened\"\n (click)=\"checkAndToggle()\"\n>\n <i class=\"arrow\"></i>\n {{header}}\n</div>\n<div role=\"tabpanel\"\n class=\"am-accordion-content\"\n [ngClass]=\"{'am-accordion-content-active':isOpened}\"\n [@slide]=\"slide\"\n (@slide.done)=\"slideAnimationDoen($event)\" \n>\n <div *ngIf=\"isShowChild\" class=\"am-accordion-content-box\">\n <ng-content></ng-content>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None,
animations: [
trigger('slide', [
state('up', style({ height: 0 })),
state('down', style({ height: '*' })),
transition('down => up', [animate(200, style({ height: 0 }))]),
transition('up => down', [
animate(200, style({
height: '*'
}))
])
])
]
}] }
];
/** @nocollapse */
AccordionGroupComponent.ctorParameters = () => [
{ type: AccordionService },
{ type: ChangeDetectorRef }
];
AccordionGroupComponent.propDecorators = {
key: [{ type: Input }],
header: [{ type: Input }],
isOpened: [{ type: Input }],
disabled: [{ type: Input }],
onOpen: [{ type: Output }],
onClose: [{ type: Output }],
onChange: [{ type: Output }],
_amItem: [{ type: HostBinding, args: ['class.am-accordion-item',] }],
_isActive: [{ type: HostBinding, args: ['class.am-accordion-item-active',] }],
_addon: [{ type: HostBinding, args: ['class.addon',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class AccordionComponent {
/**
* @param {?} _accordionService
*/
constructor(_accordionService) {
this._accordionService = _accordionService;
this.expandAll = false;
this.openAnimation = {};
this.accordion = false;
this.onChange = new EventEmitter();
this.amAccordion = true;
this._accordionService.getComponent(this);
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
/** @type {?} */
let result = [];
this.groups.toArray().forEach(group => {
if (group.isOpened) {
if (this.accordion) {
result = group.key;
}
else {
result.push(group.key);
}
}
});
this.onChange.emit(result);
}
/**
* @return {?}
*/
closeAll() {
this.groups.toArray().forEach(group => {
group.isOpened = false;
});
}
/**
* @return {?}
*/
init() {
if (this.expandAll && this.groups && this.groups.length > 0) {
this._oldGroups = this.groups.toArray();
this._oldGroups.forEach((group, index) => {
group.openOnInitialization();
});
this._subscription = this.groups.changes.subscribe(change => {
/** @type {?} */
const newGroups = this.groups.toArray().filter(group => {
return this._oldGroups.indexOf(group) === -1;
});
newGroups.forEach(group => {
group.openOnInitialization();
});
this._oldGroups = this.groups.toArray();
});
}
/** @type {?} */
let currentActiveKey = [];
if (this.activeKey !== undefined && this.activeKey.length > 0 && !this.accordion && this.groups && this.groups.length > 0) {
currentActiveKey = this.toArray(this.activeKey);
this.groups.forEach((group, index) => {
currentActiveKey.forEach(key => {
if (index === parseInt(key, 0)) {
setTimeout(() => {
group.isOpened = true;
}, 0);
}
});
});
}
else if (this.defaultActiveKey !== undefined && !this.expandAll && !this.accordion && this.groups && this.groups.length > 0) {
this.groups.forEach((group, index) => {
if (index === parseInt(this.defaultActiveKey, 0)) {
setTimeout(() => {
group.isOpened = true;
}, 0);
}
});
}
}
/**
* @param {?} activeKey
* @return {?}
*/
toArray(activeKey) {
/** @type {?} */
let currentActiveKey = activeKey;
if (!Array.isArray(currentActiveKey)) {
currentActiveKey = currentActiveKey !== undefined && currentActiveKey !== '' ? [currentActiveKey] : [];
}
return currentActiveKey;
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes["accordion"]) {
this._accordionService.getComponent(this);
}
if (changes["expandAll"] || changes["accordion"]) {
this.init();
}
}
/**
* @return {?}
*/
ngAfterContentInit() {
this.init();
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this._subscription) {
this._subscription.unsubscribe();
}
}
}
AccordionComponent.decorators = [
{ type: Component, args: [{
selector: 'Accordion, nzm-accordion',
template: "<ng-content></ng-content>",
providers: [AccordionService]
}] }
];
/** @nocollapse */
AccordionComponent.ctorParameters = () => [
{ type: AccordionService }
];
AccordionComponent.propDecorators = {
groups: [{ type: ContentChildren, args: [forwardRef(() => AccordionGroupComponent),] }],
expandAll: [{ type: Input }],
activeKey: [{ type: Input }],
defaultActiveKey: [{ type: Input }],
openAnimation: [{ type: Input }],
accordion: [{ type: Input }],
onChange: [{ type: Output }],
amAccordion: [{ type: HostBinding, args: ['class.am-accordion',] }],
click: [{ type: HostListener, args: ['click', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class AccordionModule {
}
AccordionModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, WhiteSpaceModule],
declarations: [AccordionComponent, AccordionGroupComponent],
exports: [AccordionComponent, AccordionGroupComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NoticeBarComponent {
/**
* @param {?} _iconHandler
*/
constructor(_iconHandler) {
this._iconHandler = _iconHandler;
this.isShow = false;
this.isStopScroll = false;
this.marqueeScroll = 'scrolling';
this.style = {};
this._timer = null;
this.marqueeProps = { loop: true, leading: 500, trailing: 8000, fps: 200, style: {} };
this.noticeBarcontent = '';
this.onClick = new EventEmitter();
this._iconHandler.load();
}
/**
* @param {?} value
* @return {?}
*/
set stopScrolling(value) {
this.isStopScroll = value;
if (value) {
this.marqueeScroll = 'scrolling-stop';
clearTimeout(this._timer);
this._timer = setTimeout(function () {
this.marqueeScroll = 'scrolling';
}, 1000);
}
}
/**
* @return {?}
*/
get mode() {
return this._mode;
}
/**
* @param {?} value
* @return {?}
*/
set mode(value) {
this._mode = value;
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
this._icon = value;
}
/**
* @return {?}
*/
get action() {
return this._action;
}
/**
* @param {?} value
* @return {?}
*/
set action(value) {
this._action = value;
}
/**
* @return {?}
*/
click() {
this.onClick.emit(this._mode);
if (this._mode === 'closable') {
this.isShow = false;
}
}
/**
* @return {?}
*/
dataProcess() {
this.isShow = true;
this.style = {
width: '200%'
};
if (window.innerWidth < this._width) {
/** @type {?} */
const count = this.marqueeProps.loop ? 'infinite' : 1;
this.style = {
width: this._width * 2 + 'px',
'animation-delay': `${this.marqueeProps.leading}ms`,
'animation-duration': `${(1 / this.marqueeProps.fps) * 1000}s`,
'animation-iteration-count': `${count}`
};
scroll.call(this);
}
else {
this.marqueeScroll = 'scrolling-stop';
}
}
/**
* @return {?}
*/
ngOnInit() {
document.addEventListener('touchstart', () => {
this.marqueeScroll = 'scrolling-stop';
});
document.addEventListener('touchend', () => {
this.marqueeScroll = 'scrolling';
});
this._width = getRectWidth(this.noticeBarcontent);
this.dataProcess();
}
}
NoticeBarComponent.decorators = [
{ type: Component, args: [{
selector: 'NoticeBar, nzm-notice-bar',
template: "<div role=\"alert\" *ngIf=\"isShow\" class=\"am-notice-bar\" (click)=\"click()\">\n <div *ngIf=\"icon !== null\" class=\"am-notice-bar-icon\">\n <ng-template [ngTemplateOutlet]=\"icon || voice\"></ng-template>\n </div>\n <div class=\"am-notice-bar-content\">\n <div class=\"marquee\">\n <div [ngClass]=\"marqueeScroll\" [ngStyle]=\"style\">\n <span>{{noticeBarcontent}}</span>\n <span>{{noticeBarcontent}}</span>\n </div>\n </div>\n </div>\n <div role=\"button\" *ngIf=\"mode && action !== null\" class=\"am-notice-bar-operation\">\n <ng-template *ngIf=\"mode === 'closable'\" [ngTemplateOutlet]=\"action || cross\"></ng-template>\n <ng-template *ngIf=\"mode === 'link'\" [ngTemplateOutlet]=\"action || right\"></ng-template>\n </div>\n</div>\n\n<ng-template #voice>\n <Icon [type]=\"'voice'\" [size]=\"'xxs'\"></Icon>\n</ng-template>\n<ng-template #cross>\n <Icon [type]=\"'cross'\" [size]=\"'md'\"></Icon>\n</ng-template>\n<ng-template #right>\n <Icon [type]=\"'right'\" [size]=\"'md'\"></Icon>\n</ng-template>\n",
providers: [IconHandler]
}] }
];
/** @nocollapse */
NoticeBarComponent.ctorParameters = () => [
{ type: IconHandler }
];
NoticeBarComponent.propDecorators = {
stopScrolling: [{ type: Input }],
mode: [{ type: Input }],
icon: [{ type: Input }],
action: [{ type: Input }],
marqueeProps: [{ type: Input }],
noticeBarcontent: [{ type: Input }],
onClick: [{ type: Output }]
};
/**
* @return {?}
*/
function scroll() {
/** @type {?} */
let styleDom = document.getElementById('notice_bar_animation_cls');
if (styleDom) {
return;
}
styleDom = document.createElement('style');
styleDom.setAttribute('id', 'notice_bar_animation_cls');
styleDom.innerHTML = `@-webkit-keyframes noticebarmarquee{ 0% { left: 0px; } 100% { left: -${this._width}px; }}`;
document.body.appendChild(styleDom);
}
/**
* @param {?} text
* @return {?}
*/
function getRectWidth(text) {
/** @type {?} */
const _dom = document.createElement('div');
_dom.innerHTML = text;
_dom.style.position = 'absolute';
_dom.style.left = '-9999';
_dom.style.whiteSpace = 'nowrap';
_dom.style.fontSize = '14px';
document.body.appendChild(_dom);
/** @type {?} */
const _w = _dom.clientWidth + 20;
document.body.removeChild(_dom);
return _w;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NoticeBarModule {
}
NoticeBarModule.decorators = [
{ type: NgModule, args: [{
imports: [IconModule, CommonModule],
declarations: [NoticeBarComponent],
exports: [NoticeBarComponent],
providers: [],
entryComponents: []
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ToastComponent {
/**
* @param {?} _zone
*/
constructor(_zone) {
this._zone = _zone;
this.prefixCls = 'am-toast';
this.isContentString = true;
this.transitionName = 'am-fade-enter am-fade-enter-active';
this._iconType = '';
this._content = '';
this.mask = true;
this.amToast = true;
}
/**
* @return {?}
*/
get content() {
return this._content;
}
/**
* @param {?} value
* @return {?}
*/
set content(value) {
if (value instanceof TemplateRef) {
this.isContentString = false;
}
else {
this.isContentString = true;
}
this._zone.run(() => {
this._content = value;
});
}
/**
* @return {?}
*/
get iconType() {
return this._iconType;
}
/**
* @param {?} value
* @return {?}
*/
set iconType(value) {
this._zone.run(() => {
this._iconType = value;
});
}
/**
* @return {?}
*/
get amToastMask() {
return this.mask;
}
/**
* @return {?}
*/
get amToastNoMask() {
return !this.mask;
}
}
ToastComponent.decorators = [
{ type: Component, args: [{
selector: 'Toast',
encapsulation: ViewEncapsulation.None,
template: "<div class=\"{{prefixCls}}-notice {{prefixCls}}-notice-closable {{transitionName}}\">\n <div class=\"{{prefixCls}}-notice-content\">\n <div role=\"alert\"\n *ngIf=\"iconType\"\n class=\"{{prefixCls}}-text {{prefixCls}}-text-icon\"\n aria-live=\"assertive\"\n >\n <Icon [type]=\"iconType\" [size]=\"'lg'\"></Icon>\n <div *ngIf=\"isContentString\" class=\"{{prefixCls}}-text-info\">{{content}}</div>\n </div>\n <div *ngIf=\"!iconType\" class=\"{{prefixCls}}-text\" role=\"alert\" aria-live=\"assertive\">\n <div *ngIf=\"isContentString\" class=\"{{prefixCls}}-text-info\">{{content}}</div>\n <ng-template *ngIf=\"!isContentString\" [ngTemplateOutlet]=\"content\"></ng-template>\n </div>\n </div>\n <a class=\"{{prefixCls}}-notice-close\">\n <span class=\"{{prefixCls}}-notice-close-x\"></span>\n </a>\n</div>\n"
}] }
];
/** @nocollapse */
ToastComponent.ctorParameters = () => [
{ type: NgZone }
];
ToastComponent.propDecorators = {
mask: [{ type: Input }],
content: [{ type: Input }],
iconType: [{ type: Input }],
amToast: [{ type: HostBinding, args: ['class.am-toast',] }],
amToastMask: [{ type: HostBinding, args: ['class.am-toast-mask',] }],
amToastNoMask: [{ type: HostBinding, args: ['class.am-toast-nomask',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ToastModule {
}
ToastModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, IconModule, WingBlankModule],
exports: [ToastComponent],
declarations: [ToastComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class BaseOptions {
constructor() {
this.visible = false;
this.focus = true;
this.closable = false;
this.maskClosable = true;
this.transparent = false;
this.popup = false;
this.transitionName = 'am-zoom';
this.maskTransitionName = 'am-fade';
}
}
class ModalOptions extends BaseOptions {
}
ModalOptions.decorators = [
{ type: Injectable }
];
class AlertOptions extends BaseOptions {
}
AlertOptions.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ModalComponent {
/**
* @param {?} _option
*/
constructor(_option) {
this._option = _option;
this.defaultProps = {
visible: false,
prefixCls: 'am-modal',
transparent: false,
popup: false,
animationType: 'slide-down',
animated: true,
style: {},
footer: [],
closable: false,
maskClosable: false,
operation: false,
platform: 'ios',
className: '',
wrapClassName: '',
message: '',
actions: [],
callbackOrActions: [],
type: '',
defaultValue: '',
placeholders: []
};
this.value = '';
this.passwordValue = '';
this.autoFocus = { focus: true, date: new Date() };
this.transitionName = '';
this.maskTransitionName = '';
this.isTitleString = true;
this.isMessageString = true;
this.wrapCls = {};
this.cls = {};
this.btnGroupClass = {};
this.data = {};
this._title = '';
this._message = '';
this._focus = true;
this.onClose = new EventEmitter();
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
if (value instanceof TemplateRef) {
this.isTitleString = false;
}
else {
this.isTitleString = true;
}
this._title = value;
}
/**
* @param {?} value
* @return {?}
*/
set visible(value) {
if (!value) {
this.leaveAnimation();
}
else {
this.defaultProps.visible = value;
if (this.defaultProps.animated) {
if (this.defaultProps.transparent) {
this.transitionName = this.maskTransitionName = 'am-fade-enter am-fade-enter-active';
}
else {
this.transitionName = this.maskTransitionName = 'am-slide-up-enter am-slide-up-enter-active';
}
if (this.defaultProps.popup) {
this.transitionName =
this.defaultProps.animationType === 'slide-up'
? 'am-slide-up-enter am-slide-up-enter-active'
: 'am-slide-down-enter am-slide-down-enter-active';
this.maskTransitionName = 'am-fade-enter am-fade-enter-active';
}
}
this.setClassMap();
}
}
/**
* @param {?} value
* @return {?}
*/
set closable(value) {
this.defaultProps.closable = value;
}
/**
* @param {?} value
* @return {?}
*/
set maskClosable(value) {
this.defaultProps.maskClosable = value;
}
/**
* @param {?} value
* @return {?}
*/
set popup(value) {
this.defaultProps.popup = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set animationType(value) {
this.defaultProps.animationType = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set transparent(value) {
this.defaultProps.transparent = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set footer(value) {
this.defaultProps.footer = value;
}
/**
* @param {?} value
* @return {?}
*/
set platform(value) {
this.defaultProps.platform = value;
this.setClassMap();
}
/**
* @return {?}
*/
get message() {
return this._message;
}
/**
* @param {?} value
* @return {?}
*/
set message(value) {
if (value instanceof TemplateRef) {
this.isMessageString = false;
}
else {
this.isMessageString = true;
}
this._message = value;
}
/**
* @param {?} value
* @return {?}
*/
set className(value) {
this.defaultProps.className = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set wrapClassName(value) {
this.defaultProps.wrapClassName = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set actions(value) {
this.defaultProps.footer = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this.defaultProps.defaultValue = value !== undefined ? value : '';
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
this.defaultProps.type = value;
}
/**
* @param {?} value
* @return {?}
*/
set placeholders(value) {
this.defaultProps.placeholders = value;
}
/**
* @param {?} value
* @return {?}
*/
set operation(value) {
this.defaultProps.operation = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set focus(value) {
if (value) {
this._focus = value;
}
}
/**
* @return {?}
*/
setClassMap() {
this.wrapCls = {
[this.defaultProps.wrapClassName]: true,
[`${this.defaultProps.prefixCls}-wrap-popup`]: this.defaultProps.popup
};
this.cls = {
[this.defaultProps.className]: true,
[`${this.defaultProps.prefixCls}-transparent`]: this.defaultProps.transparent,
[`${this.defaultProps.prefixCls}-popup`]: this.defaultProps.popup,
[`${this.defaultProps.prefixCls}-popup-${this.defaultProps.animationType}`]: this.defaultProps.popup && this.defaultProps.animationType,
[`${this.defaultProps.prefixCls}-android`]: this.defaultProps.platform === 'android'
};
this.btnGroupClass = {
[`${this.defaultProps.prefixCls}-button-group-${this.defaultProps.footer.length === 2 && !this.defaultProps.operation ? 'h' : 'v'}`]: true,
[`${this.defaultProps.prefixCls}-button-group-${this.defaultProps.operation ? 'operation' : 'normal'}`]: true
};
}
/**
* @param {?} type
* @param {?} value
* @return {?}
*/
inputChange(type, value) {
this.data[type] = value;
}
/**
* @return {?}
*/
leaveAnimation() {
if (this.defaultProps.animated) {
if (this.defaultProps.transparent) {
this.transitionName = this.maskTransitionName = 'am-fade-leave am-fade-leave-active';
}
else {
this.transitionName = this.maskTransitionName = 'am-slide-up-leave am-slide-up-leave-active';
}
if (this.defaultProps.popup) {
this.transitionName =
this.defaultProps.animationType === 'slide-up'
? 'am-slide-up-leave am-slide-up-leave-active'
: 'am-slide-down-leave am-slide-down-leave-active';
this.maskTransitionName = 'am-fade-leave am-fade-leave-active';
}
}
setTimeout(() => {
this.defaultProps.visible = false;
}, 200);
}
/**
* @return {?}
*/
close() {
if ((!this.defaultProps.closable || !this.defaultProps.maskClosable) && !this.defaultProps.popup) {
return;
}
if (this._option.close) {
this._option.close();
}
else {
this.leaveAnimation();
this.onClose.emit();
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setClassMap();
}
}
ModalComponent.decorators = [
{ type: Component, args: [{
selector: 'Modal',
template: "<div *ngIf=\"defaultProps.visible\">\n <div class=\"{{defaultProps.prefixCls}}-mask {{maskTransitionName}}\"></div>\n <div role=\"dialog\"\n class=\"{{defaultProps.prefixCls}}-wrap {{transitionName}}\"\n [ngClass]=\"wrapCls\"\n (click)=\"close()\"\n >\n <div role=\"document\"\n class=\"{{defaultProps.prefixCls}}\"\n [ngClass]=\"cls\"\n >\n <div class=\"{{defaultProps.prefixCls}}-content\">\n <div *ngIf=\"defaultProps.closable\"\n class=\"{{defaultProps.prefixCls}}-close\"\n (click)=\"close()\"\n >\n <span class=\"{{defaultProps.prefixCls}}-close-x\"></span>\n </div>\n <div class=\"{{defaultProps.prefixCls}}-header\">\n <div *ngIf=\"isTitleString\" class=\"{{defaultProps.prefixCls}}-title\">{{title}}</div>\n <ng-template *ngIf=\"!isTitleString\" [ngTemplateOutlet]=\"title\"></ng-template>\n </div>\n <div class=\"{{defaultProps.prefixCls}}-body\">\n <ng-content></ng-content>\n <div *ngIf=\"isMessageString\" class=\"{{defaultProps.prefixCls}}-alert-content\">{{message}}</div>\n <ng-template *ngIf=\"!isMessageString\" [ngTemplateOutlet]=\"message\"></ng-template>\n <ng-template *ngIf=\"defaultProps.type === 'default'\" [ngTemplateOutlet]=\"promptDefault\"></ng-template>\n <ng-template *ngIf=\"defaultProps.type === 'secure-text'\" [ngTemplateOutlet]=\"promptSecure\"></ng-template>\n <ng-template *ngIf=\"defaultProps.type === 'login-password'\" [ngTemplateOutlet]=\"promptPassword\"></ng-template>\n </div>\n <div class=\"{{defaultProps.prefixCls}}-footer\">\n <div [ngClass]=\"btnGroupClass\" role=\"group\">\n <div Button\n role=\"button\"\n *ngFor=\"let button of defaultProps.footer\"\n [className]=\"'am-modal-button'\"\n (onClick)=\"button.onPress()\"\n >\n {{button.text}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #promptPassword>\n <div class=\"{{defaultProps.prefixCls}}-input-container\">\n <div class=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n autofocus\n [type]=\"'text'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"value\" \n (ngModelChange)=\"inputChange('text', $event)\" \n >\n </div>\n <div className=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n [type]=\"'password'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"passwordValue\" \n (ngModelChange)=\"inputChange('password', $event)\" \n >\n </div>\n </div>\n</ng-template>\n<ng-template #promptSecure>\n <div className=\"{{defaultProps.prefixCls}}-input-container\">\n <div className=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n autofocus\n [type]=\"'password'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"passwordValue\" \n (ngModelChange)=\"inputChange('password', $event)\" \n >\n </div>\n </div>\n</ng-template>\n<ng-template #promptDefault>\n <div className=\"{{defaultProps.prefixCls}}-input-container\">\n <div className=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n autofocus\n [type]=\"'text'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"value\" \n (ngModelChange)=\"inputChange('text', $event)\" \n >\n </div>\n </div>\n</ng-template>",
encapsulation: ViewEncapsulation.None,
providers: [NgSwitch, NgSwitchCase, ModalOptions]
}] }
];
/** @nocollapse */
ModalComponent.ctorParameters = () => [
{ type: ModalOptions }
];
ModalComponent.propDecorators = {
inputElementRef: [{ type: ViewChild, args: ['inputElement',] }],
title: [{ type: Input }],
visible: [{ type: Input }],
closable: [{ type: Input }],
maskClosable: [{ type: Input }],
popup: [{ type: Input }],
animationType: [{ type: Input }],
transparent: [{ type: Input }],
footer: [{ type: Input }],
platform: [{ type: Input }],
message: [{ type: Input }],
className: [{ type: Input }],
wrapClassName: [{ type: Input }],
actions: [{ type: Input }],
defaultValue: [{ type: Input }],
type: [{ type: Input }],
placeholders: [{ type: Input }],
operation: [{ type: Input }],
focus: [{ type: Input }],
onClose: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ModalModule {
}
ModalModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, ListModule, WingBlankModule, WhiteSpaceModule, ButtonModule, InputItemModule, FormsModule, ReactiveFormsModule],
exports: [ModalComponent],
declarations: [ModalComponent],
providers: [NgSwitch, NgSwitchCase]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverOptions {
constructor() {
this.showArrow = false;
this.mask = false;
this.placement = 'bottom';
this.appendToBody = false;
}
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverComponentOptions extends PopoverOptions {
}
PopoverComponentOptions.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverComponent {
/**
* @param {?} options
*/
constructor(options) {
this.options = options;
this.defaultProps = {
prefixCls: 'am-popover'
};
this.maskCls = {};
this.popoverCls = {};
}
/**
* @return {?}
*/
setClassMap() {
this.maskCls = {
[`${this.defaultProps.prefixCls}-mask`]: this.options.mask,
[`${this.defaultProps.prefixCls}-mask-hidden`]: !this.options.mask
};
this.popoverCls = {
[`${this.defaultProps.prefixCls}`]: true,
[`${this.defaultProps.prefixCls}-placement-${this.options.placement}`]: true
};
}
/**
* @return {?}
*/
ngOnInit() {
this.setClassMap();
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.options.onAfterViewInit();
}
}
PopoverComponent.decorators = [
{ type: Component, args: [{
selector: 'Popover',
template: "<ng-content></ng-content>\n<div [ngClass]=\"maskCls\" (click)=\"options.hidePopover()\"></div>\n<div [ngClass]=\"popoverCls\" style=\"color: currentcolor;\">\n <div class=\"{{defaultProps.prefixCls}}-content\">\n <div *ngIf=\"options.showArrow\" class=\"{{defaultProps.prefixCls}}-arrow\"></div>\n <div class=\"{{defaultProps.prefixCls}}-inner\">\n <div class=\"{{defaultProps.prefixCls}}-inner-wrapper\">\n <ng-template [ngTemplateOutlet]=\"options.overlay\" [ngTemplateOutletContext]=\"{options: options}\">\n </ng-template>\n </div>\n </div>\n </div>\n</div>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
PopoverComponent.ctorParameters = () => [
{ type: PopoverComponentOptions }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @param {?} element
* @return {?}
*/
function getAllStyles(element) { return window.getComputedStyle(element); }
/**
* @param {?} element
* @param {?} prop
* @return {?}
*/
function getStyle(element, prop) { return getAllStyles(element)[prop]; }
/**
* @param {?} element
* @return {?}
*/
function isStaticPositioned(element) {
return (getStyle(element, 'position') || 'static') === 'static';
}
/**
* @param {?} element
* @return {?}
*/
function getOffsetParent(element) {
/** @type {?} */
let offsetParentEl = element.offsetParent || document.documentElement;
while (offsetParentEl && offsetParentEl !== document.documentElement && isStaticPositioned(offsetParentEl)) {
offsetParentEl = offsetParentEl.offsetParent;
}
return offsetParentEl || document.documentElement;
}
/**
* @param {?} element
* @param {?} round
* @return {?}
*/
function getOffset(element, round) {
if (round === void 0) {
round = true;
}
/** @type {?} */
let elBcr = element.getBoundingClientRect();
/** @type {?} */
let viewportOffset = {
top: window.pageYOffset - document.documentElement.clientTop,
left: window.pageXOffset - document.documentElement.clientLeft
};
/** @type {?} */
let elOffset = {
height: elBcr.height || element.offsetHeight,
width: elBcr.width || element.offsetWidth,
top: elBcr.top + viewportOffset.top,
bottom: elBcr.bottom + viewportOffset.top,
left: elBcr.left + viewportOffset.left,
right: elBcr.right + viewportOffset.left
};
if (round) {
elOffset.height = Math.round(elOffset.height);
elOffset.width = Math.round(elOffset.width);
elOffset.top = Math.round(elOffset.top);
elOffset.bottom = Math.round(elOffset.bottom);
elOffset.left = Math.round(elOffset.left);
elOffset.right = Math.round(elOffset.right);
}
return elOffset;
}
/**
* @param {?} element
* @param {?} round
* @return {?}
*/
function getPosition(element, round) {
if (round === void 0) {
round = true;
}
/** @type {?} */
let elPosition;
/** @type {?} */
let parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };
if (getStyle(element, 'position') === 'fixed') {
elPosition = element.getBoundingClientRect();
}
else {
/** @type {?} */
let offsetParentEl = getOffsetParent(element);
elPosition = getOffset(element, false);
if (offsetParentEl !== document.documentElement) {
parentOffset = getOffset(offsetParentEl, false);
}
parentOffset.top += offsetParentEl.clientTop;
parentOffset.left += offsetParentEl.clientLeft;
}
elPosition.top -= parentOffset.top;
elPosition.bottom -= parentOffset.top;
elPosition.left -= parentOffset.left;
elPosition.right -= parentOffset.left;
if (round) {
elPosition.top = Math.round(elPosition.top);
elPosition.bottom = Math.round(elPosition.bottom);
elPosition.left = Math.round(elPosition.left);
elPosition.right = Math.round(elPosition.right);
}
return elPosition;
}
/**
* @param {?} hostElement
* @param {?} targetElement
* @param {?} placement
* @param {?} appendToBody
* @return {?}
*/
function getPositionElements(hostElement, targetElement, placement, appendToBody) {
/** @type {?} */
let hostElPosition = appendToBody ? getOffset(hostElement, false) : getPosition(hostElement, false);
/** @type {?} */
let targetElStyles = getAllStyles(targetElement);
/** @type {?} */
let targetElBCR = targetElement.getBoundingClientRect();
/** @type {?} */
let placementPrimary = placement.split('-')[0] || 'top';
/** @type {?} */
let placementSecondary = placement.split('-')[1] || 'center';
/** @type {?} */
let targetElPosition = {
'height': targetElBCR.height || targetElement.offsetHeight,
'width': targetElBCR.width || targetElement.offsetWidth,
'top': 0,
'bottom': targetElBCR.height || targetElement.offsetHeight,
'left': 0,
'right': targetElBCR.width || targetElement.offsetWidth
};
switch (placementPrimary) {
case 'top':
targetElPosition.top =
hostElPosition.top - (targetElement.offsetHeight + parseFloat(targetElStyles.marginBottom));
break;
case 'bottom':
targetElPosition.top = hostElPosition.top + hostElPosition.height;
break;
case 'left':
targetElPosition.left =
hostElPosition.left - (targetElement.offsetWidth + parseFloat(targetElStyles.marginRight));
break;
case 'right':
targetElPosition.left = hostElPosition.left + hostElPosition.width;
break;
}
switch (placementSecondary) {
case 'top':
targetElPosition.top = hostElPosition.top;
break;
case 'bottom':
targetElPosition.top = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;
break;
case 'left':
targetElPosition.left = hostElPosition.left;
break;
case 'right':
targetElPosition.left = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;
break;
case 'center':
if (placementPrimary === 'top' || placementPrimary === 'bottom') {
targetElPosition.left = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;
}
else {
targetElPosition.top = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;
}
break;
}
targetElPosition.top = Math.round(targetElPosition.top);
targetElPosition.bottom = Math.round(targetElPosition.bottom);
targetElPosition.left = Math.round(targetElPosition.left);
targetElPosition.right = Math.round(targetElPosition.right);
return targetElPosition;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverDirective {
/**
* @param {?} _viewContainerRef
* @param {?} _elm
* @param {?} _defaultOptions
* @param {?} _cfr
* @param {?} _renderer
*/
constructor(_viewContainerRef, _elm, _defaultOptions, _cfr, _renderer) {
this._viewContainerRef = _viewContainerRef;
this._elm = _elm;
this._defaultOptions = _defaultOptions;
this._cfr = _cfr;
this._renderer = _renderer;
this._eventListeners = [];
this.onVisibleChange = new EventEmitter(true);
this.onSelect = new EventEmitter();
}
/**
* @return {?}
*/
togglePopover() {
if (!this.popover) {
this.showPopover();
}
else {
this.hidePopover();
}
}
/**
* @param {?} placement
* @return {?}
*/
positionMap(placement) {
switch (placement) {
case 'topLeft':
return 'top-left';
case 'topRight':
return 'top-right';
case 'bottomLeft':
return 'bottom-left';
case 'bottomRight':
return 'bottom-right';
case 'leftTop':
return 'left-top';
case 'leftBottom':
return 'left-bottom';
case 'rightTop':
return 'right-top';
case 'rightBottom':
return 'right-bottom';
case 'fullScreen':
case 'landScape':
return 'bottom';
default:
return placement;
}
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this.visible) {
setTimeout(() => {
this.showPopover();
}, 0);
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.hidePopover();
}
/**
* @param {?} event
* @return {?}
*/
onDocumentClick(event) {
if (this.popover &&
!this._elm.nativeElement.contains(event.target) &&
!this.popover.location.nativeElement.contains(event.target)) {
this.hidePopover();
}
}
/**
* @return {?}
*/
showPopover() {
if (!this.popover) {
setTimeout(() => {
this._eventListeners = [
this._renderer.listen('document', 'click', (event) => this.onDocumentClick(event)),
this._renderer.listen('document', 'touchend', (event) => this.onDocumentClick(event)),
this._renderer.listen('window', 'resize', () => this.positionPopover())
];
});
/** @type {?} */
const options = new PopoverComponentOptions();
options.placement = this.placement;
Object.assign(options, this._defaultOptions, {
hidePopover: (event) => {
this.hidePopover();
},
onAfterViewInit: () => {
this.positionPopover();
/** @type {?} */
const children = document.getElementsByClassName('am-popover-inner-wrapper')[0].children;
if (children.length > 0) {
// 首先我们检查它是否包含子节点
for (let i = 0; i < children.length; i++) {
children[i].id = `${i}`;
children[i].addEventListener('click', () => {
if (this.onSelect) {
this.onSelect.emit(children[i]);
this.hidePopover();
}
}, false);
}
}
}
});
/** @type {?} */
const optionalParams = [
'mask',
'showArrow',
'placement',
'appendToBody',
'overlay'
];
optionalParams.forEach(param => {
if (typeof this[param] !== 'undefined') {
(/** @type {?} */ (options))[param] = this[param];
}
});
/** @type {?} */
const componentFactory = this._cfr.resolveComponentFactory(PopoverComponent);
/** @type {?} */
const childInjector = Injector.create([
{
provide: PopoverComponentOptions,
useValue: options
}
], this._viewContainerRef.parentInjector);
this.popover = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector);
if (options.appendToBody) {
document.body.appendChild(this.popover.location.nativeElement);
}
this.onVisibleChange.emit(true);
}
}
/**
* @return {?}
*/
positionPopover() {
if (this.popover) {
/** @type {?} */
const popoverElement = this.popover.location.nativeElement.children[1];
/** @type {?} */
const popoverPosition = getPositionElements(this._elm.nativeElement, popoverElement, this.positionMap(this.placement) || this._defaultOptions.placement, this.appendToBody || this._defaultOptions.appendToBody);
if (this.placement === 'landScape') {
this._renderer.setStyle(popoverElement, 'top', `${popoverPosition.top}px`);
this._renderer.setStyle(popoverElement, 'left', `0px`);
this._renderer.setStyle(popoverElement, 'width', `${window.innerWidth}px`);
this._renderer.setStyle(popoverElement, 'max-height', `${window.innerHeight - popoverPosition.height}px`);
}
else if (this.placement === 'fullScreen') {
this._renderer.setStyle(popoverElement, 'top', `${0}px`);
this._renderer.setStyle(popoverElement, 'left', `0px`);
this._renderer.setStyle(popoverElement, 'width', `${window.innerWidth}px`);
this._renderer.setStyle(popoverElement, 'max-height', `${window.innerHeight - popoverPosition.height}px`);
}
else {
this._renderer.setStyle(popoverElement, 'top', `${popoverPosition.top}px`);
this._renderer.setStyle(popoverElement, 'left', `${popoverPosition.left}px`);
}
}
}
/**
* @return {?}
*/
hidePopover() {
if (this.popover) {
this.popover.destroy();
delete this.popover;
this.onVisibleChange.emit(false);
this._eventListeners.forEach(fn => fn());
this._eventListeners = [];
}
}
}
PopoverDirective.decorators = [
{ type: Directive, args: [{
selector: '[Popover], [nzm-popover]',
providers: [PopoverOptions]
},] }
];
/** @nocollapse */
PopoverDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: ElementRef },
{ type: PopoverOptions },
{ type: ComponentFactoryResolver },
{ type: Renderer2 }
];
PopoverDirective.propDecorators = {
mask: [{ type: Input }],
showArrow: [{ type: Input }],
visible: [{ type: Input }],
placement: [{ type: Input }],
overlay: [{ type: Input }],
onVisibleChange: [{ type: Output }],
onSelect: [{ type: Output }],
appendToBody: [{ type: Input }],
togglePopover: [{ type: HostListener, args: ['click',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverModule {
}
PopoverModule.decorators = [
{ type: NgModule, args: [{
declarations: [PopoverDirective, PopoverComponent],
imports: [CommonModule],
exports: [PopoverDirective, PopoverComponent],
entryComponents: [PopoverComponent],
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NavBarComponent {
constructor() {
this.defaultProps = {
prefixCls: 'am-navbar',
mode: 'dark',
onLeftClick: () => { }
};
this.navbarCls = {};
this.isIconString = true;
this.isLeftContentString = true;
this.isRightContentString = true;
this.onLeftClick = new EventEmitter();
this._amNavbar = true;
}
/**
* @param {?} value
* @return {?}
*/
set mode(value) {
this.defaultProps.mode = value;
this._amNavbarLight = this.defaultProps.mode === 'light';
this._amNavbardark = this.defaultProps.mode === 'dark';
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
if (value instanceof TemplateRef) {
this.isIconString = false;
}
else {
this.isIconString = true;
}
this._icon = value;
}
/**
* @return {?}
*/
get leftContent() {
return this._leftContent;
}
/**
* @param {?} value
* @return {?}
*/
set leftContent(value) {
if (value instanceof TemplateRef) {
this.isLeftContentString = false;
}
else {
this.isLeftContentString = true;
}
this._leftContent = value;
}
/**
* @return {?}
*/
get rightContent() {
return this._rightContent;
}
/**
* @param {?} value
* @return {?}
*/
set rightContent(value) {
if (value instanceof TemplateRef) {
this.isRightContentString = false;
}
else {
this.isRightContentString = true;
}
this._rightContent = value;
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
this.onLeftClick.emit(event);
}
}
NavBarComponent.decorators = [
{ type: Component, args: [{
selector: 'Navbar, nzm-nav-bar',
template: "<div role=\"button\" class=\"{{defaultProps.prefixCls}}-left\" (click)=\"click($event)\">\n <ng-template *ngIf=\"!isLeftContentString\" [ngTemplateOutlet]=\"leftContent\"></ng-template>\n <span *ngIf=\"icon\" class=\"{{defaultProps.prefixCls}}-left-icon\" aria-hidden=\"true\">\n <Icon *ngIf=\"isIconString\" [type]=\"icon\"></Icon>\n <ng-template *ngIf=\"!isIconString\" [ngTemplateOutlet]=\"icon\"></ng-template>\n </span>\n {{isLeftContentString ? leftContent: null}}\n</div>\n<div class=\"{{defaultProps.prefixCls}}-title\">\n <ng-content></ng-content>\n</div>\n<div class=\"{{defaultProps.prefixCls}}-right\">\n {{isRightContentString ? rightContent: null}}\n <ng-template *ngIf=\"!isRightContentString\" [ngTemplateOutlet]=\"rightContent\"></ng-template>\n</div>"
}] }
];
/** @nocollapse */
NavBarComponent.ctorParameters = () => [];
NavBarComponent.propDecorators = {
mode: [{ type: Input }],
icon: [{ type: Input }],
leftContent: [{ type: Input }],
rightContent: [{ type: Input }],
onLeftClick: [{ type: Output }],
_amNavbar: [{ type: HostBinding, args: ['class.am-navbar',] }],
_amNavbarLight: [{ type: HostBinding, args: ['class.am-navbar-light',] }],
_amNavbardark: [{ type: HostBinding, args: ['class.am-navbar-dark',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NavBarModule {
}
NavBarModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, IconModule],
exports: [NavBarComponent],
declarations: [NavBarComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// 同步自 'rmc-calendar/lib/locale/en_US';
var Calendar = {
title: 'Calendar',
today: 'Today',
month: 'Month',
year: 'Year',
am: 'AM',
pm: 'PM',
dateTimeFormat: 'MM/dd/yyyy w hh:mm',
dateFormat: 'yyyy/MM/dd w',
noChoose: 'No Choose',
week: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fir', 'Sat'],
clear: 'Clear',
selectTime: 'Select Time',
selectStartTime: 'Select Start Time',
selectEndTime: 'Select End Time',
start: 'Start',
end: 'End',
begin: 'Start',
over: 'End',
begin_over: 'S/E',
confirm: 'Confirm',
monthTitle: 'yyyy/MM',
loadPrevMonth: 'Load Prev Month',
yesterday: 'Yesterday',
lastWeek: 'Last Week',
lastMonth: 'Last Month'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
const mergeDateTime = (date, time) => {
date = date || new Date();
if (!time)
return date;
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds());
};
/** @type {?} */
const formatDate = (date, format, locale) => {
/** @type {?} */
const week = locale && locale.week;
/** @type {?} */
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'w+': week && week[date.getDay()],
S: date.getMilliseconds()
};
if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
for (let k in o) {
if (new RegExp('(' + k + ')').test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
}
}
return format;
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CalendarComponent {
/**
* @param {?} _localeProviderService
*/
constructor(_localeProviderService) {
this._localeProviderService = _localeProviderService;
this.isShow = false;
this.showClear = false;
this.props = /** @type {?} */ ({
visible: false,
showHeader: true,
locale: defaultLocale,
pickTime: false,
showShortcut: false,
prefixCls: 'rmc-calendar',
type: 'range',
defaultTimeValue: new Date(2000, 0, 1, 8)
});
this.state = /** @type {?} */ ({
showTimePicker: false,
timePickerTitle: '',
startDate: undefined,
endDate: undefined,
disConfirmBtn: true,
clientHight: 0
});
this._unsubscribe$ = new Subject();
this.onCancel = new EventEmitter();
this.onConfirm = new EventEmitter();
this.onSelectHasDisableDate = new EventEmitter();
this.class = 'am-calendar';
this.selectDate = (date, useDateTime = false, oldState = {}, props = this.props) => {
if (!date) {
return /** @type {?} */ ({});
}
/** @type {?} */
let newState = /** @type {?} */ ({});
const { type, pickTime, defaultTimeValue, locale = /** @type {?} */ ({}) } = props;
/** @type {?} */
const newDate = pickTime && !useDateTime ? mergeDateTime(date, defaultTimeValue) : date;
const { startDate, endDate } = oldState;
switch (type) {
case 'one':
newState = Object.assign({}, newState, { startDate: newDate, disConfirmBtn: false });
if (pickTime) {
newState = Object.assign({}, newState, { timePickerTitle: locale.selectTime, showTimePicker: true });
}
break;
case 'range':
if (!startDate || endDate) {
newState = Object.assign({}, newState, { startDate: newDate, endDate: undefined, disConfirmBtn: true });
if (pickTime) {
newState = Object.assign({}, newState, { timePickerTitle: locale.selectStartTime, showTimePicker: true });
}
}
else {
newState = Object.assign({}, newState, { timePickerTitle: +newDate >= +startDate ? locale.selectEndTime : locale.selectStartTime, disConfirmBtn: false, endDate: pickTime && !useDateTime && +newDate >= +startDate
? new Date(+mergeDateTime(newDate, startDate) + 3600000)
: newDate });
}
break;
}
return newState;
};
this.onSelectedDate = (date) => {
const { startDate, endDate } = this.state;
const { onSelect } = this.props;
if (onSelect) {
/** @type {?} */
const value = onSelect(date, [startDate, endDate]);
if (value) {
this.shortcutSelect(value[0], value[1]);
return;
}
}
this.state = Object.assign({}, this.state, this.selectDate(date, false, { startDate, endDate }));
this.showClear = !!this.state.startDate;
};
this.triggerSelectHasDisableDate = (date) => {
this.triggerClear();
this.onSelectHasDisableDate && this.onSelectHasDisableDate.emit(date);
};
this.onClose = () => {
this.state = /** @type {?} */ ({
showTimePicker: false,
timePickerTitle: '',
startDate: undefined,
endDate: undefined,
disConfirmBtn: true,
clientHight: 0
});
this.showClear = !!this.state.startDate;
};
this.triggerConfirm = () => {
const { startDate, endDate } = this.state;
if (startDate && endDate && +startDate > +endDate) {
this.onClose();
return this.onConfirm && this.onConfirm.emit({ startDate: endDate, endDate: startDate });
}
this.onConfirm && this.onConfirm.emit({ startDate, endDate });
this.onClose();
};
this.triggerClear = () => {
// 清除数据做延迟,否则同步刷新数据导致报错
setTimeout(() => {
this.state = Object.assign({}, this.state, { startDate: undefined, endDate: undefined, showTimePicker: false });
this.props.onClear && this.props.onClear();
this.showClear = !!this.state.startDate;
}, 0);
};
this.onTimeChange = (date) => {
const { startDate, endDate } = this.state;
if (endDate) {
this.state.endDate = date;
}
else if (startDate) {
this.state.startDate = date;
}
};
this.shortcutSelect = (startDate, endDate, props = this.props) => {
this.state = Object.assign({}, this.state, { startDate, showTimePicker: false }, this.selectDate(endDate, true, { startDate }, props));
this.showClear = !!this.state.startDate;
};
this.setClientHeight = (height) => {
this.state.clientHight = height;
};
}
/**
* @param {?} value
* @return {?}
*/
set locale(value) {
if (value === 'enUS') {
this.props.locale = Calendar;
}
else if (value === 'zhCN') {
this.props.locale = defaultLocale;
}
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
/**
* @param {?} value
* @return {?}
*/
set defaultTimeValue(value) {
if (value) {
this.props.defaultTimeValue = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set prefixCls(value) {
if (value) {
this.props.prefixCls = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set enterDirection(value) {
this._enterDirection = value;
if (this._enterDirection === 'horizontal') {
this.contentAnimateClass = 'slideH-enter slideH-enter-active';
}
else {
this.contentAnimateClass = 'slideV-enter slideV-enter-active';
}
}
/**
* @param {?} value
* @return {?}
*/
set visible(value) {
this.props.visible = value;
if (value === true || value === 'true') {
this.showAnimation();
this.isShow = true;
}
else {
this.hideAnimation();
setTimeout(() => {
this.isShow = false;
}, 300);
}
}
/**
* @param {?} value
* @return {?}
*/
set getDateExtra(value) {
this.props.getDateExtra = value;
}
/**
* @param {?} value
* @return {?}
*/
set defaultDate(value) {
this.props.defaultDate = value;
}
/**
* @param {?} value
* @return {?}
*/
set minDate(value) {
this.props.minDate = value;
}
/**
* @param {?} value
* @return {?}
*/
set maxDate(value) {
this.props.maxDate = value;
}
/**
* @param {?} value
* @return {?}
*/
set pickTime(value) {
this.props.pickTime = value;
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
this.props.type = value;
}
/**
* @param {?} value
* @return {?}
*/
set showShortcut(value) {
this.props.showShortcut = value;
}
/**
* @param {?} value
* @return {?}
*/
set rowSize(value) {
this.props.rowSize = value;
}
/**
* @param {?} value
* @return {?}
*/
set infinite(value) { }
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this.props.defaultValue = value;
if (value) {
this.receiveProps(this.props);
}
}
/**
* @param {?} value
* @return {?}
*/
set onSelect(value) {
this.props.onSelect = value;
}
/**
* @param {?} nextProps
* @return {?}
*/
receiveProps(nextProps) {
if (nextProps.visible && nextProps.defaultValue) {
this.shortcutSelect(nextProps.defaultValue[0], nextProps.defaultValue[1], nextProps);
}
}
/**
* @return {?}
*/
showAnimation() {
if (this._enterDirection === 'horizontal') {
this.contentAnimateClass = 'slideH-enter slideH-enter-active';
}
else {
this.contentAnimateClass = 'slideV-enter slideV-enter-active';
}
this.maskAnimateClass = 'fade-enter fade-enter-active';
}
/**
* @return {?}
*/
hideAnimation() {
if (this._enterDirection === 'horizontal') {
this.contentAnimateClass = 'slideH-leave slideH-leave-active';
}
else {
this.contentAnimateClass = 'slideV-leave slideV-leave-active';
}
this.maskAnimateClass = 'fade-leave fade-leave-active';
}
/**
* @return {?}
*/
triggerCancel() {
this.props.onCancel && this.props.onCancel();
this.onClose();
this.onCancel && this.onCancel.emit();
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const defaultValue = this.props.defaultValue;
if (defaultValue) {
this.state = Object.assign({}, this.state, this.selectDate(defaultValue[1], true, { startDate: defaultValue[0] }, this.props));
}
this._localeProviderService.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe(_ => {
this.props.locale = /** @type {?} */ (Object.assign({}, this._localeProviderService.getLocaleSubObj('Calendar')));
});
}
/**
* @return {?}
*/
ngOnDestroy() {
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
}
CalendarComponent.decorators = [
{ type: Component, args: [{
selector: 'Calendar, nzm-calendar',
template: "<span *ngIf=\"isShow\">\n <div class=\"{{'mask ' + maskAnimateClass}}\"></div>\n</span>\n<span *ngIf=\"isShow\">\n <div class=\"{{'content animate ' + contentAnimateClass}}\">\n <CalendarHeader [locale]=\"props.locale\"\n [closeIcon]=\"closeIconHtml\"\n [showClear]=\"showClear\"\n (onCancel)=\"triggerCancel()\"\n (onClear)=\"triggerClear()\"\n ></CalendarHeader>\n <CalendarDatePicker [propsData]=\"props\"\n [endDate]=\"state.endDate\"\n [startDate]=\"state.startDate\"\n [onCellClick]=\"onSelectedDate\"\n [onSelectHasDisableDate]=\"triggerSelectHasDisableDate\"\n [onLayout]=\"setClientHeight\"\n ></CalendarDatePicker>\n <CalendarTimePicker *ngIf=\"state.showTimePicker\"\n [propsData]=\"props\"\n [title]=\"state.timePickerTitle\"\n [clientHeight]=\"state.clientHight\"\n [prefixCls]=\"props.timePickerPrefixCls\"\n [defaultValue]=\"props.defaultTimeValue\"\n [pickerPrefixCls]=\"props.timePickerPickerPrefixCls\"\n [value]=\"state.endDate ? state.endDate : state.startDate\"\n [onValueChange]=\"onTimeChange\"\n ></CalendarTimePicker>\n <CalendarShortcutPanel *ngIf=\"props.showShortcut && !state.showTimePicker\"\n [locale]=\"props.locale\"\n [onSelect]=\"shortcutSelect\"\n ></CalendarShortcutPanel>\n <CalendarConfirmPanel *ngIf=\"state.startDate\"\n [startDateTime]=\"state.startDate\"\n [endDateTime]=\"state.endDate\"\n [propsData]=\"props\"\n [disableBtn]=\"state.disConfirmBtn\"\n [formatStr]=\"props.pickTime ? props.locale.dateTimeFormat : props.locale.dateFormat\"\n [onConfirm]=\"triggerConfirm\"\n ></CalendarConfirmPanel>\n </div>\n</span>\n<ng-template #closeIconHtml>\n <Icon [type]=\"'cross'\"></Icon>\n</ng-template>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
CalendarComponent.ctorParameters = () => [
{ type: LocaleProviderService }
];
CalendarComponent.propDecorators = {
locale: [{ type: Input }],
defaultTimeValue: [{ type: Input }],
prefixCls: [{ type: Input }],
enterDirection: [{ type: Input }],
visible: [{ type: Input }],
getDateExtra: [{ type: Input }],
defaultDate: [{ type: Input }],
minDate: [{ type: Input }],
maxDate: [{ type: Input }],
pickTime: [{ type: Input }],
type: [{ type: Input }],
showShortcut: [{ type: Input }],
rowSize: [{ type: Input }],
infinite: [{ type: Input }],
defaultValue: [{ type: Input }],
onSelect: [{ type: Input }],
onCancel: [{ type: Output }],
onConfirm: [{ type: Output }],
onSelectHasDisableDate: [{ type: Output }],
class: [{ type: HostBinding, args: ['class',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class HeaderComponent {
constructor() {
this.closeIcon_component = false;
this._closeIcon = 'X';
this.onCancel = new EventEmitter();
this.onClear = new EventEmitter();
this.header = true;
}
/**
* @return {?}
*/
get locale() {
return this._locale;
}
/**
* @param {?} value
* @return {?}
*/
set locale(value) {
this._locale = value;
}
/**
* @return {?}
*/
get closeIcon() {
return this._closeIcon;
}
/**
* @param {?} value
* @return {?}
*/
set closeIcon(value) {
if (value instanceof TemplateRef) {
this._closeIcon = value;
this.closeIcon_component = true;
}
else {
this._closeIcon = /** @type {?} */ (value);
this.closeIcon_component = false;
}
}
/**
* @return {?}
*/
get showClear() {
return this._showClear;
}
/**
* @param {?} value
* @return {?}
*/
set showClear(value) {
this._showClear = value;
}
/**
* @return {?}
*/
triggerCancel() {
this.onCancel && this.onCancel.emit();
}
/**
* @return {?}
*/
triggerClear() {
this.onClear && this.onClear.emit();
}
}
HeaderComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarHeader, nzm-calendar-header',
template: "<span *ngIf=\"!closeIcon_component\" class=\"left\" (click)=\"triggerCancel()\" [innerHTML]=\"closeIcon\"></span>\n<span *ngIf=\"closeIcon_component\" class=\"left\" (click)=\"triggerCancel()\">\n <ng-template [ngTemplateOutlet]=\"closeIcon\"></ng-template>\n</span>\n<span class=\"title\">{{title || locale.title}}</span>\n<span *ngIf=\"showClear\" class=\"right\" (click)=\"triggerClear()\">{{clearIcon || locale.clear}}</span>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
HeaderComponent.ctorParameters = () => [];
HeaderComponent.propDecorators = {
locale: [{ type: Input }],
closeIcon: [{ type: Input }],
showClear: [{ type: Input }],
onCancel: [{ type: Output }],
onClear: [{ type: Output }],
header: [{ type: HostBinding, args: ['class.header',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Models;
(function (Models) {
let SelectType;
(function (SelectType) {
SelectType[SelectType["None"] = 0] = "None";
SelectType[SelectType["Single"] = 1] = "Single";
SelectType[SelectType["All"] = 2] = "All";
SelectType[SelectType["Only"] = 3] = "Only";
SelectType[SelectType["Start"] = 4] = "Start";
SelectType[SelectType["Middle"] = 5] = "Middle";
SelectType[SelectType["End"] = 6] = "End";
})(SelectType = Models.SelectType || (Models.SelectType = {}));
/**
* @record
*/
function Locale() { }
Models.Locale = Locale;
/** @type {?} */
Locale.prototype.title;
/** @type {?} */
Locale.prototype.today;
/** @type {?} */
Locale.prototype.month;
/** @type {?} */
Locale.prototype.year;
/** @type {?} */
Locale.prototype.am;
/** @type {?} */
Locale.prototype.pm;
/** @type {?} */
Locale.prototype.dateFormat;
/** @type {?} */
Locale.prototype.dateTimeFormat;
/** @type {?} */
Locale.prototype.noChoose;
/** @type {?} */
Locale.prototype.week;
/** @type {?} */
Locale.prototype.clear;
/** @type {?} */
Locale.prototype.selectTime;
/** @type {?} */
Locale.prototype.selectStartTime;
/** @type {?} */
Locale.prototype.selectEndTime;
/** @type {?} */
Locale.prototype.start;
/** @type {?} */
Locale.prototype.end;
/** @type {?} */
Locale.prototype.begin;
/** @type {?} */
Locale.prototype.over;
/** @type {?} */
Locale.prototype.begin_over;
/** @type {?} */
Locale.prototype.confirm;
/** @type {?} */
Locale.prototype.monthTitle;
/** @type {?} */
Locale.prototype.loadPrevMonth;
/** @type {?} */
Locale.prototype.yesterday;
/** @type {?} */
Locale.prototype.lastWeek;
/** @type {?} */
Locale.prototype.lastMonth;
/**
* @record
*/
function CellData() { }
Models.CellData = CellData;
/** @type {?} */
CellData.prototype.tick;
/** @type {?} */
CellData.prototype.dayOfMonth;
/** @type {?} */
CellData.prototype.selected;
/** @type {?} */
CellData.prototype.isFirstOfMonth;
/** @type {?} */
CellData.prototype.isLastOfMonth;
/** @type {?} */
CellData.prototype.outOfDate;
/**
* @record
*/
function ExtraData() { }
Models.ExtraData = ExtraData;
/** @type {?|undefined} */
ExtraData.prototype.info;
/** @type {?|undefined} */
ExtraData.prototype.disable;
/** @type {?|undefined} */
ExtraData.prototype.cellCls;
/** @type {?|undefined} */
ExtraData.prototype.cellRender;
/**
* @record
*/
function MonthData() { }
Models.MonthData = MonthData;
/** @type {?} */
MonthData.prototype.title;
/** @type {?} */
MonthData.prototype.firstDate;
/** @type {?} */
MonthData.prototype.lastDate;
/** @type {?} */
MonthData.prototype.weeks;
/** @type {?|undefined} */
MonthData.prototype.component;
/** @type {?|undefined} */
MonthData.prototype.height;
/** @type {?|undefined} */
MonthData.prototype.y;
/** @type {?|undefined} */
MonthData.prototype.updateLayout;
/** @type {?|undefined} */
MonthData.prototype.componentRef;
})(Models || (Models = {}));
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePicker$1 {
constructor() {
this.props = /** @type {?} */ ({
prefixCls: 'rmc-calendar',
infinite: false,
infiniteOpt: false,
defaultDate: new Date(),
initalMonths: 6,
locale: defaultLocale
});
this.state = {
months: []
};
this.visibleMonth = [];
this.getDateWithoutTime = (date) => {
if (!date)
return 0;
return +new Date(date.getFullYear(), date.getMonth(), date.getDate());
};
this.genWeekData = (firstDate) => {
/** @type {?} */
const minDateTime = this.getDateWithoutTime(this.props.minDate);
/** @type {?} */
const maxDateTime = this.getDateWithoutTime(this.props.maxDate) || Number.POSITIVE_INFINITY;
/** @type {?} */
const weeks = [];
/** @type {?} */
const nextMonth = this.getMonthDate(firstDate, 1).firstDate;
/** @type {?} */
let currentDay = firstDate;
/** @type {?} */
let currentWeek = [];
weeks.push(currentWeek);
/** @type {?} */
let startWeekday = currentDay.getDay();
if (startWeekday > 0) {
for (let i = 0; i < startWeekday; i++) {
currentWeek.push(/** @type {?} */ ({}));
}
}
while (currentDay < nextMonth) {
if (currentWeek.length === 7) {
currentWeek = [];
weeks.push(currentWeek);
}
/** @type {?} */
const dayOfMonth = currentDay.getDate();
/** @type {?} */
const tick = +currentDay;
currentWeek.push({
tick,
dayOfMonth,
selected: Models.SelectType.None,
isFirstOfMonth: dayOfMonth === 1,
isLastOfMonth: false,
outOfDate: tick < minDateTime || tick > maxDateTime
});
currentDay = new Date(currentDay.getTime() + 3600 * 24 * 1000);
}
currentWeek[currentWeek.length - 1].isLastOfMonth = true;
return weeks;
};
this.selectDateRange = (startDate, endDate, clear = false) => {
const { getDateExtra, type, onSelectHasDisableDate } = this.props;
if (type === 'one') {
endDate = undefined;
}
/** @type {?} */
const time1 = this.getDateWithoutTime(startDate);
/** @type {?} */
const time2 = this.getDateWithoutTime(endDate);
/** @type {?} */
const startDateTick = !time2 || time1 < time2 ? time1 : time2;
/** @type {?} */
const endDateTick = time2 && time1 > time2 ? time1 : time2;
/** @type {?} */
const startMonthDate = this.getMonthDate(new Date(startDateTick)).firstDate;
/** @type {?} */
const endMonthDate = endDateTick ? new Date(endDateTick) : this.getMonthDate(new Date(startDateTick)).lastDate;
/** @type {?} */
let unuseable = [];
/** @type {?} */
let needUpdate = false;
this.state.months
.filter(m => {
return m.firstDate >= startMonthDate && m.firstDate <= endMonthDate;
})
.forEach(m => {
m.weeks.forEach(w => w
.filter(d => {
if (!endDateTick) {
return d.tick && this.inDate(startDateTick, d.tick);
}
else {
return d.tick && d.tick >= startDateTick && d.tick <= endDateTick;
}
})
.forEach(d => {
/** @type {?} */
const oldValue = d.selected;
if (clear) {
d.selected = Models.SelectType.None;
}
else {
/** @type {?} */
const info = (getDateExtra && getDateExtra(new Date(d.tick))) || {};
if (d.outOfDate || info.disable) {
unuseable.push(d.tick);
}
if (this.inDate(startDateTick, d.tick)) {
if (type === 'one') {
d.selected = Models.SelectType.Single;
}
else if (!endDateTick) {
d.selected = Models.SelectType.Only;
}
else if (startDateTick !== endDateTick) {
d.selected = Models.SelectType.Start;
}
else {
d.selected = Models.SelectType.All;
}
}
else if (this.inDate(endDateTick, d.tick)) {
d.selected = Models.SelectType.End;
}
else {
d.selected = Models.SelectType.Middle;
}
}
needUpdate = needUpdate || d.selected !== oldValue;
}));
if (needUpdate && m.componentRef) {
m.componentRef.updateWeeks();
}
});
if (unuseable.length > 0) {
if (onSelectHasDisableDate) {
onSelectHasDisableDate(unuseable.map(tick => new Date(tick)));
}
else {
console.warn('Unusable date. You can handle by onSelectHasDisableDate.', unuseable);
}
}
};
this.computeVisible = (clientHeight, scrollTop) => {
/** @type {?} */
let needUpdate = false;
/** @type {?} */
const MAX_VIEW_PORT = clientHeight * 2;
/** @type {?} */
const MIN_VIEW_PORT = clientHeight;
/** @type {?} */
const filterFunc = (vm) => vm.y &&
vm.height &&
(vm.y + vm.height > scrollTop - MAX_VIEW_PORT && vm.y < scrollTop + clientHeight + MAX_VIEW_PORT);
if (this.props.infiniteOpt && this.visibleMonth.length > 12) {
this.visibleMonth = this.visibleMonth.filter(filterFunc).sort((a, b) => +a.firstDate - +b.firstDate);
}
// 当小缓冲区不满时填充
if (this.visibleMonth.length > 0) {
/** @type {?} */
const last = this.visibleMonth[this.visibleMonth.length - 1];
if (last.y !== undefined && last.height && last.y + last.height < scrollTop + clientHeight + MIN_VIEW_PORT) {
/** @type {?} */
const lastIndex = this.state.months.indexOf(last);
for (let i = 1; i <= 2; i++) {
/** @type {?} */
const index = lastIndex + i;
if (index < this.state.months.length && this.visibleMonth.indexOf(this.state.months[index]) < 0) {
this.visibleMonth.push(this.state.months[index]);
}
else {
this.canLoadNext() && this.genMonthData(undefined, 1);
}
}
needUpdate = true;
}
/** @type {?} */
const first = this.visibleMonth[0];
if (first.y !== undefined && first.height && first.y > scrollTop - MIN_VIEW_PORT) {
/** @type {?} */
const firstIndex = this.state.months.indexOf(first);
for (let i = 1; i <= 2; i++) {
/** @type {?} */
const index = firstIndex - i;
if (index >= 0 && this.visibleMonth.indexOf(this.state.months[index]) < 0) {
this.visibleMonth.unshift(this.state.months[index]);
needUpdate = true;
}
}
}
}
else if (this.state.months.length > 0) {
this.visibleMonth = this.state.months.filter(filterFunc);
needUpdate = true;
}
return needUpdate;
};
this.createOnScroll = () => {
/** @type {?} */
let clientHeight = 0;
/** @type {?} */
let scrollTop = 0;
return (data) => {
const { client, top } = data;
clientHeight = client;
scrollTop = top;
this.computeVisible(clientHeight, scrollTop);
// 以上方法目前无问题,如果后续有性能问题,改用如下方法,但以下方法会导致刷新稍微延迟现象
// if (timer) {
// return;
// }
//
// timer = setTimeout(() => {
// timer = undefined;
//
// if (this.computeVisible(clientHeight, scrollTop)) {
// console.log('update dom');
// }
// }, 50);
};
};
this.baseOnCellClick = (day) => {
if (!day.tick)
return;
this.props.onCellClick && this.props.onCellClick(new Date(day.tick));
};
}
/**
* @return {?}
*/
init() {
const { initalMonths = 6, defaultDate } = this.props;
for (let i = 0; i < initalMonths; i++) {
this.canLoadNext() && this.genMonthData(defaultDate, i);
}
this.visibleMonth = [...this.state.months];
}
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
receiveProps(oldValue, newValue) {
if (oldValue && newValue) {
if (oldValue.startDate !== newValue.startDate || oldValue.endDate !== newValue.endDate) {
if (oldValue.startDate) {
this.selectDateRange(oldValue.startDate, oldValue.endDate, true);
}
if (newValue.startDate) {
this.selectDateRange(newValue.startDate, newValue.endDate);
}
}
}
}
/**
* @param {?=} date
* @param {?=} addMonth
* @return {?}
*/
getMonthDate(date = new Date(), addMonth = 0) {
/** @type {?} */
const y = date.getFullYear();
/** @type {?} */
const m = date.getMonth();
return {
firstDate: new Date(y, m + addMonth, 1),
lastDate: new Date(y, m + 1 + addMonth, 0)
};
}
/**
* @return {?}
*/
canLoadPrev() {
const { minDate } = this.props;
return (!minDate ||
this.state.months.length <= 0 ||
+this.getMonthDate(minDate).firstDate < +this.state.months[0].firstDate);
}
/**
* @return {?}
*/
canLoadNext() {
const { maxDate } = this.props;
return (!maxDate ||
this.state.months.length <= 0 ||
+this.getMonthDate(maxDate).firstDate > +this.state.months[this.state.months.length - 1].firstDate);
}
/**
* @param {?=} date
* @param {?=} addMonth
* @return {?}
*/
genMonthData(date, addMonth = 0) {
if (!date) {
date = addMonth >= 0 ? this.state.months[this.state.months.length - 1].firstDate : this.state.months[0].firstDate;
}
if (!date) {
date = new Date();
}
const { locale } = this.props;
const { firstDate, lastDate } = this.getMonthDate(date, addMonth);
/** @type {?} */
const weeks = this.genWeekData(firstDate);
/** @type {?} */
const title = formatDate(firstDate, locale ? locale.monthTitle : 'yyyy/MM', this.props.locale);
/** @type {?} */
const data = /** @type {?} */ ({
title,
firstDate,
lastDate,
weeks
});
data.component = this.genMonthComponent(data);
if (addMonth >= 0) {
this.state.months.push(data);
}
else {
this.state.months.unshift(data);
}
const { startDate, endDate } = this.props;
if (startDate) {
this.selectDateRange(startDate, endDate);
}
return data;
}
/**
* @param {?} date
* @param {?} tick
* @return {?}
*/
inDate(date, tick) {
return date <= tick && tick < date + 24 * 3600000;
}
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerComponent extends DatePicker$1 {
constructor() {
super();
this.transform = '';
this._initDelta = 0;
this._lastY = 0;
this._delta = this._initDelta;
this.amCalendar = true;
this.datePicker = true;
this.genMonthComponent = (data) => {
if (!data)
return;
return {
monthData: data,
locale: this.props.locale,
rowSize: this.props.rowSize,
onCellClick: this.baseOnCellClick,
getDateExtra: this.props.getDateExtra,
ref: dom => {
data.componentRef = dom || data.componentRef || undefined;
data.updateLayout = () => {
this.computeHeight(data, dom);
};
data.updateLayout();
}
};
};
this.computeHeight = (data, singleMonth) => {
if (singleMonth && singleMonth.wrapperDivDOM) {
if (!data.height && !singleMonth.wrapperDivDOM.clientHeight) {
setTimeout(() => this.computeHeight(data, singleMonth), 500);
return;
}
data.height = singleMonth.wrapperDivDOM.clientHeight || data.height || 0;
data.y = singleMonth.wrapperDivDOM.offsetTop || data.y || 0;
}
};
this.setLayout = (dom) => {
if (dom) {
const { onLayout } = this.props;
onLayout && onLayout(dom.clientHeight);
/** @type {?} */
const scrollHandler = this.createOnScroll();
dom.onscroll = evt => {
scrollHandler({
client: dom.clientHeight,
full: (/** @type {?} */ (evt.currentTarget)).clientHeight,
top: (/** @type {?} */ (evt.currentTarget)).scrollTop
});
};
}
};
this.setPanel = (dom) => {
this._panel = dom;
};
}
/**
* @param {?} value
* @return {?}
*/
set onCellClick(value) {
this.props.onCellClick = value;
}
/**
* @param {?} value
* @return {?}
*/
set endDate(value) {
/** @type {?} */
const oldProps = Object.assign({}, this.props);
this.props.endDate = value;
this.receiveProps(oldProps, this.props);
}
/**
* @param {?} value
* @return {?}
*/
set startDate(value) {
/** @type {?} */
const oldProps = Object.assign({}, this.props);
this.props.startDate = value;
this.receiveProps(oldProps, this.props);
}
/**
* @param {?} value
* @return {?}
*/
set propsData(value) {
this.props = Object.assign({}, this.props, value);
}
/**
* @param {?} value
* @return {?}
*/
set onSelectHasDisableDate(value) {
this.props.onSelectHasDisableDate = value;
}
/**
* @param {?} value
* @return {?}
*/
set onLayout(value) {
this.props.onLayout = value;
}
/**
* @param {?} event
* @return {?}
*/
onTouchStart(event) {
this._lastY = event.touches[0].screenY;
this._delta = this._initDelta;
}
/**
* @param {?} event
* @return {?}
*/
onTouchMove(event) {
/** @type {?} */
const ele = event.currentTarget;
/** @type {?} */
const isReachTop = ele.scrollTop === 0;
if (isReachTop) {
this._delta = event.touches[0].screenY - this._lastY;
if (this._delta > 0) {
event.preventDefault();
if (this._delta > 80) {
this._delta = 80;
}
}
else {
this._delta = 0;
}
this.setTransform(this._panel.style, `translate3d(0,${this._delta}px,0)`);
}
}
/**
* @param {?} event
* @return {?}
*/
onTouchEnd(event) {
this.onFinish();
}
/**
* @return {?}
*/
onFinish() {
if (this._delta > 40 && this.canLoadPrev()) {
this.genMonthData(this.state.months[0].firstDate, -1);
this.visibleMonth = this.state.months.slice(0, this.props.initalMonths);
this.state.months.forEach(m => {
m.updateLayout && m.updateLayout();
});
}
this.setTransform(this._panel.style, `translate3d(0,0,0)`);
this.setTransition(this._panel.style, '.3s');
setTimeout(() => {
this._panel && this.setTransition(this._panel.style, '');
}, 300);
}
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
setTransform(nodeStyle, value) {
this.transform = value;
nodeStyle.transform = value;
nodeStyle.webkitTransform = value;
}
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
setTransition(nodeStyle, value) {
nodeStyle.transition = value;
nodeStyle.webkitTransition = value;
}
/**
* @return {?}
*/
ngOnInit() {
this.init();
this.setLayout(this.layoutDom.nativeElement);
this.setPanel(this.panelDom.nativeElement);
}
}
DatePickerComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarDatePicker, nzm-calendar-date-picker',
template: "<CalendarWeekPanel [locale]=\"props.locale\"></CalendarWeekPanel>\n<div #layout\n class=\"wrapper\"\n style=\"overflow-x:hidden;overflow-y:visible;-webkit-overflow-scrolling:touch;\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n>\n <div #panel [ngStyle]=\"{transform: transform}\">\n <div *ngIf=\"canLoadPrev()\" class=\"load-tip\">{{props.locale.loadPrevMonth}}</div>\n <div class=\"months\">\n <SingleMonth *ngFor=\"let item of visibleMonth;let i = index;\"\n style=\"display: block;\"\n [data]=\"item.component\"\n ></SingleMonth>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
DatePickerComponent.ctorParameters = () => [];
DatePickerComponent.propDecorators = {
layoutDom: [{ type: ViewChild, args: ['layout',] }],
panelDom: [{ type: ViewChild, args: ['panel',] }],
onCellClick: [{ type: Input }],
endDate: [{ type: Input }],
startDate: [{ type: Input }],
propsData: [{ type: Input }],
onSelectHasDisableDate: [{ type: Input }],
onLayout: [{ type: Input }],
amCalendar: [{ type: HostBinding, args: ['class.am-calendar',] }],
datePicker: [{ type: HostBinding, args: ['class.date-picker',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Picker$1 = {
okText: 'Ok',
dismissText: 'Cancel',
extra: 'please select',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/en_US';
var DatePicker$2 = {
okText: 'OK',
dismissText: 'Cancel',
extra: 'please select',
// DatePickerLocale,
year: '',
month: '',
day: '',
hour: '',
minute: '',
am: 'AM',
pm: 'PM'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/en_US';
var DatePickerView$1 = {
okText: 'OK',
dismissText: 'Cancel',
extra: 'please select',
// DatePickerLocale,
year: '',
month: '',
day: '',
hour: '',
minute: '',
am: 'AM',
pm: 'PM'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Menu$1 = {
okText: 'Ok',
cancelText: 'Cancel',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var SearchBar$2 = {
cancelText: 'Cancel',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var InputItem$2 = {
confirmLabel: 'Done',
backspaceLabel: 'Backspace',
cancelKeyboardLabel: 'CancelKeyboard',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Pagination$1 = {
prevText: 'Prev',
nextText: 'Next',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var PullToRefresh$1 = {
activateText: 'Refresh immediately after release',
deactivateText: 'Pull down to refresh',
finishText: 'Finish refresh',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var en_US = {
locale: 'en_US',
Picker: Picker$1,
DatePicker: DatePicker$2,
DatePickerView: DatePickerView$1,
Menu: Menu$1,
Calendar,
SearchBar: SearchBar$2,
InputItem: InputItem$2,
Pagination: Pagination$1,
PullToRefresh: PullToRefresh$1
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Picker$2 = {
okText: 'Ок',
dismissText: 'Отмена',
extra: '',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/en_US';
var DatePicker$3 = {
okText: 'Ок',
dismissText: 'Отмена',
extra: '',
// DatePickerLocale,
year: '',
month: '',
day: '',
hour: '',
minute: '',
am: 'AM',
pm: 'PM'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/en_US';
var DatePickerView$2 = {
okText: 'Ок',
dismissText: 'Отмена',
extra: '',
// DatePickerLocale,
year: '',
month: '',
day: '',
hour: '',
minute: '',
am: 'AM',
pm: 'PM'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Menu$2 = {
okText: 'Ок',
cancelText: 'Отмена',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var SearchBar$3 = {
cancelText: 'Отмена',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var InputItem$3 = {
confirmLabel: 'Ок',
backspaceLabel: 'возврат на одну позицию',
cancelKeyboardLabel: 'Отменить клавиатуру',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Pagination$2 = {
prevText: 'Назад',
nextText: 'Вперёд',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var PullToRefresh$2 = {
activateText: 'Обновить сразу после выпуска',
deactivateText: 'Потяните вниз, чтобы обновить',
finishText: 'Завершить обновление',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var ru_RU = {
locale: 'ru_RU',
Picker: Picker$2,
DatePicker: DatePicker$3,
DatePickerView: DatePickerView$2,
Menu: Menu$2,
// Calendar,
SearchBar: SearchBar$3,
InputItem: InputItem$3,
Pagination: Pagination$2,
PullToRefresh: PullToRefresh$2
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Picker$3 = {
okText: 'Ok',
dismissText: 'Avbryt',
extra: 'vänligen välj',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/en_US';
var DatePicker$4 = {
okText: 'Ok',
dismissText: 'Avbryt',
extra: 'vänligen välj',
// DatePickerLocale,
year: '',
month: '',
day: '',
hour: '',
minute: '',
am: 'AM',
pm: 'PM'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
// import DatePickerLocale from 'rmc-date-picker/lib/locale/en_US';
var DatePickerView$3 = {
okText: 'Ok',
dismissText: 'Avbryt',
extra: 'vänligen välj',
// DatePickerLocale,
year: '',
month: '',
day: '',
hour: '',
minute: '',
am: 'AM',
pm: 'PM'
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Menu$3 = {
okText: 'Ok',
cancelText: 'Avbryt',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var SearchBar$4 = {
cancelText: 'Avbryt',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var InputItem$4 = {
confirmLabel: 'Ok',
backspaceLabel: 'Backspace',
cancelKeyboardLabel: 'CancelKeyboard',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var Pagination$3 = {
prevText: 'Föreg',
nextText: 'Nästa',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var PullToRefresh$3 = {
activateText: 'Uppdatera omedelbart efter utsläpp',
deactivateText: 'Dra ner för att uppdatera',
finishText: 'Avsluta uppdateringen',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var sv_SE = {
locale: 'sv_SE',
Picker: Picker$3,
DatePicker: DatePicker$4,
DatePickerView: DatePickerView$3,
Menu: Menu$3,
// Calendar,
SearchBar: SearchBar$4,
InputItem: InputItem$4,
Pagination: Pagination$3,
PullToRefresh: PullToRefresh$3
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TimePickerComponent {
constructor() {
this.defaultProps = /** @type {?} */ ({
minDate: new Date(0, 0, 0, 0, 0),
maxDate: new Date(9999, 11, 31, 23, 59, 59),
defaultValue: new Date(2000, 1, 1, 8),
mode: 'time',
datePickerViewLocale: zh_CN
});
this.props = /** @type {?} */ ({
minDate: new Date(0, 0, 0, 0, 0),
maxDate: new Date(9999, 11, 31, 23, 59, 59),
defaultValue: new Date(2000, 1, 1, 8),
mode: 'time',
datePickerViewLocale: zh_CN
});
this.timePicker = true;
this.onDateChange = (date) => {
const { onValueChange } = this.props;
onValueChange && onValueChange(date);
};
}
/**
* @param {?} value
* @return {?}
*/
set propsData(value) {
this.props = Object.assign({}, this.props, value);
if (this.props.locale && this.props.locale.today === 'Today') {
this.props.datePickerViewLocale = en_US;
}
else {
this.props.datePickerViewLocale = zh_CN;
}
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
this.props.title = value;
}
/**
* @param {?} value
* @return {?}
*/
set value(value) {
this.props.value = value;
}
/**
* @param {?} value
* @return {?}
*/
set prefixCls(value) {
this.props.prefixCls = value;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this.props.defaultValue = value;
}
/**
* @param {?} value
* @return {?}
*/
set pickerPrefixCls(value) {
this.props.pickerPrefixCls = value;
}
/**
* @param {?} value
* @return {?}
*/
set clientHeight(value) {
this.props.clientHeight = value;
/** @type {?} */
const height = (value && (value * 3) / 8 - 52) || Number.POSITIVE_INFINITY;
this.selfHeight = (height > 164 || height < 0 ? 164 : height) + 'px';
}
/**
* @param {?} value
* @return {?}
*/
set onValueChange(value) {
this.props.onValueChange = value;
}
/**
* @param {?=} date
* @return {?}
*/
getMinTime(date) {
/** @type {?} */
const minDate = /** @type {?} */ (this.props.minDate);
if (!date ||
date.getFullYear() > minDate.getFullYear() ||
date.getMonth() > minDate.getMonth() ||
date.getDate() > minDate.getDate()) {
return this.defaultProps.minDate;
}
return minDate;
}
/**
* @param {?=} date
* @return {?}
*/
getMaxTime(date) {
/** @type {?} */
const maxDate = /** @type {?} */ (this.props.maxDate);
if (!date ||
date.getFullYear() < maxDate.getFullYear() ||
date.getMonth() < maxDate.getMonth() ||
date.getDate() < maxDate.getDate()) {
return this.defaultProps.maxDate;
}
return maxDate;
}
}
TimePickerComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarTimePicker, nzm-calendar-time-picker',
template: "<div class=\"title\">{{props.title}}</div>\n<DatePickerView [ngStyle]=\"{height: selfHeight, overflow: 'hidden'}\"\n [mode]=\"props.mode\"\n [value]=\"props.value\"\n [locale]=\"props.datePickerViewLocale\"\n [minDate]=\"getMinTime(props.value || props.defaultValue || undefined)\"\n [maxDate]=\"getMaxTime(props.value || props.defaultValue || undefined)\"\n (onValueChange)=\"onDateChange($event)\"\n></DatePickerView>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
TimePickerComponent.ctorParameters = () => [];
TimePickerComponent.propDecorators = {
propsData: [{ type: Input }],
title: [{ type: Input }],
value: [{ type: Input }],
prefixCls: [{ type: Input }],
defaultValue: [{ type: Input }],
pickerPrefixCls: [{ type: Input }],
clientHeight: [{ type: Input }],
onValueChange: [{ type: Input }],
timePicker: [{ type: HostBinding, args: ['class.time-picker',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class WeekPanelComponent {
constructor() {
this.week = ['日', '一', '二', '三', '四', '五', '六'];
this.weekPanel = true;
}
/**
* @param {?} value
* @return {?}
*/
set locale(value) {
this._locale = value;
}
/**
* @return {?}
*/
ngOnInit() {
this.week = this._locale.week;
}
}
WeekPanelComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarWeekPanel, nzm-calendar-week-panel',
template: "<div class=\"cell cell-grey\">{{week[0]}}</div>\n<div class=\"cell\">{{week[1]}}</div>\n<div class=\"cell\">{{week[2]}}</div>\n<div class=\"cell\">{{week[3]}}</div>\n<div class=\"cell\">{{week[4]}}</div>\n<div class=\"cell\">{{week[5]}}</div>\n<div class=\"cell cell-grey\">{{week[6]}}</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
WeekPanelComponent.ctorParameters = () => [];
WeekPanelComponent.propDecorators = {
locale: [{ type: Input }],
weekPanel: [{ type: HostBinding, args: ['class.week-panel',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ConfirmPanelComponent {
constructor() {
this.props = /** @type {?} */ ({
formatStr: 'yyyy-MM-dd hh:mm'
});
this.confirmPane = true;
this.triggerConfirm = () => {
const { onConfirm, disableBtn } = this.props;
!disableBtn && onConfirm();
};
}
/**
* @param {?} value
* @return {?}
*/
set propsData(value) {
this.props = Object.assign({}, this.props, value);
}
/**
* @param {?} value
* @return {?}
*/
set disableBtn(value) {
this.props.disableBtn = value;
}
/**
* @param {?} value
* @return {?}
*/
set formatStr(value) {
this.props.formatStr = value;
}
/**
* @param {?} value
* @return {?}
*/
set startDateTime(value) {
this.props.startDateTime = value;
this.formatTime();
}
/**
* @param {?} value
* @return {?}
*/
set endDateTime(value) {
this.props.endDateTime = value;
this.formatTime();
}
/**
* @param {?} value
* @return {?}
*/
set onConfirm(value) {
this.props.onConfirm = value;
}
/**
* @return {?}
*/
formatTime() {
const { type, locale, disableBtn } = this.props;
let { startDateTime, endDateTime } = this.props;
if (startDateTime && endDateTime && +startDateTime > +endDateTime) {
/** @type {?} */
const tmp = startDateTime;
startDateTime = endDateTime;
endDateTime = tmp;
}
this.startTimeStr = startDateTime ? this.selfFormatDate(startDateTime) : locale.noChoose;
this.endTimeStr = endDateTime ? this.selfFormatDate(endDateTime) : locale.noChoose;
/** @type {?} */
let btnCls = disableBtn ? 'button button-disable' : 'button';
if (type === 'one') {
btnCls += ' button-full';
}
this.btnCls = btnCls;
}
/**
* @param {?} date
* @return {?}
*/
selfFormatDate(date) {
const { formatStr = '', locale } = this.props;
return formatDate(date, formatStr, locale);
}
}
ConfirmPanelComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarConfirmPanel, nzm-calendar-confirm-panel',
template: "<div *ngIf=\"props.type === 'range'\" class=\"info\">\n <p>{{props.locale.start}}: <span class=\"{{!props.startDateTime ? 'grey' : ''}}\">{{startTimeStr}}</span></p>\n <p>{{props.locale.end}}: <span class=\"{{!props.endDateTime ? 'grey' : ''}}\">{{endTimeStr}}</span></p>\n</div>\n<div [ngClass]=\"btnCls\" (click)=\"triggerConfirm()\">\n {{props.locale.confirm}}\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ConfirmPanelComponent.ctorParameters = () => [];
ConfirmPanelComponent.propDecorators = {
propsData: [{ type: Input }],
disableBtn: [{ type: Input }],
formatStr: [{ type: Input }],
startDateTime: [{ type: Input }],
endDateTime: [{ type: Input }],
onConfirm: [{ type: Input }],
confirmPane: [{ type: HostBinding, args: ['class.confirm-panel',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SingleMonthComponent {
/**
* @param {?} _elementRef
*/
constructor(_elementRef) {
this._elementRef = _elementRef;
this.props = /** @type {?} */ ({
rowSize: 'normal'
});
this.state = {
weekComponents: []
};
this.singleMonth = true;
this.genWeek = (weeksData, index) => {
const { getDateExtra, monthData, onCellClick, locale, rowSize } = this.props;
/** @type {?} */
let rowCls = 'row';
/** @type {?} */
let weeksDataList = [];
if (rowSize === 'xl') {
rowCls += ' row-xl';
}
weeksData.forEach((day, dayOfWeek) => {
/** @type {?} */
const extra = (getDateExtra && getDateExtra(new Date(day.tick))) || {};
/** @type {?} */
let info = extra.info;
/** @type {?} */
const disable = extra.disable || day.outOfDate;
/** @type {?} */
let cls = 'date';
/** @type {?} */
let lCls = 'left';
/** @type {?} */
let rCls = 'right';
/** @type {?} */
let infoCls = 'info';
if (dayOfWeek === 0 || dayOfWeek === 6) {
cls += ' grey';
}
if (disable) {
cls += ' disable';
}
else if (info) {
cls += ' important';
}
if (day.selected) {
cls += ' date-selected';
/** @type {?} */
let styleType = day.selected;
switch (styleType) {
case Models.SelectType.Only:
info = locale.begin;
infoCls += ' date-selected';
break;
case Models.SelectType.All:
info = locale.begin_over;
infoCls += ' date-selected';
break;
case Models.SelectType.Start:
info = locale.begin;
infoCls += ' date-selected';
if (dayOfWeek === 6 || day.isLastOfMonth) {
styleType = Models.SelectType.All;
}
break;
case Models.SelectType.Middle:
if (dayOfWeek === 0 || day.isFirstOfMonth) {
if (day.isLastOfMonth || dayOfWeek === 6) {
styleType = Models.SelectType.All;
}
else {
styleType = Models.SelectType.Start;
}
}
else if (dayOfWeek === 6 || day.isLastOfMonth) {
styleType = Models.SelectType.End;
}
break;
case Models.SelectType.End:
info = locale.over;
infoCls += ' date-selected';
if (dayOfWeek === 0 || day.isFirstOfMonth) {
styleType = Models.SelectType.All;
}
break;
}
switch (styleType) {
case Models.SelectType.Single:
case Models.SelectType.Only:
case Models.SelectType.All:
cls += ' selected-single';
break;
case Models.SelectType.Start:
cls += ' selected-start';
rCls += ' date-selected';
break;
case Models.SelectType.Middle:
cls += ' selected-middle';
lCls += ' date-selected';
rCls += ' date-selected';
break;
case Models.SelectType.End:
cls += ' selected-end';
lCls += ' date-selected';
break;
}
}
weeksDataList[dayOfWeek] = {
lCls,
cls,
day,
rCls,
infoCls,
info,
extra,
disable,
onCellClick: onCellClick,
monthData
};
});
this.state.weekComponents[index] = {
index: index,
rowCls,
weeksDataList
};
};
this.updateWeeks = (monthData) => {
(monthData || this.props.monthData).weeks.forEach((week, index) => {
this.genWeek(week, index);
});
};
this.setWarpper = (dom) => {
this.wrapperDivDOM = dom;
};
}
/**
* @param {?} value
* @return {?}
*/
set data(value) {
this.props = Object.assign({}, this.props, value);
}
/**
* @param {?} item
* @return {?}
*/
onClickCell(item) {
!item.disable && item.onCellClick && item.onCellClick(item.day, item.monthData);
}
/**
* @return {?}
*/
ngOnInit() {
this.setWarpper(this._elementRef.nativeElement);
this.props.monthData.weeks.forEach((week, index) => {
this.genWeek(week, index);
});
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.ref = this.props.ref;
this.ref(this);
}
}
SingleMonthComponent.decorators = [
{ type: Component, args: [{
selector: 'SingleMonth, nzm-single-month',
template: "<div class=\"month-title\">\n {{props.monthData.title}}\n</div>\n<div class=\"date\">\n <div *ngFor=\"let row of state.weekComponents;let i = index;\" [ngClass]=\"row.rowCls\">\n <div *ngFor=\"let cell of row.weeksDataList;let j = index;\"\n class=\"{{'cell ' + (row.extra && row.extra.cellCls || '')}}\"\n (click)=\"onClickCell(cell)\"\n >\n <div *ngIf=\"row.extra && row.extra.cellRender\">test</div>\n <div *ngIf=\"!row.extra || (row.extra && row.extra.cellRender)\" class=\"date-wrapper\">\n <span [ngClass]=\"cell.lCls\"></span>\n <div [ngClass]=\"cell.cls\">\n {{cell.day && cell.day.dayOfMonth || ''}}\n </div>\n <span [ngClass]=\"cell.rCls\"></span>\n </div>\n <div *ngIf=\"!row.extra || (row.extra && row.extra.cellRender)\" [ngClass]=\"cell.infoCls\">\n {{cell.info}}\n </div>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SingleMonthComponent.ctorParameters = () => [
{ type: ElementRef }
];
SingleMonthComponent.propDecorators = {
data: [{ type: Input }],
singleMonth: [{ type: HostBinding, args: ['class.single-month',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ShortcutPanelComponent {
constructor() {
this.props = /** @type {?} */ ({});
this.shortcutPanel = true;
this.onClick = (type) => {
const { onSelect } = this.props;
/** @type {?} */
const today = new Date();
switch (type) {
case 'today':
onSelect(new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0), new Date(today.getFullYear(), today.getMonth(), today.getDate(), 12));
break;
case 'yesterday':
onSelect(new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1, 0), new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1, 12));
break;
case 'lastweek':
onSelect(new Date(today.getFullYear(), today.getMonth(), today.getDate() - 6, 0), new Date(today.getFullYear(), today.getMonth(), today.getDate(), 12));
break;
case 'lastmonth':
onSelect(new Date(today.getFullYear(), today.getMonth(), today.getDate() - 29, 0), new Date(today.getFullYear(), today.getMonth(), today.getDate(), 12));
break;
}
};
}
/**
* @param {?} value
* @return {?}
*/
set locale(value) {
this.props.locale = value;
}
/**
* @param {?} value
* @return {?}
*/
set onSelect(value) {
this.props.onSelect = value;
}
}
ShortcutPanelComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarShortcutPanel, nzm-calendar-shortcut-panel',
template: "<div class=\"item\" (click)=\"onClick('today')\">{{props.locale.today}}</div>\n<div class=\"item\" (click)=\"onClick('yesterday')\">{{props.locale.yesterday}}</div>\n<div class=\"item\" (click)=\"onClick('lastweek')\">{{props.locale.lastWeek}}</div>\n<div class=\"item\" (click)=\"onClick('lastmonth')\">{{props.locale.lastMonth}}</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ShortcutPanelComponent.ctorParameters = () => [];
ShortcutPanelComponent.propDecorators = {
locale: [{ type: Input }],
onSelect: [{ type: Input }],
shortcutPanel: [{ type: HostBinding, args: ['class.shortcut-panel',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerOptions {
constructor() {
this.mode = 'date';
this.value = new Date();
this.minDate = new Date(2000, 6, 1, 0, 0, 0);
this.maxDate = new Date(2030, 1, 1, 23, 59, 59);
this.use12Hours = false;
this.minuteStep = 1;
this.data = [];
this.mask = true;
this.title = '';
this.okText = '确定';
this.dismissText = '取消';
this.disabled = false;
this.appendToBody = false;
this.onOk = new EventEmitter();
this.onDismiss = new EventEmitter();
this.onValueChange = new EventEmitter();
this.onChange = new EventEmitter();
}
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @return {?}
*/
function getVelocity() {
return ((minInterval = 30, maxInterval = 100) => {
/** @type {?} */
let _time = 0;
/** @type {?} */
let _y = 0;
/** @type {?} */
let _velocity = 0;
/** @type {?} */
const recorder = {
record: (y) => {
/** @type {?} */
const now = +new Date();
_velocity = (y - _y) / (now - _time);
if (now - _time >= minInterval) {
_velocity = now - _time <= maxInterval ? _velocity : 0;
_y = y;
_time = now;
}
},
getVelocity: (y) => {
if (y !== _y) {
recorder.record(y);
}
return _velocity;
},
};
return recorder;
})();
}
var velocity = /*#__PURE__*/Object.freeze({
getVelocity: getVelocity
});
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerComponent$1 {
/**
* @param {?} elementRef
* @param {?} options
* @param {?} localeProviderService
*/
constructor(elementRef, options, localeProviderService) {
this.elementRef = elementRef;
this.options = options;
this.localeProviderService = localeProviderService;
this.transitionName = 'am-slide-up-enter am-slide-up-enter-active';
this.maskTransitionName = 'am-fade-enter am-fade-enter-active';
this.modeSwitch = [1, 1, 1, 1, 1, 1];
this.localMinDate = [];
this.localMaxDate = [];
this.currentTime = [];
this.indexArray = [];
this.min_date = [];
this.max_date = [];
this.current_time = [
new Date().getFullYear(),
new Date().getMonth() + 1,
new Date().getDate(),
new Date().getHours(),
new Date().getMinutes()
];
this.clos = 0;
this.resultArr = [];
this.data = [];
this.dataWithStr = [];
this.startY = 0;
this.differY = 0;
this.currentY = 0;
this.len = 0;
this.dom = null;
this.index = 0;
this.maxY = 0;
this.lineHeight = 34;
this.selectedTarget = [];
this.isMouseDown = false;
this.localeNew = {};
this.unsubscribe$ = new Subject();
this.Velocity = getVelocity();
}
/**
* @param {?} event
* @return {?}
*/
panstart(event) {
if (!event.target.classList.contains('am-picker-col-mask')) {
return;
}
this.isMouseDown = true;
event.preventDefault();
this.dom = event.target.parentElement.children[2];
this.len = this.dom.children.length;
this.maxY = -(this.len - 1);
if (this.dom.style.transform === 'translateY(0px)') {
this.currentY = 0;
this.maxY = -(this.len - 1);
}
else if (this.selectedTarget.length > 0) {
this.selectedTarget.forEach(item => {
if (item.targetId === event.target.id) {
this.currentY = item.currentY;
}
});
}
/** @type {?} */
const ev = this.getEventTarget(event);
this.startY = ev.clientY;
}
/**
* @param {?} event
* @return {?}
*/
panmove(event) {
if (!event.target.classList.contains('am-picker-col-mask') || !this.isMouseDown) {
return;
}
event.preventDefault();
/** @type {?} */
const ev = this.getEventTarget(event);
this.differY = ev.clientY - this.startY;
this.Velocity.record(this.differY);
this.dom.style.transition = 'transform 0s';
this.dom.style.transform = `translateY(${this.currentY * this.lineHeight + this.differY}px)`;
}
/**
* @param {?} event
* @return {?}
*/
panend(event) {
if (!event.target.classList.contains('am-picker-col-mask') || !this.isMouseDown) {
return;
}
this.isMouseDown = false;
event.preventDefault();
/** @type {?} */
const ev = this.getEventTarget(event);
this.differY = ev.clientY - this.startY;
/** @type {?} */
let time = 0.3;
/** @type {?} */
const velocityTemp = this.Velocity.getVelocity(this.differY) * 4;
if (velocityTemp) {
this.differY = velocityTemp * 40 + this.differY;
time = Math.abs(velocityTemp) * 0.1;
}
this.dom.style.transition = 'transform ' + (time < 0.3 ? 0.3 : time) + 's';
if (this.differY <= -this.lineHeight / 2) {
this.currentY += Math.floor(this.differY / this.lineHeight);
if (this.currentY <= this.maxY) {
this.currentY = this.maxY;
}
}
else if (this.differY >= this.lineHeight / 2) {
this.currentY += Math.floor(this.differY / this.lineHeight);
if (this.currentY >= 0) {
this.currentY = 0;
}
}
if (this.selectedTarget.length > 0) {
/** @type {?} */
let hasKey = false;
this.selectedTarget.forEach(item => {
if (item.targetId === event.target.id) {
hasKey = true;
item.targetId = event.target.id;
item.currentY = this.currentY;
}
});
if (!hasKey) {
this.selectedTarget.push({ targetId: event.target.id, currentY: this.currentY });
}
}
else {
this.selectedTarget.push({ targetId: event.target.id, currentY: this.currentY });
}
this.dom.style.transform = `translateY(${this.currentY * this.lineHeight}px)`;
this.index = Math.floor(Math.abs(this.currentY / 1)); // 记录当前位移在数组中的索引,必须取整,否则会出现浮点数
this.current_time[this.indexArray[parseInt(event.target.id, 0)]] = this.resultArr[this.indexArray[parseInt(event.target.id, 0)]] = this.data[parseInt(event.target.id, 0)][this.index];
if (this.judgeTime(this.current_time, this.max_date)) {
this.currentTime = this.current_time = this.max_date.slice(0, this.indexArray.length);
this.resultArr = this.current_time;
this.options.onValueChange.emit(this.handleReslut());
this.init();
}
else if (this.judgeTime(this.min_date, this.current_time)) {
this.currentTime = this.current_time = this.min_date.slice(0, this.indexArray.length);
this.resultArr = this.currentTime;
this.options.onValueChange.emit(this.handleReslut());
this.init();
}
else {
this.setCurrentSelected(0, this.differY < 0, this.index);
this.options.onValueChange.emit(this.handleReslut());
}
}
/**
* @return {?}
*/
init() {
this.initResult();
this.checkTime();
this.initReady();
this.getInitValueIndex();
}
/**
* @return {?}
*/
reloadPicker() {
if (!this.picker || this.picker === undefined) {
return;
}
this.currentPicker = this.picker.element.nativeElement;
if (this.currentPicker && this.currentPicker.children.length > 0) {
/** @type {?} */
const self = this;
setTimeout(() => {
self.selectedTarget.forEach((item, i) => {
self.currentPicker.children[i].children[2].style.transition = 'transform .3s';
/** @type {?} */
const index = parseInt(item.currentY, 0);
self.currentPicker.children[i].children[2].style.transform = `translateY(${index * self.lineHeight}px)`;
});
}, 0);
}
}
/**
* @return {?}
*/
localeProvider() {
/** @type {?} */
const self = this;
if (self.options.locale || self.options.locale !== undefined) {
self.localeProviderService.setLocale(self.options.locale);
}
self.localeProviderService.localeChange.pipe(takeUntil(self.unsubscribe$)).subscribe(_ => {
self.options.locale = self.localeProviderService.getLocale();
self.localeNew = self.localeProviderService.getLocaleSubObj('DatePicker');
self.options.okText = self.localeNew.okText;
self.options.dismissText = self.localeNew.dismissText;
self.init();
});
}
/**
* @param {?} date
* @return {?}
*/
transformDateFormat(date) {
if (!date || date === '') {
return '';
}
else {
return 'yyyy-mm-dd-HH-MM'
.replace('yyyy', date.getFullYear() + '')
.replace('mm', date.getMonth() + 1 + '')
.replace('dd', date.getDate() + '')
.replace('HH', date.getHours() + '')
.replace('MM', date.getMinutes() + '');
}
}
/**
* @param {?} val
* @return {?}
*/
preZero(val) {
return val < 10 ? '0' + val : val + '';
}
/**
* @return {?}
*/
getInitValueIndex() {
this.selectedTarget = [];
this.indexArray.map((index, i) => {
this.data.forEach((item, j) => {
item.forEach((item1, k) => {
if (this.currentTime[index] === item1 && i === j) {
this.selectedTarget.push({ targetId: `${i}`, currentY: -k });
}
});
});
});
this.reloadPicker();
}
/**
* @param {?} mode
* @return {?}
*/
checkMode(mode) {
this.modeSwitch = [1, 1, 1, 1, 1, 1];
switch (mode) {
case 'date':
this.modeSwitch = [1, 1, 1, 0, 0, 0];
break;
case 'time':
if (this.options.use12Hours) {
this.modeSwitch = [0, 0, 0, 1, 1, 1];
}
else {
this.modeSwitch = [0, 0, 0, 1, 1, 0];
}
break;
case 'datetime':
if (this.options.use12Hours) {
this.modeSwitch = [1, 1, 1, 1, 1, 1];
}
else {
this.modeSwitch = [1, 1, 1, 1, 1, 0];
}
break;
case 'year':
this.modeSwitch = [1, 0, 0, 0, 0];
break;
case 'month':
this.modeSwitch = [1, 1, 0, 0, 0];
break;
default:
break;
}
/** @type {?} */
const tempIndexArray = [];
for (let i = 0; i < this.modeSwitch.length; i++) {
if (this.modeSwitch[i] > 0) {
tempIndexArray.push(i);
}
}
this.clos = tempIndexArray[tempIndexArray.length - 1] - tempIndexArray[0] + 1;
this.indexArray = tempIndexArray;
}
/**
* @return {?}
*/
initResult() {
this.resultArr = [];
if (this.currentTime.length > 0) {
this.current_time = this.currentTime;
}
for (let i = 0; i < this.clos; i++) {
/** @type {?} */
const res = this.currentTime[i];
if (this.options.mode === 'time') {
this.resultArr = this.currentTime;
}
else {
this.resultArr.push(res);
}
}
}
/**
* @return {?}
*/
checkTime() {
/** @type {?} */
const min_Date = this.transformDateFormat(this.options.minDate).split('-');
if (min_Date.length > 0) {
this.min_date = min_Date.map(item => {
return parseInt(item, 0);
});
}
/** @type {?} */
const max_Date = this.transformDateFormat(this.options.maxDate).split('-');
if (max_Date.length > 0) {
this.max_date = max_Date.map(item => {
return parseInt(item, 0);
});
}
/** @type {?} */
const min_date = this.min_date;
/** @type {?} */
const max_date = this.max_date;
/** @type {?} */
const current_time = this.current_time;
this.localMinDate = [];
if (this.localMinDate.length === 0) {
for (let index = 0; index < this.indexArray.length; index++) {
this.localMinDate.push(min_date[this.indexArray[index]]);
}
}
this.localMaxDate = [];
if (this.localMaxDate.length === 0) {
for (let index = 0; index < this.indexArray.length; index++) {
this.localMaxDate.push(max_date[this.indexArray[index]]);
}
}
if (this.indexArray.length === this.localMinDate.length &&
this.localMinDate.length === this.localMaxDate.length &&
this.localMaxDate.length === this.currentTime.length) {
/** @type {?} */
let _indexArrayIndex = 0;
for (let i = 0; i < this.modeSwitch.length; i++) {
if (this.modeSwitch[i] === 0) {
switch (i) {
case 0:
min_date[i] = new Date().getFullYear();
max_date[i] = new Date().getFullYear();
break;
case 1:
min_date[i] = new Date().getMonth() + 1;
max_date[i] = new Date().getMonth() + 1;
break;
case 2:
min_date[i] = new Date().getDate();
max_date[i] = new Date().getDate();
break;
case 3:
min_date[i] = new Date().getHours();
max_date[i] = new Date().getHours();
break;
case 4:
min_date[i] = new Date().getMinutes();
max_date[i] = new Date().getMinutes();
break;
case 5:
min_date[i] = 0;
max_date[i] = 1;
break;
}
}
else {
switch (i) {
case 0:
this.localMinDate[_indexArrayIndex] = min_date[i] =
this.localMinDate[_indexArrayIndex] >= 1900
? this.localMinDate[_indexArrayIndex]
: new Date().getFullYear();
this.localMaxDate[_indexArrayIndex] = max_date[i] =
this.localMaxDate[_indexArrayIndex] >= 1900
? this.localMaxDate[_indexArrayIndex]
: new Date().getFullYear() + 1;
current_time[i] = this.currentTime[_indexArrayIndex];
break;
case 1:
this.localMinDate[_indexArrayIndex] = min_date[i] =
this.localMinDate[_indexArrayIndex] > 0 && this.localMinDate[_indexArrayIndex] <= 12
? this.localMinDate[_indexArrayIndex]
: 1;
this.localMaxDate[_indexArrayIndex] = max_date[i] =
this.localMaxDate[_indexArrayIndex] > 0 && this.localMaxDate[_indexArrayIndex] <= 12
? this.localMaxDate[_indexArrayIndex]
: 12;
current_time[i] = this.currentTime[_indexArrayIndex];
break;
case 2:
this.localMinDate[_indexArrayIndex] = min_date[i] =
this.localMinDate[_indexArrayIndex] > 0 &&
this.localMinDate[_indexArrayIndex] <= new Date(min_date[0], min_date[1], 0).getDate()
? this.localMinDate[_indexArrayIndex]
: 1;
this.localMaxDate[_indexArrayIndex] = max_date[i] =
this.localMaxDate[_indexArrayIndex] > 0 &&
this.localMaxDate[_indexArrayIndex] <= new Date(max_date[0], max_date[1], 0).getDate()
? this.localMaxDate[_indexArrayIndex]
: new Date(max_date[0], max_date[1], 0).getDate();
current_time[i] = this.currentTime[_indexArrayIndex];
break;
case 3:
this.localMinDate[_indexArrayIndex] = min_date[i] =
this.localMinDate[_indexArrayIndex] >= 0 && this.localMinDate[_indexArrayIndex] <= 23
? this.localMinDate[_indexArrayIndex]
: 0;
if (this.options.use12Hours) {
this.localMaxDate[_indexArrayIndex] = max_date[i] =
this.localMaxDate[_indexArrayIndex] >= 0 && this.localMaxDate[_indexArrayIndex] <= 11
? this.localMaxDate[_indexArrayIndex]
: 11;
}
else {
this.localMaxDate[_indexArrayIndex] = max_date[i] =
this.localMaxDate[_indexArrayIndex] >= 0 && this.localMaxDate[_indexArrayIndex] <= 23
? this.localMaxDate[_indexArrayIndex]
: 23;
}
current_time[i] = this.currentTime[_indexArrayIndex];
break;
case 4:
this.localMinDate[_indexArrayIndex] = min_date[i] =
this.localMinDate[_indexArrayIndex] >= 0 && this.localMinDate[_indexArrayIndex] <= 59
? this.localMinDate[_indexArrayIndex]
: 0;
this.localMaxDate[_indexArrayIndex] = max_date[i] =
this.localMaxDate[_indexArrayIndex] >= 0 && this.localMaxDate[_indexArrayIndex] <= 59
? this.localMaxDate[_indexArrayIndex]
: 59;
current_time[i] = this.currentTime[_indexArrayIndex];
break;
}
_indexArrayIndex++;
}
}
/** @type {?} */
const minT = new Date(min_date[0], min_date[1], min_date[2], min_date[3], min_date[4]).getTime();
/** @type {?} */
const maxT = new Date(max_date[0], max_date[1], max_date[2], max_date[3], max_date[4]).getTime();
/** @type {?} */
const curT = new Date(current_time[0], current_time[1], current_time[2], current_time[3], current_time[4]).getTime();
return minT <= curT && curT <= maxT;
}
else {
return false;
}
}
/**
* @param {?} arr1
* @param {?} arr2
* @return {?}
*/
judgeTime(arr1, arr2) {
/** @type {?} */
let date1;
/** @type {?} */
let date2;
date1 = arr1.slice(0, 3).join('-') + ' ' + arr1.slice(3, 5).join(':');
date2 = arr2.slice(0, 3).join('-') + ' ' + arr2.slice(3, 5).join(':');
return new Date(date1).getTime() >= new Date(date2).getTime();
}
/**
* @param {?} arr1
* @param {?} arr2
* @param {?} length
* @return {?}
*/
judgeEqualArray(arr1, arr2, length) {
/** @type {?} */
let status = true;
for (let i = 0; i < length; i++) {
if (arr1[i] != arr2[i]) {
status = false;
}
}
return status;
}
/**
* @return {?}
*/
initReady() {
/** @type {?} */
let realIdx = 0;
for (let i = 0; i < this.clos; i++) {
realIdx = this.indexArray[i];
/** @type {?} */
let min = 0;
/** @type {?} */
let max = 0;
/** @type {?} */
const tempArray = [];
switch (realIdx) {
case 0:
this.initData(tempArray, this.localMinDate[i], this.localMaxDate[i], this.localeNew.year, i);
break;
case 1:
min = this.judgeEqualArray(this.min_date, this.current_time, 1) ? this.localMinDate[i] : 1;
max = this.judgeEqualArray(this.max_date, this.current_time, 1) ? this.localMaxDate[i] : 12;
this.initData(tempArray, min, max, this.localeNew.month, i);
break;
case 2:
min = this.judgeEqualArray(this.min_date, this.current_time, 2) ? this.localMinDate[i] : 1;
max = this.judgeEqualArray(this.max_date, this.current_time, 2)
? this.localMaxDate[i]
: new Date(this.current_time[0], this.current_time[1], 0).getDate();
this.initData(tempArray, min, max, this.localeNew.day, i);
break;
case 3:
min = this.judgeEqualArray(this.min_date, this.current_time, 3) ? this.localMinDate[i] : 0;
max = this.judgeEqualArray(this.max_date, this.current_time, 3) ? this.localMaxDate[i] : 23;
this.initData(tempArray, min, max, this.localeNew.hour, i);
break;
case 4:
min = this.judgeEqualArray(this.min_date, this.current_time, 4) ? this.localMinDate[i] : 0;
max = this.judgeEqualArray(this.max_date, this.current_time, 4) ? this.localMaxDate[i] : 59;
this.initData(tempArray, min, max, this.localeNew.minute, i);
break;
case 5:
min = 0;
max = 1;
this.initData(tempArray, min, max, 'use12Hours', i);
break;
}
}
}
/**
* @param {?} tempArr
* @param {?} min
* @param {?} max
* @param {?} str
* @param {?} idx
* @return {?}
*/
initData(tempArr, min, max, str, idx) {
/** @type {?} */
const dataWithStr = [];
for (min; min < max + 1; min++) {
tempArr.push(min);
dataWithStr.push(min + str);
}
if (this.data.length > this.indexArray.length) {
this.data = [];
this.dataWithStr = [];
}
if (this.data.length > idx && this.data[idx].toString() !== tempArr.toString()) {
this.data[idx] = tempArr;
}
else if (this.data.length > idx && this.data[idx].toString() === tempArr.toString()) {
this.data[idx] = tempArr;
}
else {
this.data.push(tempArr);
}
if (this.options.locale === undefined || this.options.locale.locale === 'zh_CN') {
if (this.dataWithStr.length > idx && this.dataWithStr[idx].toString() !== dataWithStr.toString()) {
this.dataWithStr[idx] = dataWithStr;
}
else if (this.dataWithStr.length > idx && this.dataWithStr[idx].toString() === dataWithStr.toString()) {
this.dataWithStr[idx] = dataWithStr;
}
else {
this.dataWithStr.push(dataWithStr);
}
}
else {
this.dataWithStr = this.data;
}
}
/**
* @return {?}
*/
ok() {
this.options.onOk.emit(this.handleReslut());
this.setTransitionName();
}
/**
* @return {?}
*/
handleReslut() {
/** @type {?} */
let result = '';
if (this.options.mode === 'datetime' || this.options.mode === 'time') {
/** @type {?} */
const temp = this.resultArr;
result = temp.slice(0, 3).join('-') + ' ' + temp.slice(3, 5).join(':');
}
else {
result = this.resultArr.map(v => v).join('-');
}
this.resultDate = new Date(result.replace(/-/g, '/'));
if (this.options.minDate.getTime() > this.resultDate.getTime()) {
if (this.resultArr.length > 0) {
for (let index = 0; index < this.resultArr.length; index++) {
this.resultArr = this.min_date;
this.currentTime = this.resultArr;
this.current_time = this.currentTime;
}
}
this.resultDate = this.options.minDate;
}
return this.resultDate;
}
/**
* @return {?}
*/
cancel() {
this.options.onDismiss.emit();
this.setTransitionName();
}
/**
* @return {?}
*/
setTransitionName() {
this.transitionName = 'am-slide-up-leave am-slide-up-leave-active';
this.maskTransitionName = 'am-fade-leave am-fade-leave-active';
setTimeout(() => {
this.options.hidePicker();
}, 200);
}
/**
* @param {?} checkIdx
* @param {?} sta
* @param {?} indexT
* @return {?}
*/
setCurrentSelected(checkIdx, sta, indexT) {
if (checkIdx >= this.clos - 1) {
return;
}
/** @type {?} */
let status = null;
if (sta) {
status = this.judgeEqualArray(this.min_date, this.resultArr, checkIdx + 1);
}
else {
status = this.judgeEqualArray(this.max_date, this.resultArr, checkIdx + 1);
}
if (!status) {
/** @type {?} */
let min = 0;
/** @type {?} */
let max = 0;
/** @type {?} */
let str = '';
/** @type {?} */
const realIdx = this.indexArray[checkIdx];
switch (realIdx) {
case 0:
min = 1;
max = 12;
str = '月';
break;
case 1:
min = 1;
max = new Date(this.current_time[0], this.current_time[1], 0).getDate();
str = '日';
break;
case 2:
min = 0;
max = 23;
str = '时';
break;
case 3:
min = 0;
max = 59;
str = '分';
break;
}
this.initRangeArr(min, max, indexT, checkIdx + 1, str);
}
this.setCurrentSelected(checkIdx + 1, sta, indexT);
}
/**
* @param {?} min
* @param {?} max
* @param {?} indexT
* @param {?} checkIdx
* @param {?} str
* @return {?}
*/
initRangeArr(min, max, indexT, checkIdx, str) {
/** @type {?} */
const realIdx = this.indexArray[checkIdx];
/** @type {?} */
const arr = [];
/** @type {?} */
let targetLong = 0;
for (let index = min; index < max + 1; index++) {
arr.push(index);
}
if (arr.indexOf(this.resultArr[checkIdx]) == -1) {
if (-this.selectedTarget[checkIdx].currentY > max - min) {
indexT = max - min;
this.selectedTarget[checkIdx].currentY = -indexT;
}
targetLong = -arr.length * this.lineHeight;
}
else {
targetLong = -arr.indexOf(this.resultArr[checkIdx]) * this.lineHeight;
this.selectedTarget[checkIdx].currentY = -arr.indexOf(this.resultArr[checkIdx]);
}
if (this.data[checkIdx].toString() !== arr.toString()) {
this.current_time[realIdx] = -targetLong / this.lineHeight + 1;
this.resultArr[checkIdx] = -targetLong / this.lineHeight + 1;
this.data[checkIdx] = arr;
this.dataWithStr[checkIdx] =
this.options.locale.locale === 'zh_CN'
? arr.map(item => {
return item + str;
})
: arr;
setTimeout(() => {
this.selectedTarget.forEach((item, i) => {
if (i >= checkIdx) {
this.currentPicker.children[i].children[2].style.transition = '';
/** @type {?} */
const index = parseInt(item.currentY, 0);
this.currentPicker.children[i].children[2].style.transform = `translateY(${index * this.lineHeight}px)`;
}
});
}, 0);
}
}
/**
* @param {?} event
* @return {?}
*/
getEventTarget(event) {
if (event.type === 'mousedown' ||
event.type === 'mousemove' ||
event.type === 'mouseup' ||
event.type === 'mouseleave') {
return event;
}
else {
if (event && event.changedTouches && event.changedTouches[0]) {
return event.changedTouches[0];
}
return null;
}
}
/**
* @return {?}
*/
ngOnInit() {
this.localeProvider();
this.checkMode(this.options.mode);
/** @type {?} */
const value = this.transformDateFormat(this.options.value).split('-');
if (value.length > 0) {
this.currentTime = value.map(item => {
return parseInt(item, 0);
});
}
this.init();
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.reloadPicker();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
}
DatePickerComponent$1.decorators = [
{ type: Component, args: [{
selector: 'DatePicker, nzm-date-picker',
template: "<div *ngIf=\"options.mask\" class=\"am-picker-popup-mask {{maskTransitionName}}\" (click)=\"cancel()\"></div>\n<div class=\"am-picker-popup {{transitionName}}\" style=\"z-index: 1001\">\n <div class=\"am-picker-popup-content\">\n <div class=\"am-picker-popup-body\">\n <div>\n <div class=\"am-picker-popup-header\">\n <div class=\"am-picker-popup-item am-picker-popup-header-left\"\n (click)=\"cancel()\"\n >\n {{options.dismissText}}\n </div>\n <div class=\"am-picker-popup-item am-picker-popup-title\">{{options.title}}</div>\n <div class=\"am-picker-popup-item am-picker-popup-header-right\"\n (click)=\"ok()\"\n >\n {{options.okText}}\n </div>\n </div>\n <div #picker\n class=\"am-picker\"\n style=\"flex-direction: row; align-items: center;\"\n >\n <div *ngFor=\"let item of dataWithStr; let i = index\" class=\"am-picker-col\">\n <div class=\"am-picker-col-indicator \" style=\"top: 102px;\"></div>\n <div id={{i}}\n class=\"am-picker-col-mask\"\n style=\"background-size: 100% 102px;\"\n ></div>\n <div class=\"am-picker-col-content\">\n <div id={{i}}\n class=\"am-picker-col-item\"\n *ngFor=\"let val of item; let i = index\"\n >{{val.label?val.label:val}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
DatePickerComponent$1.ctorParameters = () => [
{ type: ElementRef },
{ type: DatePickerOptions },
{ type: LocaleProviderService }
];
DatePickerComponent$1.propDecorators = {
picker: [{ type: ViewChild, args: ['picker', { read: ViewContainerRef },] }],
panstart: [{ type: HostListener, args: ['mousedown', ['$event'],] }, { type: HostListener, args: ['touchstart', ['$event'],] }],
panmove: [{ type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }],
panend: [{ type: HostListener, args: ['mouseleave', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['touchend', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerViewComponent extends DatePickerComponent$1 {
constructor() {
super(...arguments);
this.mode = 'date';
this.minDate = new Date(2000, 5, 1, 0, 0, 0);
this.maxDate = new Date(2030, 1, 1, 23, 59, 59);
this.value = new Date();
this.disabled = false;
this.indicatorStyle = {};
this.onValueChange = new EventEmitter();
this.amPicker = true;
}
/**
* @return {?}
*/
get locale() {
return this.options.locale;
}
/**
* @param {?} value
* @return {?}
*/
set locale(value) {
this.options.locale = value;
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
/**
* @return {?}
*/
init() {
this.options.mode = this.mode;
this.options.minDate = this.minDate;
this.options.maxDate = this.maxDate;
this.options.disabled = this.disabled;
this.options.locale = this.locale;
this.options.value = this.value;
this.options.onValueChange = this.onValueChange;
this.checkMode(this.options.mode);
/** @type {?} */
const value = this.transformDateFormat(this.options.value).split('-');
if (value.length > 0) {
this.currentTime = value.map(item => {
return parseInt(item, 0);
});
}
this.initResult();
this.checkTime();
this.initReady();
this.getInitValueIndex();
}
/**
* @return {?}
*/
reloadPicker() {
if (this.currentPicker) {
/** @type {?} */
const self = this;
setTimeout(() => {
self.selectedTarget.forEach((item, i) => {
self.currentPicker.children[i].children[2].style.transition = 'transform .3s';
/** @type {?} */
const index = parseInt(item.currentY, 0);
self.currentPicker.children[i].children[2].style.transform = `translateY(${index * self.lineHeight}px)`;
});
}, 0);
}
}
/**
* @return {?}
*/
ngOnInit() {
this.localeProvider();
this.init();
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.currentPicker = this.elementRef.nativeElement;
this.reloadPicker();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes["value"]) {
this.options.value = changes["value"].currentValue;
/** @type {?} */
const value = this.transformDateFormat(this.options.value).split('-');
if (value.length > 0) {
this.currentTime = value.map(item => {
return parseInt(item, 0);
});
}
if (!this.judgeEqualArray(this.currentTime, this.resultArr, this.resultArr.length) ||
this.judgeEqualArray(this.currentTime, this.min_date, this.currentTime.length) ||
this.judgeTime(this.currentTime, this.max_date)) {
this.init();
}
}
if (changes["mode"] || changes["minDate"] || changes["maxDate"] || changes["disabled"] || changes["locale"]) {
this.init();
}
}
}
DatePickerViewComponent.decorators = [
{ type: Component, args: [{
selector: 'DatePickerView, nzm-date-picker-view',
template: "<div *ngFor=\"let item of dataWithStr; let i = index\" class=\"am-picker-col\">\n <div class=\"am-picker-col-indicator \" style=\"top: 102px;\" [ngStyle]=\"indicatorStyle\"></div>\n <div id={{i}} class=\"am-picker-col-mask\" style=\"background-size: 100% 102px;\"></div>\n <div class=\"am-picker-col-content\">\n <div id={{i}} *ngFor=\"let val of item; let i = index\" class=\"am-picker-col-item\">{{val.label?val.label:val}}</div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
DatePickerViewComponent.propDecorators = {
mode: [{ type: Input }],
minDate: [{ type: Input }],
maxDate: [{ type: Input }],
value: [{ type: Input }],
disabled: [{ type: Input }],
indicatorStyle: [{ type: Input }],
locale: [{ type: Input }],
onValueChange: [{ type: Output }],
amPicker: [{ type: HostBinding, args: ['class.am-picker',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class LocaleProviderPipe {
/**
* @param {?} _locale
*/
constructor(_locale) {
this._locale = _locale;
}
/**
* @param {?} keyPath
* @return {?}
*/
transform(keyPath) {
return this._locale.getLocaleValue(keyPath);
}
}
LocaleProviderPipe.decorators = [
{ type: Pipe, args: [{
name: 'localeProvider'
},] }
];
/** @nocollapse */
LocaleProviderPipe.ctorParameters = () => [
{ type: LocaleProviderService }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
const ɵ0$1 = zh_CN;
class LocaleProviderModule {
}
LocaleProviderModule.decorators = [
{ type: NgModule, args: [{
imports: [],
declarations: [LocaleProviderPipe],
exports: [LocaleProviderPipe],
providers: [{ provide: LOCAL_PROVIDER_TOKEN, useValue: ɵ0$1 }, LOCALE_PROVIDER_SERVICE_PROVIDER]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerDirective {
/**
* @param {?} _viewContainerRef
* @param {?} _elm
* @param {?} _defaultOptions
* @param {?} _cfr
*/
constructor(_viewContainerRef, _elm, _defaultOptions, _cfr) {
this._viewContainerRef = _viewContainerRef;
this._elm = _elm;
this._defaultOptions = _defaultOptions;
this._cfr = _cfr;
this._eventListeners = [];
this.value = new Date();
this.onVisibleChange = new EventEmitter(true);
this.onValueChange = new EventEmitter();
this.onOk = new EventEmitter();
this.onDismiss = new EventEmitter();
}
/**
* @return {?}
*/
togglePicker() {
if (!this.picker) {
this.showPicker();
}
else {
this.hidePicker();
}
}
/**
* @return {?}
*/
showPicker() {
if (!this.picker) {
setTimeout(() => {
this._eventListeners = [];
});
/** @type {?} */
const options = new DatePickerOptions();
Object.assign(options, this._defaultOptions, {
hidePicker: (event) => {
this.hidePicker();
}
});
/** @type {?} */
const optionalParams = [
'mode',
'minDate',
'maxDate',
'value',
'mask',
'title',
'okText',
'dismissText',
'disabled',
'locale',
'appendToBody',
'onOk',
'onDismiss',
'onValueChange'
];
optionalParams.forEach(param => {
if (typeof this[param] !== 'undefined') {
(/** @type {?} */ (options))[param] = this[param];
}
});
/** @type {?} */
const componentFactory = this._cfr.resolveComponentFactory(DatePickerComponent$1);
/** @type {?} */
const childInjector = Injector.create([
{
provide: DatePickerOptions,
useValue: options
}
]);
this.picker = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector);
if (options.appendToBody) {
document.body.appendChild(this.picker.location.nativeElement);
}
this.onVisibleChange.emit(true);
}
}
/**
* @return {?}
*/
hidePicker() {
if (this.picker) {
this.picker.destroy();
delete this.picker;
this.onVisibleChange.emit(false);
this._eventListeners.forEach(fn => fn());
this._eventListeners = [];
}
}
/**
* @return {?}
*/
ngOnInit() {
this.onVisibleChange.emit(false);
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes["isOpen"]) {
if (changes["isOpen"].currentValue === true) {
this.showPicker();
}
else {
this.hidePicker();
}
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.hidePicker();
}
}
DatePickerDirective.decorators = [
{ type: Directive, args: [{
selector: '[DatePicker]'
},] }
];
/** @nocollapse */
DatePickerDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: ElementRef },
{ type: DatePickerOptions },
{ type: ComponentFactoryResolver }
];
DatePickerDirective.propDecorators = {
isOpen: [{ type: Input }],
mode: [{ type: Input }],
minDate: [{ type: Input }],
maxDate: [{ type: Input }],
use12Hours: [{ type: Input }],
value: [{ type: Input }],
mask: [{ type: Input }],
title: [{ type: Input }],
okText: [{ type: Input }],
dismissText: [{ type: Input }],
disabled: [{ type: Input }],
locale: [{ type: Input }],
appendToBody: [{ type: Input }],
onVisibleChange: [{ type: Output }],
onValueChange: [{ type: Output }],
onOk: [{ type: Output }],
onDismiss: [{ type: Output }],
togglePicker: [{ type: HostListener, args: ['click',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerModule {
}
DatePickerModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, LocaleProviderModule],
exports: [DatePickerComponent$1, DatePickerDirective],
declarations: [DatePickerComponent$1, DatePickerDirective],
entryComponents: [DatePickerComponent$1],
providers: [DatePickerOptions, LocaleProviderModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DatePickerViewModule {
}
DatePickerViewModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, DatePickerModule, LocaleProviderModule],
exports: [DatePickerViewComponent],
declarations: [DatePickerViewComponent],
providers: [LocaleProviderModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CalendarModule {
}
CalendarModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, IconModule, DatePickerViewModule],
declarations: [
CalendarComponent,
HeaderComponent,
DatePickerComponent,
WeekPanelComponent,
SingleMonthComponent,
ConfirmPanelComponent,
TimePickerComponent,
ShortcutPanelComponent
],
exports: [
CalendarComponent,
HeaderComponent,
DatePickerComponent,
WeekPanelComponent,
SingleMonthComponent,
ConfirmPanelComponent,
TimePickerComponent,
ShortcutPanelComponent
]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverItemComponent {
/**
* @param {?} _elementRef
*/
constructor(_elementRef) {
this._elementRef = _elementRef;
this.defaultProps = {
prefixCls: 'am-popover',
disabled: false
};
this.isActive = false;
this.select = new EventEmitter();
this.amPopoverItem = true;
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
this._icon = value;
}
/**
* @return {?}
*/
get style() {
return this._style;
}
/**
* @param {?} value
* @return {?}
*/
set style(value) {
this._style = value;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this.defaultProps.disabled = value;
}
/**
* @return {?}
*/
get amPopoverItemActive() {
return this.isActive;
}
/**
* @return {?}
*/
get amPopoverItemDisabled() {
return this.defaultProps.disabled;
}
/**
* @param {?} e
* @return {?}
*/
touchStart(e) {
this.select.emit();
this.isActive = true;
}
/**
* @return {?}
*/
ngAfterContentInit() { }
}
PopoverItemComponent.decorators = [
{ type: Component, args: [{
selector: 'PopoverItem, nzm-popover-item',
template: "<div class=\"{{defaultProps.prefixCls}}-item-container\">\n <span class=\"{{defaultProps.prefixCls}}-item-icon\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"icon\"></ng-template>\n </span>\n <span class=\"{{defaultProps.prefixCls}}-item-content\">\n <ng-content></ng-content>\n </span>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
PopoverItemComponent.ctorParameters = () => [
{ type: ElementRef }
];
PopoverItemComponent.propDecorators = {
icon: [{ type: Input }],
style: [{ type: Input }],
disabled: [{ type: Input }],
select: [{ type: Output }],
amPopoverItem: [{ type: HostBinding, args: ['class.am-popover-item',] }],
amPopoverItemActive: [{ type: HostBinding, args: ['class.am-popover-item-active',] }],
amPopoverItemDisabled: [{ type: HostBinding, args: ['class.am-popover-item-disabled',] }],
touchStart: [{ type: HostListener, args: ['touchstart', ['$event'],] }, { type: HostListener, args: ['mousedown', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopoverItemModule {
}
PopoverItemModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, IconModule],
exports: [PopoverItemComponent],
declarations: [PopoverItemComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class FlexComponent {
constructor() {
this.defaultProps = {
prefixCls: 'am-flexbox',
align: 'center'
};
this._direction = '';
this._justify = '';
this._alignContent = '';
this.amFlexbox = true;
}
/**
* @param {?} value
* @return {?}
*/
set direction(value) {
this._direction = value;
}
/**
* @param {?} value
* @return {?}
*/
set wrap(value) {
this._wrap = value;
}
/**
* @param {?} value
* @return {?}
*/
set justify(value) {
this._justify = value;
}
/**
* @param {?} value
* @return {?}
*/
set align(value) {
this.defaultProps.align = value;
}
/**
* @param {?} value
* @return {?}
*/
set alignContent(value) {
this._alignContent = value;
}
/**
* @return {?}
*/
get amFlexboxDirRow() {
return this._direction === 'row';
}
/**
* @return {?}
*/
get amFlexboxDirRowReverse() {
return this._direction === 'row-reverse';
}
/**
* @return {?}
*/
get amFlexboxDirColumn() {
return this._direction === 'column';
}
/**
* @return {?}
*/
get amFlexboxDirColumnReverse() {
return this._direction === 'column-reverse';
}
/**
* @return {?}
*/
get amFlexboxNowrap() {
return this._wrap === 'nowrap';
}
/**
* @return {?}
*/
get amFlexboxWrap() {
return this._wrap === 'wrap';
}
/**
* @return {?}
*/
get amFlexboxWrapReverse() {
return this._wrap === 'wrap-reverse';
}
/**
* @return {?}
*/
get amFlexboxJustifyStart() {
return this._justify === 'start';
}
/**
* @return {?}
*/
get amFlexboxJustifyCenter() {
return this._justify === 'center';
}
/**
* @return {?}
*/
get amFlexboxJustifyEnd() {
return this._justify === 'end';
}
/**
* @return {?}
*/
get amFlexboxJustifyBetween() {
return this._justify === 'between';
}
/**
* @return {?}
*/
get amFlexboxAlignAround() {
return this._justify === 'around';
}
/**
* @return {?}
*/
get amFlexboxAlignStart() {
return this.defaultProps.align === 'start';
}
/**
* @return {?}
*/
get amFlexboxAlignCenter() {
return this.defaultProps.align === 'center';
}
/**
* @return {?}
*/
get amFlexboxAlignEnd() {
return this.defaultProps.align === 'end';
}
/**
* @return {?}
*/
get amFlexboxAlignBaseline() {
return this.defaultProps.align === 'baseline';
}
/**
* @return {?}
*/
get amFlexboxAlignStretch() {
return this.defaultProps.align === 'stretch';
}
/**
* @return {?}
*/
get amFlexboxAlignContentStart() {
return this._alignContent === 'start';
}
/**
* @return {?}
*/
get amFlexboxAlignCotentCenter() {
return this._alignContent === 'center';
}
/**
* @return {?}
*/
get amFlexboxAlignContentEnd() {
return this._alignContent === 'end';
}
/**
* @return {?}
*/
get amFlexboxAlignContentBetween() {
return this._alignContent === 'between';
}
/**
* @return {?}
*/
get amFlexboxAlignContentAround() {
return this._alignContent === 'around';
}
/**
* @return {?}
*/
get amFlexboxAlignContentStretch() {
return this._alignContent === 'stretch';
}
}
FlexComponent.decorators = [
{ type: Component, args: [{
selector: 'Flex, nzm-flex',
template: "<ng-content></ng-content>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
FlexComponent.ctorParameters = () => [];
FlexComponent.propDecorators = {
direction: [{ type: Input }],
wrap: [{ type: Input }],
justify: [{ type: Input }],
align: [{ type: Input }],
alignContent: [{ type: Input }],
amFlexbox: [{ type: HostBinding, args: ['class.am-flexbox',] }],
amFlexboxDirRow: [{ type: HostBinding, args: ['class.am-flexbox-dir-row',] }],
amFlexboxDirRowReverse: [{ type: HostBinding, args: ['class.am-flexbox-dir-row-reverse',] }],
amFlexboxDirColumn: [{ type: HostBinding, args: ['class.am-flexbox-dir-column',] }],
amFlexboxDirColumnReverse: [{ type: HostBinding, args: ['class.am-flexbox-dir-column-reverse',] }],
amFlexboxNowrap: [{ type: HostBinding, args: ['class.am-flexbox-nowrap',] }],
amFlexboxWrap: [{ type: HostBinding, args: ['class.am-flexbox-wrap',] }],
amFlexboxWrapReverse: [{ type: HostBinding, args: ['class.am-flexbox-wrap-reverse',] }],
amFlexboxJustifyStart: [{ type: HostBinding, args: ['class.am-flexbox-justify-start',] }],
amFlexboxJustifyCenter: [{ type: HostBinding, args: ['class.am-flexbox-justify-center',] }],
amFlexboxJustifyEnd: [{ type: HostBinding, args: ['class.am-flexbox-justify-end',] }],
amFlexboxJustifyBetween: [{ type: HostBinding, args: ['class.am-flexbox-justify-between',] }],
amFlexboxAlignAround: [{ type: HostBinding, args: ['class.am-flexbox-justify-around',] }],
amFlexboxAlignStart: [{ type: HostBinding, args: ['class.am-flexbox-align-start',] }],
amFlexboxAlignCenter: [{ type: HostBinding, args: ['class.am-flexbox-align-center',] }],
amFlexboxAlignEnd: [{ type: HostBinding, args: ['class.am-flexbox-align-end',] }],
amFlexboxAlignBaseline: [{ type: HostBinding, args: ['class.am-flexbox-align-baseline',] }],
amFlexboxAlignStretch: [{ type: HostBinding, args: ['class.am-flexbox-align-stretch',] }],
amFlexboxAlignContentStart: [{ type: HostBinding, args: ['class.am-flexbox-align-content-start',] }],
amFlexboxAlignCotentCenter: [{ type: HostBinding, args: ['class.am-flexbox-align-content-center',] }],
amFlexboxAlignContentEnd: [{ type: HostBinding, args: ['class.am-flexbox-align-content-end',] }],
amFlexboxAlignContentBetween: [{ type: HostBinding, args: ['class.am-flexbox-align-content-between',] }],
amFlexboxAlignContentAround: [{ type: HostBinding, args: ['class.am-flexbox-align-content-around',] }],
amFlexboxAlignContentStretch: [{ type: HostBinding, args: ['class.am-flexbox-align-content-stretch',] }]
};
class FlexItemComponent {
constructor() {
this.defaultProps = {
prefixCls: 'am-flexbox',
align: 'center'
};
this.flexboxItem = true;
}
}
FlexItemComponent.decorators = [
{ type: Component, args: [{
selector: 'FlexItem, nzm-flex-item',
template: `
<ng-content></ng-content>
`,
encapsulation: ViewEncapsulation.None
}] }
];
FlexItemComponent.propDecorators = {
flexboxItem: [{ type: HostBinding, args: ['class.am-flexbox-item',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class FlexModule {
}
FlexModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
exports: [FlexComponent, FlexItemComponent],
declarations: [FlexComponent, FlexItemComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class GridComponent {
constructor() {
this.wrapCls = {};
this.itemCls = {};
this.carouselProps = {
dots: false,
dragging: false
};
this.defaultProps = {
data: [],
hasLine: true,
isCarousel: false,
columnNum: 4,
carouselMaxRow: 2,
prefixCls: 'am-grid',
square: true,
itemStyle: {}
};
this.carouselData = [];
this.carouselDataTmp = [];
this.gridData = [];
this._data = [];
this.columnNum = 4;
this.carouselMaxRow = 2;
this.itemStyle = {};
this.square = true;
this.hasLine = true;
this.activeStyle = true;
this.OnClick = new EventEmitter();
this.amGrid = true;
}
/**
* @return {?}
*/
get isCarousel() {
return this.defaultProps.isCarousel;
}
/**
* @param {?} value
* @return {?}
*/
set isCarousel(value) {
this.defaultProps.isCarousel = value;
this.init();
}
/**
* @param {?} value
* @return {?}
*/
set data(value) {
this._data = value;
this.init();
}
/**
* @return {?}
*/
get amGridSquare() {
return true === this.square;
}
/**
* @return {?}
*/
get amGridLine() {
return true === this.hasLine;
}
/**
* @return {?}
*/
get amGridCarousel() {
return true === this.isCarousel;
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
return value instanceof TemplateRef;
}
/**
* @param {?} value
* @return {?}
*/
isURL(value) {
if (value) {
return value.indexOf('http') >= 0;
}
else {
return false;
}
}
/**
* @return {?}
*/
init() {
/** @type {?} */
const dataLength = (this._data && this._data.length) || 0;
/** @type {?} */
let rowCount = Math.ceil(dataLength / this.columnNum);
/** @type {?} */
let rowsArr;
if (this.defaultProps.isCarousel) {
if (rowCount % this.carouselMaxRow !== 0) {
rowCount = rowCount + this.carouselMaxRow - (rowCount % this.carouselMaxRow);
}
/** @type {?} */
const pageCount = Math.ceil(rowCount / this.carouselMaxRow);
rowsArr = this.getRows(rowCount, dataLength);
if (pageCount <= 1) {
this.carouselProps = {
dots: false,
dragging: false
};
}
else {
this.carouselProps = {
dots: true,
dragging: true
};
}
this.carouselDataTmp = this.getCarouselData(rowsArr, pageCount, rowCount);
}
else {
this.gridData = this.getRows(rowCount, dataLength);
}
}
/**
* @param {?} rowsArr
* @param {?} pageCount
* @param {?} rowCount
* @return {?}
*/
getCarouselData(rowsArr, pageCount, rowCount) {
/** @type {?} */
const pagesArr = [];
for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {
/** @type {?} */
const pageRows = [];
for (let ii = 0; ii < this.carouselMaxRow; ii++) {
/** @type {?} */
const rowIndex = pageIndex * this.carouselMaxRow + ii;
if (rowIndex < rowCount) {
pageRows.push(rowsArr[rowIndex]);
}
else {
// 空节点为了确保末尾页的最后未到底的行有底线(样式中last-child会没线)
pageRows.push(null);
}
}
pagesArr.push(pageRows);
}
return pagesArr;
}
/**
* @param {?} rowCount
* @param {?} dataLength
* @return {?}
*/
getRows(rowCount, dataLength) {
/** @type {?} */
const columnNum = this.columnNum;
/** @type {?} */
const rowArr = new Array();
for (let i = 0; i < rowCount; i++) {
rowArr[i] = new Array();
for (let j = 0; j < columnNum; j++) {
/** @type {?} */
const dataIndex = i * columnNum + j;
if (dataIndex < dataLength) {
rowArr[i][j] = this._data[dataIndex];
}
else {
rowArr[i][j] = null;
}
}
}
return rowArr;
}
/**
* @param {?} data
* @param {?} index
* @return {?}
*/
click(data, index) {
/** @type {?} */
const outputData = {
data: data,
index: index
};
this.OnClick.emit(outputData);
}
/**
* @return {?}
*/
ngOnInit() {
this.itemCls = {
[`${this.defaultProps.prefixCls}-item`]: true,
[`${this.defaultProps.prefixCls}-active-item`]: false
};
}
}
GridComponent.decorators = [
{ type: Component, args: [{
selector: 'Grid, nzm-grid',
template: "<ng-container *ngIf=\"!isCarousel\">\n <Flex *ngFor=\"let item of gridData; let i = index;\"\n [justify]=\"'center'\"\n [align]=\"'stretch'\"\n >\n <FlexItem TouchFeedback\n *ngFor=\"let subItem of item; let j = index;\"\n [ngClass]=\"itemCls\"\n [ngStyle]=\"itemStyle\"\n [className]=\"['am-grid-item-active']\"\n [activeStyle]=\"activeStyle\"\n >\n <div *ngIf=\"subItem !== null\"\n class=\"{{defaultProps.prefixCls}}-item-content\"\n (click)=\"click(subItem,i * columnNum + j)\"\n >\n <div class=\"{{defaultProps.prefixCls}}-item-inner-content column-num-{{columnNum}}\">\n <img *ngIf=\"subItem.icon && isURL(subItem.icon)\"\n src=\"{{subItem.icon}}\"\n class=\"{{defaultProps.prefixCls}}-icon\"\n >\n <Icon *ngIf=\"subItem.icon && !isURL(subItem.icon)\"\n [type]=\"subItem.icon\"\n [size]=\"subItem.size\"\n ></Icon>\n <div class=\"{{defaultProps.prefixCls}}-text\">{{subItem.text}}</div>\n </div>\n </div>\n <div *ngIf=\"subItem === null\" class=\"{{defaultProps.prefixCls}}-null-item\"></div>\n </FlexItem>\n <ng-content></ng-content>\n </Flex>\n</ng-container>\n\n<Carousel *ngIf=\"isCarousel && carouselDataTmp.length > 0\"\n [autoplay]=\"false\"\n [infinite]=\"true\"\n [selectedIndex]=\"0\"\n [autoplayInterval]='3000'\n [dots]=\"carouselProps.dots\"\n [dragging]=\"carouselProps.dragging\"\n>\n <CarouselSlide *ngFor=\"let gridData of carouselDataTmp\"\n class=\"{{defaultProps.prefixCls}}-carousel-page\"\n style=\"display: block;\"\n >\n <Flex *ngFor=\"let item of gridData; let i = index;\"\n [justify]=\"'center'\"\n [align]=\"'stretch'\"\n >\n <FlexItem TouchFeedback\n *ngFor=\"let subItem of item; let j = index;\"\n class=\"{{defaultProps.prefixCls}}-item\"\n [ngStyle]=\"itemStyle\"\n [className]=\"['am-grid-item-active']\"\n >\n <div *ngIf=\"subItem !== null\"\n class=\"{{defaultProps.prefixCls}}-item-content\"\n (click)=\"click(subItem,i * columnNum + j)\"\n >\n <div class=\"{{defaultProps.prefixCls}}-item-inner-content column-num-4\">\n <img class=\"{{defaultProps.prefixCls}}-icon\" src=\"{{subItem.icon}}\">\n <div class=\"{{defaultProps.prefixCls}}-text\">{{subItem.text}}</div>\n </div>\n </div>\n <div *ngIf=\"subItem === null\" class=\"{{defaultProps.prefixCls}}-null-item\"></div>\n </FlexItem>\n </Flex>\n </CarouselSlide>\n</Carousel>"
}] }
];
/** @nocollapse */
GridComponent.ctorParameters = () => [];
GridComponent.propDecorators = {
columnNum: [{ type: Input }],
carouselMaxRow: [{ type: Input }],
itemStyle: [{ type: Input }],
square: [{ type: Input }],
hasLine: [{ type: Input }],
isCarousel: [{ type: Input }],
activeStyle: [{ type: Input }],
data: [{ type: Input }],
OnClick: [{ type: Output }],
amGrid: [{ type: HostBinding, args: ['class.am-grid',] }],
amGridSquare: [{ type: HostBinding, args: ['class.am-grid-square',] }],
amGridLine: [{ type: HostBinding, args: ['class.am-grid-line',] }],
amGridCarousel: [{ type: HostBinding, args: ['class.am-grid-carousel',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
const INTERFACE_TOKEN = new InjectionToken('InterfaceToken');
class TouchFeedbackDirective {
/**
* @param {?} _elementRef
* @param {?} _renderer
*/
constructor(_elementRef, _renderer) {
this._elementRef = _elementRef;
this._renderer = _renderer;
this.activeStyle = true;
this.clickStart = new EventEmitter();
this.clickEnd = new EventEmitter();
}
/**
* @param {?} className
* @return {?}
*/
addClass(className) {
this._renderer.addClass(this._elementRef.nativeElement, className);
}
/**
* @param {?} className
* @return {?}
*/
removeClass(className) {
this._renderer.removeClass(this._elementRef.nativeElement, className);
}
/**
* @return {?}
*/
ngOnInit() {
this._className = this.className;
}
/**
* @return {?}
*/
touchStart() {
if (this.activeStyle) {
this.addClass(this._className);
this.clickStart.emit();
}
}
/**
* @return {?}
*/
touchEnd() {
if (this.activeStyle) {
this.removeClass(this._className);
this.clickEnd.emit();
}
}
}
TouchFeedbackDirective.decorators = [
{ type: Directive, args: [{
selector: '[TouchFeedback]'
},] }
];
/** @nocollapse */
TouchFeedbackDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
TouchFeedbackDirective.propDecorators = {
className: [{ type: Input }],
activeStyle: [{ type: Input }],
clickStart: [{ type: Output }],
clickEnd: [{ type: Output }],
touchStart: [{ type: HostListener, args: ['touchstart', ['$event'],] }, { type: HostListener, args: ['mousedown', ['$event'],] }],
touchEnd: [{ type: HostListener, args: ['touchend', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TouchFeedBackComponent {
/**
* @param {?} _ele
* @param {?} _render
*/
constructor(_ele, _render) {
this._ele = _ele;
this._render = _render;
this.activeClassName = '';
this.activeStyle = true;
}
/**
* @return {?}
*/
touchStart() {
if (this.activeStyle) {
this._render.addClass(this._ele.nativeElement, this.activeClassName);
}
}
/**
* @return {?}
*/
touchEnd() {
if (this.activeStyle) {
this._render.removeClass(this._ele.nativeElement, this.activeClassName);
}
}
}
TouchFeedBackComponent.decorators = [
{ type: Component, args: [{
selector: 'TouchFeedBack',
template: '<ng-content></ng-content>',
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
TouchFeedBackComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
TouchFeedBackComponent.propDecorators = {
activeClassName: [{ type: Input }],
activeStyle: [{ type: Input }],
touchStart: [{ type: HostListener, args: ['touchstart', ['$event'],] }, { type: HostListener, args: ['mousedown', ['$event'],] }],
touchEnd: [{ type: HostListener, args: ['touchend', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PopupService {
/**
* @param {?} _overlay
* @param {?} _viewContainerRef
*/
constructor(_overlay, _viewContainerRef) {
this._overlay = _overlay;
this._viewContainerRef = _viewContainerRef;
PopupService.viewContainerRef = this._viewContainerRef;
PopupService.overlay = this._overlay;
}
/**
* @param {?} component
* @param {?=} childInjector
* @return {?}
*/
static showPopup(component, childInjector) {
/** @type {?} */
let overlayConfig = new OverlayConfig();
overlayConfig.hasBackdrop = true;
PopupService.overlayRef = PopupService.overlay.create(overlayConfig);
PopupService.overlayRef.backdropClick().subscribe(() => {
PopupService.overlayRef.dispose();
});
PopupService.overlayRef.attach(new ComponentPortal(component, PopupService.viewContainerRef, childInjector));
}
/**
* @return {?}
*/
static hidePopup() {
if (PopupService.overlayRef) {
PopupService.overlayRef.dispose();
}
}
}
PopupService.viewContainerRef = null;
PopupService.overlay = null;
PopupService.overlayRef = null;
PopupService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
PopupService.ctorParameters = () => [
{ type: Overlay },
{ type: ViewContainerRef }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class CoreModule {
}
CoreModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule,
OverlayModule
],
exports: [TouchFeedbackDirective, TouchFeedBackComponent],
declarations: [TouchFeedbackDirective, TouchFeedBackComponent],
providers: [PopupService]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class GridModule {
}
GridModule.decorators = [
{ type: NgModule, args: [{
imports: [FlexModule, IconModule, CommonModule, CarouselModule, CoreModule],
exports: [GridComponent],
declarations: [GridComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SafeHTMLPipe {
/**
* @param {?} _sanitized
*/
constructor(_sanitized) {
this._sanitized = _sanitized;
}
/**
* @param {?} value
* @return {?}
*/
transform(value) {
return this._sanitized.bypassSecurityTrustHtml(value);
}
}
SafeHTMLPipe.decorators = [
{ type: Pipe, args: [{ name: 'safeHTML' },] }
];
/** @nocollapse */
SafeHTMLPipe.ctorParameters = () => [
{ type: DomSanitizer }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NgZorroAntdMobilePipesModule {
}
NgZorroAntdMobilePipesModule.decorators = [
{ type: NgModule, args: [{
imports: [],
declarations: [
SafeHTMLPipe
],
exports: [SafeHTMLPipe]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ActionSheetComponent {
constructor() {
this.props = {
prefixCls: 'am-action-sheet',
cancelButtonText: '取消'
};
this.flag = '';
this.title = '';
this.message = '';
this.transitionName = '';
this.maskTransitionName = '';
this.activeClassName = [`${this.props.prefixCls}-button-list-item-active`];
}
/**
* @param {?} flag
* @return {?}
*/
showShare(flag) {
/** @type {?} */
const cls = { [`${this.props.prefixCls}-share`]: flag === 'SHARE' };
return cls;
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
if (value) {
return value instanceof TemplateRef;
}
return false;
}
/**
* @param {?} options
* @param {?} value
* @return {?}
*/
isArray(options, value) {
if (options.length > 0 && value) {
return value instanceof Array;
}
return false;
}
}
ActionSheetComponent.decorators = [
{ type: Component, args: [{
selector: 'ActionSheet',
template: "<div class=\"{{props.prefixCls}}-mask {{maskTransitionName}}\"></div>\n<div class=\"{{props.prefixCls}}-wrap {{transitionName}}\" (click)=\"onPress(-1, 0, $event)\">\n <div role=\"document\"\n class=\"{{props.prefixCls}}\"\n [ngClass]=\"showShare(flag)\">\n <div class=\"{{props.prefixCls}}-content\">\n <button aria-label=\"Close\" class=\"{{props.prefixCls}}-close\">\n <span class=\"{{props.prefixCls}}-close-x\"></span>\n </button>\n <div class=\"{{props.prefixCls}}-body\">\n <div>\n <ng-template *ngIf=\"isTemplateRef(title)\" [ngTemplateOutlet]=\"title\"></ng-template>\n <h3 *ngIf=\"!isTemplateRef(title)\" class=\"{{props.prefixCls}}-title\">{{title}}</h3>\n <ng-template *ngIf=\"isTemplateRef(message)\" [ngTemplateOutlet]=\"message\"></ng-template>\n <div *ngIf=\"!isTemplateRef(message)\" class=\"{{props.prefixCls}}-message\">{{message}}</div>\n <ng-container [ngSwitch]=\"flag\">\n <div *ngSwitchCase=\"'NORMAL'\" class=\"{{props.prefixCls}}-button-list\" role=\"group\">\n <ng-container *ngFor=\"let item of options; let i = index;\">\n <TouchFeedBack class=\"{{props.prefixCls}}-button-list-item\" [activeClassName]=\"activeClassName\" >\n <div *ngIf=\"destructiveButtonIndex !== i && cancelButtonIndex !== i\"\n class=\"{{props.prefixCls}}-button-list-item\"\n (click)=\"onPress(i, 0, $event)\"\n >\n {{item}}\n </div>\n <div *ngIf=\"destructiveButtonIndex === i\"\n class=\"{{props.prefixCls}}-button-list-item {{props.prefixCls}}-destructive-button\"\n (click)=\"onPress(i, 0, $event)\"\n >\n {{item}}\n </div>\n <div *ngIf=\"cancelButtonIndex === i\"\n class=\"{{props.prefixCls}}-button-list-item {{props.prefixCls}}-cancel-button\"\n (click)=\"onPress(i, 0, $event)\"\n >\n {{item}}\n <span class=\"{{props.prefixCls}}-cancel-button-mask\"></span>\n </div>\n </TouchFeedBack>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'SHARE'\" class=\"{{props.prefixCls}}-share {{props.prefixCls}}-share-content\">\n <div *ngIf=\"!isArray(options, options[0])\" class=\"{{props.prefixCls}}-share-list\">\n <ng-container *ngFor=\"let item of options; let i = index;\">\n <div class=\"{{props.prefixCls}}-share-list-item\" (click)=\"onPress(i, 0, $event)\">\n <div class=\"{{props.prefixCls}}-share-list-item-icon\">\n <ng-template *ngIf=\"isTemplateRef(item.icon)\" [ngTemplateOutlet]=\"item.icon\"></ng-template>\n <div *ngIf=\"!isTemplateRef(item.icon)\" [innerHTML]=\"item.icon | safeHTML\"></div>\n </div>\n <div class=\"{{props.prefixCls}}-share-list-item-title\">{{item.title}}</div>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"isArray(options, options[0])\">\n <div *ngFor=\"let items of options; let rowIndex = index\" class=\"{{props.prefixCls}}-share-list\">\n <ng-container *ngFor=\"let item of items; let i = index;\">\n <div class=\"{{props.prefixCls}}-share-list-item\" (click)=\"onPress(i, rowIndex, $event)\">\n <div class=\"{{props.prefixCls}}-share-list-item-icon\">\n <ng-template *ngIf=\"isTemplateRef(item.icon)\" [ngTemplateOutlet]=\"item.icon\"></ng-template>\n <div *ngIf=\"!isTemplateRef(item.icon)\" [innerHTML]=\"item.icon | safeHTML\"></div>\n </div>\n <div class=\"{{props.prefixCls}}-share-list-item-title\">{{item.title}}</div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"{{props.prefixCls}}-share-cancel-button\">{{props.cancelButtonText}}</div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ActionSheetComponent.ctorParameters = () => [];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ActionSheetModule {
}
ActionSheetModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, NgZorroAntdMobilePipesModule, ListModule, WhiteSpaceModule, WingBlankModule, CoreModule],
declarations: [
ActionSheetComponent
],
exports: [
ActionSheetComponent
],
entryComponents: [ActionSheetComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SegmentedControlComponent {
constructor() {
this.prefixCls = 'am-segment';
this.tintColor = '#2DB7F5';
this.disabled = false;
this.selectedIndex = 0;
this.onChange = new EventEmitter();
this.role = 'tablist';
this.amSegment = true;
}
/**
* @return {?}
*/
get amDisabled() {
return this.disabled;
}
/**
* @param {?} index
* @param {?} value
* @return {?}
*/
onClick(index, value) {
if (!this.disabled && index !== this.selectedIndex) {
this.selectedIndex = index;
this.onChange.emit({ selectedIndex: index, value: value });
}
}
}
SegmentedControlComponent.decorators = [
{ type: Component, args: [{
selector: 'SegmentedControl, nz-segmented-control',
template: "<div role=\"tab\"\n *ngFor=\"let value of values; let i = index;\"\n class=\"{{prefixCls}}-item\"\n [ngClass]=\"{'am-segment-item-selected' : i === selectedIndex}\"\n [ngStyle]=\"{'border-color': tintColor, 'color': i === selectedIndex ? '#fff' : tintColor, 'background-color': i === selectedIndex ? tintColor : 'transparent'}\"\n (click)=\"onClick(i, value)\"\n>\n <div class=\"{{prefixCls}}-item-inner\"\n [ngStyle]=\"{'background-color': i === selectedIndex ? tintColor : 'transparent'}\"\n ></div>\n {{value}}\n</div>\n"
}] }
];
/** @nocollapse */
SegmentedControlComponent.ctorParameters = () => [];
SegmentedControlComponent.propDecorators = {
tintColor: [{ type: Input }],
disabled: [{ type: Input }],
selectedIndex: [{ type: Input }],
values: [{ type: Input }],
onChange: [{ type: Output }],
role: [{ type: HostBinding, args: ['attr.role',] }],
amSegment: [{ type: HostBinding, args: ['class.am-segment',] }],
amDisabled: [{ type: HostBinding, args: ['class.am-segment-disabled',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SegmentedControlModule {
}
SegmentedControlModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
declarations: [SegmentedControlComponent],
exports: [SegmentedControlComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TextareaItem {
constructor() {
this.prefixCls = 'am-textarea';
this.isTitleString = true;
this.maxLength = Infinity;
this._prefixListCls = 'am-list';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._clear = false;
this._rows = 1;
this._error = false;
this._labelNumber = 5;
this._name = '';
this._focus = false;
this._autoFocus = false;
this._isClear = false;
this._isClickingClear = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.onErrorClick = new EventEmitter();
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} v
* @return {?}
*/
set value(v) {
if (typeof v === undefined || v === null) {
this._value = '';
}
this._value = v;
this.textRef.nativeElement.value = this._value;
}
/**
* @return {?}
*/
get defaultValue() {
return this._defaultValue;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
this.textRef.nativeElement.value = this._value;
}
/**
* @return {?}
*/
get placeholder() {
return this._placeholder;
}
/**
* @param {?} value
* @return {?}
*/
set placeholder(value) {
this._placeholder = value;
}
/**
* @return {?}
*/
get editable() {
return this._editable;
}
/**
* @param {?} value
* @return {?}
*/
set editable(value) {
this._editable = value;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.setCls();
}
/**
* @return {?}
*/
get clear() {
return this._clear;
}
/**
* @param {?} value
* @return {?}
*/
set clear(value) {
this._clear = value;
}
/**
* @return {?}
*/
get rows() {
return this._rows;
}
/**
* @param {?} value
* @return {?}
*/
set rows(value) {
this._rows = value;
this.setCls();
}
/**
* @return {?}
*/
get error() {
return this._error;
}
/**
* @param {?} value
* @return {?}
*/
set error(value) {
this._error = value;
this.setCls();
}
/**
* @param {?} value
* @return {?}
*/
set labelNumber(value) {
this._labelNumber = value;
this.setCls();
}
/**
* @return {?}
*/
get count() {
return this._count;
}
/**
* @param {?} value
* @return {?}
*/
set count(value) {
this._count = value;
this.setCls();
this.setCharacterLength();
}
/**
* @return {?}
*/
get prefixListCls() {
return this._prefixListCls;
}
/**
* @param {?} value
* @return {?}
*/
set prefixListCls(value) {
this._prefixListCls = value;
this.setCls();
}
/**
* @param {?} value
* @return {?}
*/
set name(value) {
this._name = value;
this.textRef.nativeElement.name = this._name;
}
/**
* @param {?} value
* @return {?}
*/
set autoHeight(value) {
this._autoHeight = value;
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
this._title = value;
this.isTitleString = true;
if (typeof value !== 'string') {
this.isTitleString = false;
}
}
/**
* @param {?} value
* @return {?}
*/
set focus(value) {
if (value && value.focus) {
this.textRef.nativeElement.focus();
this.inputFocus('');
}
}
/**
* @return {?}
*/
get autoFocus() {
return this._autoFocus;
}
/**
* @param {?} value
* @return {?}
*/
set autoFocus(value) {
this._autoFocus = value;
}
/**
* @return {?}
*/
setCls() {
this.hasCount = this._count > 0 && this._rows > 1;
this.wrapCls = {
[`${this._prefixListCls}-item`]: true,
[`${this.prefixCls}-item`]: true,
[`${this.prefixCls}-disabled`]: this._disabled,
[`${this.prefixCls}-error`]: this._error,
[`${this.prefixCls}-focus`]: this._focus,
[`${this.prefixCls}-item-single-line`]: this._rows === 1 && !this._autoHeight,
[`${this.prefixCls}-has-count`]: this.hasCount
};
this.labelCls = {
[`${this.prefixCls}-label`]: true,
[`${this.prefixCls}-label-2`]: this._labelNumber === 2,
[`${this.prefixCls}-label-3`]: this._labelNumber === 3,
[`${this.prefixCls}-label-4`]: this._labelNumber === 4,
[`${this.prefixCls}-label-5`]: this._labelNumber === 5,
[`${this.prefixCls}-label-6`]: this._labelNumber === 6,
[`${this.prefixCls}-label-7`]: this._labelNumber === 7
};
this.controlCls = { [`${this.prefixCls}-control`]: true };
this.clearCls = {
[`${this.prefixCls}-clear-active`]: this._isClickingClear
};
}
/**
* @return {?}
*/
setCharacterLength() {
this.characterLength = this.countSymbols(this._value);
if (this._count > 0) {
this.maxLength = this._count - this.characterLength + (this._value ? this._value.length : 0);
}
}
/**
* @param {?} e
* @return {?}
*/
inputChange(e) {
this._value = e;
this.textRef.nativeElement.value = this._value;
this.setCharacterLength();
this.onChange.emit(this._value);
}
/**
* @param {?} value
* @return {?}
*/
inputFocus(value) {
this._focus = true;
this.setCls();
if (value !== undefined) {
this.onFocus.emit(value);
}
}
/**
* @param {?} value
* @param {?} event
* @return {?}
*/
inputBlur(value, event) {
setTimeout(() => {
this._focus = false;
this.setCls();
this.onBlur.emit(value);
this._isClear = false;
}, 100);
}
/**
* @return {?}
*/
clearInput() {
this._isClickingClear = true;
this.setCls();
setTimeout(() => {
this._value = '';
this.inputChange('');
this.inputFocus(this._value);
this._isClickingClear = false;
this.setCls();
}, 100);
}
/**
* @param {?} e
* @return {?}
*/
errorClick(e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
}
/**
* @return {?}
*/
reAlignHeight() {
/** @type {?} */
const textareaDom = this.textRef.nativeElement;
textareaDom.style.height = '';
textareaDom.style.height = `${textareaDom.scrollHeight}px`;
}
/**
* @param {?=} text
* @return {?}
*/
countSymbols(text = '') {
/** @type {?} */
const regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]|\n/g;
return text.replace(regexAstralSymbols, '_').length;
}
/**
* @return {?}
*/
ngOnInit() {
this.setCls();
this.setCharacterLength();
this.textRef.nativeElement.value = this._value;
}
/**
* @return {?}
*/
ngAfterContentChecked() {
if (this._autoHeight && this._focus) {
this.reAlignHeight();
}
}
}
TextareaItem.decorators = [
{ type: Component, args: [{
selector: 'TextareaItem , nzm-textarea-item',
template: "<div [ngClass]=\"wrapCls\">\n <div *ngIf=\"title && isTitleString\" [ngClass]=\"labelCls\">{{title}}</div>\n <div *ngIf=\"title && !isTitleString\" [ngClass]=\"labelCls\">\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n </div>\n <div [ngClass]=\"controlCls\">\n <textarea #text\n [rows]=\"rows\"\n [maxlength]=\"maxLength\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value , $event)\"\n (focus)=\"inputFocus(value)\"\n ></textarea>\n </div>\n <div *ngIf=\"clear && editable && !disabled && (value && value.length >0 )\"\n class=\"{{prefixCls}}-clear\"\n [ngClass]=\"clearCls\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\" class=\"{{prefixCls}}-error-extra\" (click)=\"errorClick($event)\"></div>\n <span *ngIf=\"hasCount\" class=\"{{prefixCls}}-count\">\n <span>{{characterLength}}</span>/{{count}}\n </span>\n</div>\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TextareaItem),
multi: true
}
]
}] }
];
/** @nocollapse */
TextareaItem.ctorParameters = () => [];
TextareaItem.propDecorators = {
textRef: [{ type: ViewChild, args: ['text',] }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
clear: [{ type: Input }],
rows: [{ type: Input }],
error: [{ type: Input }],
labelNumber: [{ type: Input }],
count: [{ type: Input }],
prefixListCls: [{ type: Input }],
name: [{ type: Input }],
autoHeight: [{ type: Input }],
title: [{ type: Input }],
focus: [{ type: Input }],
autoFocus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
onErrorClick: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TextareaItemModule {
}
TextareaItemModule.decorators = [
{ type: NgModule, args: [{
exports: [TextareaItem],
declarations: [TextareaItem],
imports: [CommonModule, FormsModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TabPane {
constructor() {
this.prefixCls = 'am-tabs-pane';
this.tintColor = '#108ee9';
this.unselectedTintColor = '#888';
this.active = true;
this.isTitleString = true;
this.showTabPanelContent = false;
this.paneWrap = true;
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
this.isTitleString = !(value instanceof TemplateRef);
this._title = value;
}
/**
* @return {?}
*/
get wrapActive() {
return this.active;
}
/**
* @return {?}
*/
get wrapInactive() {
return !this.active;
}
/**
* @param {?} e
* @return {?}
*/
onTranslateTabStarted(e) {
if ((e.toState == 'center-with-animation' ||
e.toState == 'center-without-animation' ||
e.toState == 'left-with-animation-with-higher-zindex' ||
e.toState == 'right-with-animation-with-higher-zindex' ||
e.toState == 'top-with-animation-with-higher-zindex' ||
e.toState == 'bottom-with-animation-with-higher-zindex') &&
(this.position == 'center-with-animation' ||
this.position == 'center-without-animation' ||
this.position == 'left-with-animation-with-higher-zindex' ||
this.position == 'right-with-animation-with-higher-zindex' ||
this.position == 'top-with-animation-with-higher-zindex' ||
this.position == 'bottom-with-animation-with-higher-zindex')) {
this.showTabPanelContent = true;
}
}
/**
* @param {?} e
* @return {?}
*/
onTranslateTabComplete(e) {
if (e.toState !== 'center-with-animation' &&
e.toState !== 'center-without-animation' &&
e.toState !== 'left-with-animation-with-higher-zindex' &&
e.toState !== 'right-with-animation-with-higher-zindex' &&
e.toState !== 'top-with-animation-with-higher-zindex' &&
e.toState !== 'bottom-with-animation-with-higher-zindex' &&
this.position !== 'center-with-animation' &&
this.position !== 'center-without-animation' &&
this.position !== 'left-with-animation-with-higher-zindex' &&
this.position !== 'right-with-animation-with-higher-zindex' &&
this.position !== 'top-with-animation-with-higher-zindex' &&
this.position !== 'bottom-with-animation-with-higher-zindex') {
this.showTabPanelContent = false;
}
}
}
TabPane.decorators = [
{ type: Component, args: [{
selector: 'TabPane, nzm-tab-pane',
template: "<ng-content *ngIf=\"showTabPanelContent\"></ng-content>",
host: {
'[@translateTabPane]': 'position',
'(@translateTabPane.start)': 'onTranslateTabStarted($event)',
'(@translateTabPane.done)': 'onTranslateTabComplete($event)'
},
animations: [
trigger('translateTabPane', [
state('left-with-animation', style({
transform: 'translate3d(-100%, 0, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('left-with-animation-with-higher-zindex', style({
'z-index': 100,
transform: 'translate3d(-100%, 0, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('left-without-animation', style({ transform: 'translate3d(-100%, 0, 0)' })),
state('right-with-animation', style({
transform: 'translate3d(100%, 0, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('right-with-animation-with-higher-zindex', style({
'z-index': 100,
transform: 'translate3d(100%, 0, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('right-without-animation', style({ transform: 'translate3d(100%, 0, 0)' })),
state('top-with-animation', style({
transform: 'translate3d(0, -100%, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('top-with-animation-with-higher-zindex', style({
'z-index': 100,
transform: 'translate3d(0, -100%, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('top-without-animation', style({ transform: 'translate3d(0, -100%, 0)' })),
state('bottom-with-animation', style({
transform: 'translate3d(0, 100%, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('bottom-with-animation-with-higher-zindex', style({
'z-index': 100,
transform: 'translate3d(0, 100%, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('bottom-without-animation', style({ transform: 'translate3d(0, 100%, 0)' })),
state('center-with-animation', style({
'z-index': 100,
transform: 'translate3d(0, 0, 0)',
transition: '.3s cubic-bezier(0.35, 0, 0.25, 1)'
})),
state('center-without-animation', style({ transform: 'translate3d(0, 0, 0)' }))
])
],
styles: [`:host {touch-action: auto}`]
}] }
];
/** @nocollapse */
TabPane.ctorParameters = () => [];
TabPane.propDecorators = {
title: [{ type: Input }],
paneWrap: [{ type: HostBinding, args: ['class.am-tabs-pane-wrap',] }],
wrapActive: [{ type: HostBinding, args: ['class.am-tabs-pane-wrap-active',] }],
wrapInactive: [{ type: HostBinding, args: ['class.am-tabs-pane-wrap-inactive',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Tabs {
constructor() {
this.prefixCls = 'am-tabs';
this.selectedKey = 0;
this.keyToSelect = 0;
this.paneMoveStyle = '';
this._startTime = 0;
this._startPosition = 0;
this._velocityThreshold = 0.3;
this._tabDirection = 'horizontal';
this._tabBarPosition = 'top';
this.page = 5;
this.swipeable = true;
this.useOnPan = true;
this.animated = true;
this.distanceToChangeTab = 0.3;
this.tabBarActiveTextColor = '';
this.tabBarInactiveTextColor = '';
this.renderTabBar = null;
this.tabBarBackgroundColor = '#FFF';
this.tabBarTextStyle = {};
/**
* should be removed when https://github.com/angular/angular/issues/20810 resolved *
*/
this.tabPanesComponent = null;
this.onChange = new EventEmitter();
this.onTabClick = new EventEmitter();
this.amTabs = true;
this.amTabsTop = true;
this.amTabsLeft = false;
this.amTabsRight = false;
this.amTabsBottom = false;
this.amTabsVertical = false;
this.amTabsHorizontal = true;
}
/**
* @return {?}
*/
get activeTab() {
return this.selectedKey;
}
/**
* @param {?} value
* @return {?}
*/
set activeTab(value) {
this.keyToSelect = value;
}
/**
* @return {?}
*/
get tabBarPosition() {
return this._tabBarPosition;
}
/**
* @param {?} position
* @return {?}
*/
set tabBarPosition(position) {
this._tabBarPosition = position;
switch (position) {
case 'top':
this.amTabsTop = true;
this.amTabsLeft = false;
this.amTabsRight = false;
this.amTabsBottom = false;
break;
case 'left':
this.amTabsTop = false;
this.amTabsLeft = true;
this.amTabsRight = false;
this.amTabsBottom = false;
break;
case 'bottom':
this.amTabsTop = false;
this.amTabsLeft = false;
this.amTabsRight = false;
this.amTabsBottom = true;
break;
case 'right':
this.amTabsTop = false;
this.amTabsLeft = false;
this.amTabsRight = true;
this.amTabsBottom = false;
break;
default:
break;
}
}
/**
* @return {?}
*/
get tabDirection() {
return this._tabDirection;
}
/**
* @param {?} direction
* @return {?}
*/
set tabDirection(direction) {
this._tabDirection = direction;
switch (direction) {
case 'horizontal':
this.amTabsHorizontal = true;
this.amTabsVertical = false;
break;
case 'vertical':
this.amTabsHorizontal = false;
this.amTabsVertical = true;
break;
default:
break;
}
}
/**
* @param {?} index
* @return {?}
*/
clickTab(index) {
if (this.selectedKey !== index) {
this.keyToSelect = index;
this.onTabClick.emit({ index: this.keyToSelect });
}
}
/**
* @return {?}
*/
getCurrentTabPanes() {
return this.tabPanesComponent || this.tabPanes;
}
/**
* @param {?} event
* @return {?}
*/
onTouchStart(event) {
this._startTime = event.timeStamp;
if (this.getCurrentTabPanes() && this.getCurrentTabPanes().length > 0) {
if ('horizontal' === this._tabDirection) {
this._startPosition =
event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientX;
}
else if ('vertical' === this._tabDirection) {
this._startPosition =
event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientY;
}
}
}
/**
* @param {?} event
* @return {?}
*/
onTouchMove(event) {
if (this.getCurrentTabPanes() && this.getCurrentTabPanes().length > 0) {
if ('horizontal' === this._tabDirection) {
/** @type {?} */
const distance = event.changedTouches[0].clientX - this._startPosition;
if (distance < 0 && this.activeTab === this.getCurrentTabPanes().length - 1) {
return;
}
else if (distance > 0 && this.activeTab === 0) {
return;
}
// velocity 小于阈值才认为是pan操作
if (this.getVelocity(distance, event.timeStamp - this._startTime) <= this._velocityThreshold &&
this.useOnPan &&
this.swipeable &&
this.animated) {
this.paneMoveStyle = 'translate3d(' + distance + 'px, 0, 0 )';
}
}
else if ('vertical' === this._tabDirection) {
/** @type {?} */
const distance = event.changedTouches[0].clientY - this._startPosition;
if (distance < 0 && this.activeTab === this.getCurrentTabPanes().length - 1) {
return;
}
else if (distance > 0 && this.activeTab === 0) {
return;
}
if (this.getVelocity(distance, event.timeStamp - this._startTime) <= this._velocityThreshold &&
this.useOnPan &&
this.swipeable &&
this.animated) {
this.paneMoveStyle = 'translate3d(0, ' + distance + 'px, 0 )';
}
}
}
}
/**
* @param {?} event
* @return {?}
*/
onTouchEnd(event) {
if (this.getCurrentTabPanes() && this.getCurrentTabPanes().length > 0) {
if ('horizontal' === this._tabDirection) {
/** @type {?} */
const distance = event.changedTouches[0].clientX - this._startPosition;
/** @type {?} */
const distanceToChangeTabPx = this.tabContent.nativeElement.offsetWidth * this.distanceToChangeTab;
if ((this.getVelocity(distance, event.timeStamp - this._startTime) <= this._velocityThreshold &&
(this.useOnPan && this.swipeable && Math.abs(distance) > distanceToChangeTabPx)) ||
(this.getVelocity(distance, event.timeStamp - this._startTime) > this._velocityThreshold &&
(this.swipeable && Math.abs(distance) > distanceToChangeTabPx / 2))) {
if (distance < 0 && this.activeTab < this.getCurrentTabPanes().length - 1) {
this.keyToSelect++;
}
else if (distance > 0 && this.activeTab > 0) {
this.keyToSelect--;
}
}
this.paneMoveStyle = 'translate3d(0, 0, 0 )';
}
else if ('vertical' === this._tabDirection) {
/** @type {?} */
const distance = event.changedTouches[0].clientY - this._startPosition;
/** @type {?} */
const distanceToChangeTabPx = this.tabContent.nativeElement.offsetHeight * this.distanceToChangeTab;
if ((this.getVelocity(distance, event.timeStamp - this._startTime) <= this._velocityThreshold &&
(this.useOnPan && this.swipeable && Math.abs(distance) > distanceToChangeTabPx)) ||
(this.getVelocity(distance, event.timeStamp - this._startTime) > this._velocityThreshold &&
(this.swipeable && Math.abs(distance) > distanceToChangeTabPx / 2))) {
if (distance < 0 && this.activeTab < this.getCurrentTabPanes().length - 1) {
this.keyToSelect++;
}
else if (distance > 0 && this.activeTab > 0) {
this.keyToSelect--;
}
}
this.paneMoveStyle = 'translate3d(0, 0, 0 )';
}
}
}
/**
* @return {?}
*/
ngAfterContentInit() {
this.selectTabPane(this.keyToSelect);
this.selectedKey = this.keyToSelect;
}
/**
* @return {?}
*/
ngDoCheck() {
if (this.keyToSelect !== this.selectedKey && this.getCurrentTabPanes() && this.getCurrentTabPanes().length > 0) {
this.selectTabPane(this.keyToSelect);
this.selectedKey = this.keyToSelect;
this.onChange.emit({ index: this.selectedKey });
}
}
/**
* @param {?} index
* @return {?}
*/
selectTabPane(index) {
/** @type {?} */
const keyToSelect = Math.min(this.getCurrentTabPanes().length - 1, Math.max(index || 0, 0));
this.getCurrentTabPanes().forEach((tabPane, indexKey) => {
if (keyToSelect < indexKey) {
if (this.animated) {
if ('horizontal' === this._tabDirection) {
if (keyToSelect === indexKey - 1) {
tabPane.position = 'right-with-animation-with-higher-zindex';
}
else {
tabPane.position = 'right-with-animation';
}
}
else if ('vertical' === this._tabDirection) {
if (keyToSelect === indexKey - 1) {
tabPane.position = 'bottom-with-animation-with-higher-zindex';
}
else {
tabPane.position = 'bottom-with-animation';
}
}
}
else {
if ('horizontal' === this._tabDirection) {
tabPane.position = 'right-without-animation';
}
else if ('vertical' === this._tabDirection) {
tabPane.position = 'bottom-without-animation';
}
}
}
else if (keyToSelect > indexKey) {
if (this.animated) {
if ('horizontal' === this._tabDirection) {
if (keyToSelect === indexKey + 1) {
tabPane.position = 'left-with-animation-with-higher-zindex';
}
else {
tabPane.position = 'left-with-animation';
}
}
else if ('vertical' === this._tabDirection) {
if (keyToSelect === indexKey + 1) {
tabPane.position = 'top-with-animation-with-higher-zindex';
}
else {
tabPane.position = 'top-with-animation';
}
}
}
else {
if ('horizontal' === this._tabDirection) {
tabPane.position = 'left-without-animation';
}
else if ('vertical' === this._tabDirection) {
tabPane.position = 'top-without-animation';
}
}
}
else {
if (this.animated) {
tabPane.position = 'center-with-animation';
}
else {
tabPane.position = 'center-without-animation';
}
}
if (keyToSelect !== indexKey) {
tabPane.active = false;
}
else {
tabPane.active = true;
}
});
}
/**
* @param {?} deltaDistance
* @param {?} deltaTime
* @return {?}
*/
getVelocity(deltaDistance, deltaTime) {
return Math.abs(deltaDistance / deltaTime);
}
}
Tabs.decorators = [
{ type: Component, args: [{
selector: 'Tabs, nzm-tabs',
template: "<ng-container>\n <ng-template *ngIf=\"'top' === tabBarPosition || 'left' === tabBarPosition\"\n [ngTemplateOutlet]=\"renderTabBar || renderDefaultTabBar\">\n </ng-template>\n <div #TabContent\n class=\"{{prefixCls}}-content-wrap\"\n [ngClass]=\"{'am-tabs-content-wrap-animated': animated}\"\n [ngStyle]=\"{'transform': paneMoveStyle, 'webkitTransform': paneMoveStyle}\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n >\n <ng-content></ng-content>\n </div>\n <ng-template *ngIf=\"'bottom' === tabBarPosition || 'right' === tabBarPosition\"\n [ngTemplateOutlet]=\"renderTabBar || renderDefaultTabBar\"\n ></ng-template>\n</ng-container>\n\n<ng-template #renderDefaultTabBar>\n <DefaultTabBar #DefaultTabBar\n [page]=\"page\"\n [animated]=\"animated\"\n [activeTab]=\"selectedKey\"\n [tabBarPosition]=\"tabBarPosition\"\n [tabBarBackgroundColor]=\"tabBarBackgroundColor\"\n [tabBarUnderlineStyle]=\"tabBarUnderlineStyle\"\n >\n <div #TabTitle\n *ngFor=\"let tabPane of getCurrentTabPanes(); let i = index\"\n class=\"{{prefixCls}}-default-bar-tab\"\n [ngClass]=\"{'am-tabs-default-bar-tab-active': tabPane.active, 'am-tabs-default-bar-tab-disabled': tabPane.disabled}\"\n [ngStyle]=\"tabBarTextStyle\"\n [style.color]=\"tabPane.active ? tabBarActiveTextColor : tabBarInactiveTextColor\"\n (click)=\"clickTab(i)\"\n >\n <ng-container *ngIf=\"tabPane.isTitleString; else titleTemplate\">\n {{tabPane.title}}\n </ng-container>\n <ng-template #titleTemplate>\n <ng-template [ngTemplateOutlet]=\"tabPane.title\"></ng-template>\n </ng-template>\n </div>\n </DefaultTabBar>\n</ng-template>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
Tabs.ctorParameters = () => [];
Tabs.propDecorators = {
tabPanes: [{ type: ContentChildren, args: [TabPane, { descendants: true },] }],
tabContent: [{ type: ViewChild, args: ['TabContent',] }],
tabsBarSwipe: [{ type: ViewChild, args: ['TabsBarSwipe',] }],
defaultTabBar: [{ type: ViewChild, args: ['DefaultTabBar',] }],
tabsBarContainer: [{ type: ViewChild, args: ['TabsBarContainer',] }],
page: [{ type: Input }],
swipeable: [{ type: Input }],
useOnPan: [{ type: Input }],
animated: [{ type: Input }],
tabBarUnderlineStyle: [{ type: Input }],
distanceToChangeTab: [{ type: Input }],
tabBarActiveTextColor: [{ type: Input }],
tabBarInactiveTextColor: [{ type: Input }],
renderTabBar: [{ type: Input }],
tabBarBackgroundColor: [{ type: Input }],
tabBarTextStyle: [{ type: Input }],
tabPanesComponent: [{ type: Input }],
activeTab: [{ type: Input }],
tabBarPosition: [{ type: Input }],
tabDirection: [{ type: Input }],
onChange: [{ type: Output }],
onTabClick: [{ type: Output }],
amTabs: [{ type: HostBinding, args: ['class.am-tabs',] }],
amTabsTop: [{ type: HostBinding, args: ['class.am-tabs-top',] }],
amTabsLeft: [{ type: HostBinding, args: ['class.am-tabs-left',] }],
amTabsRight: [{ type: HostBinding, args: ['class.am-tabs-right',] }],
amTabsBottom: [{ type: HostBinding, args: ['class.am-tabs-bottom',] }],
amTabsVertical: [{ type: HostBinding, args: ['class.am-tabs-vertical',] }],
amTabsHorizontal: [{ type: HostBinding, args: ['class.am-tabs-horizontal',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DefaultTabBarComponent {
/**
* @param {?} _renderer
*/
constructor(_renderer) {
this._renderer = _renderer;
this.prefixCls = 'am-tabs-default-bar';
this.inkBarStyle = {};
this.tabsBarStyle = {};
this.showPrev = false;
this.showNext = false;
this.selectedKey = 0;
this.inkBarOffSet = 0;
this.inkBarLength = 0;
this.tabBarNavSwipedPosition = 0;
this.tabBarNavSwipingPosition = 0;
this._startPosition = 0;
this.page = 5;
this.animated = true;
this.tabBarBackgroundColor = '#FFF';
this.tabBarPosition = 'top';
this.tabBarWrap = true;
this.getTabSize = (page, tabLength) => 100 / Math.min(page, tabLength);
}
/**
* @return {?}
*/
get activeTab() {
return this.selectedKey;
}
/**
* @param {?} index
* @return {?}
*/
set activeTab(index) {
if (index !== this.selectedKey) {
this.selectedKey = index;
if (this.tabTitles && this.tabTitles.length > 0) {
this.setTabBarStyleCenter();
this.setInkBarStatus(this.selectedKey);
}
}
}
/**
* @param {?} event
* @return {?}
*/
onTouchStart(event) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this._startPosition = event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientX;
}
else {
this._startPosition = event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientY;
}
}
/**
* @param {?} event
* @return {?}
*/
onTouchMove(event) {
event.preventDefault();
event.stopPropagation();
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.setTabBarNavSwipingPosition(event.changedTouches[0].clientX - this._startPosition, this.tabTitles.first.nativeElement.offsetWidth, this.tabsBarSwipe.nativeElement.offsetWidth);
this.tabsBarStyle = {
transition: '0ms',
transform: 'translate3d(' + this.tabBarNavSwipingPosition + 'px, 0px, 0px)',
webkitTransform: 'translate3d(' + this.tabBarNavSwipingPosition + 'px, 0px, 0px)'
};
}
else {
this.setTabBarNavSwipingPosition(event.changedTouches[0].clientY - this._startPosition, this.tabTitles.first.nativeElement.offsetHeight, this.tabsBarSwipe.nativeElement.offsetHeight);
this.tabsBarStyle = {
transition: '0ms',
transform: 'translate3d(0, ' + this.tabBarNavSwipingPosition + 'px, 0px)',
webkitTransform: 'translate3d(0, ' + this.tabBarNavSwipingPosition + 'px, 0px)'
};
}
}
/**
* @return {?}
*/
onTouchEnd() {
this.tabBarNavSwipedPosition = this.tabBarNavSwipingPosition;
}
/**
* @return {?}
*/
onContentChange() {
this.setTabsStyle();
this.setInkBarStatus(this.activeTab);
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.setTabsStyle();
if (this.selectedKey > 0) {
this.setTabBarStyleCenter();
}
this.setInkBarStatus(this.selectedKey);
}
/**
* @return {?}
*/
setTabsStyle() {
if (this.tabTitles && this.tabTitles.length > 0) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.tabTitles.forEach((tabTitle) => {
this._renderer.setStyle(tabTitle.nativeElement, 'width', this.getTabSize(this.page, this.tabTitles.length) + '%');
});
}
else {
this.tabTitles.forEach((tabTitle) => {
this._renderer.setStyle(tabTitle.nativeElement, 'height', this.getTabSize(this.page, this.tabTitles.length) + '%');
});
}
}
}
/**
* @return {?}
*/
setTabBarStyleCenter() {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.setTabBarNavSwipedPosition(this.tabTitles.first.nativeElement.offsetWidth, this.tabsBarSwipe.nativeElement.offsetWidth);
this.tabsBarStyle = {
transform: 'translate3d(' + this.tabBarNavSwipedPosition + 'px, 0px, 0px)',
webkitTransform: 'translate3d(' + this.tabBarNavSwipedPosition + ', 0px, 0px)'
};
}
else {
this.setTabBarNavSwipedPosition(this.tabTitles.first.nativeElement.offsetHeight, this.tabsBarSwipe.nativeElement.offsetHeight);
this.tabsBarStyle = {
transform: 'translate3d(0, ' + this.tabBarNavSwipedPosition + 'px, 0px)',
webkitTransform: 'translate3d(0, ' + this.tabBarNavSwipedPosition + 'px, 0px)'
};
}
}
/**
* @param {?} key
* @return {?}
*/
setInkBarStatus(key) {
if (this.tabTitles && this.tabTitles.length > 0) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.inkBarOffSet = this.tabTitles.toArray()[key].nativeElement.offsetLeft;
this.inkBarLength = this.tabTitles.toArray()[key].nativeElement.style.width;
this.inkBarStyle = {
width: this.inkBarLength,
left: (this.selectedKey * 100) / this.page + '%'
};
Object.assign(this.inkBarStyle, this.tabBarUnderlineStyle);
}
else {
this.inkBarOffSet = this.tabTitles.toArray()[key].nativeElement.offsetTop;
this.inkBarLength = this.tabTitles.toArray()[key].nativeElement.style.height;
this.inkBarStyle = {
height: this.inkBarLength,
top: (this.selectedKey * 100) / this.page + '%'
};
Object.assign(this.inkBarStyle, this.tabBarUnderlineStyle);
}
}
}
/**
* @param {?} swipingDistance
* @param {?} swipingItemLength
* @param {?} viewportLength
* @return {?}
*/
setTabBarNavSwipingPosition(swipingDistance, swipingItemLength, viewportLength) {
if (this.tabBarNavSwipedPosition + swipingDistance > 0) {
this.tabBarNavSwipingPosition = 0;
}
else if (this.tabBarNavSwipedPosition + swipingDistance <
viewportLength - swipingItemLength * this.tabTitles.length) {
this.tabBarNavSwipingPosition = viewportLength - swipingItemLength * this.tabTitles.length;
this.showNext = false;
}
else {
this.tabBarNavSwipingPosition = this.tabBarNavSwipedPosition + swipingDistance;
this.showNext = true;
}
if (this.tabBarNavSwipingPosition < 0) {
this.showPrev = true;
}
else {
this.showPrev = false;
}
}
/**
* @param {?} swipingItemLength
* @param {?} viewportLength
* @return {?}
*/
setTabBarNavSwipedPosition(swipingItemLength, viewportLength) {
if (this.selectedKey >= Math.floor(this.page / 2) &&
this.selectedKey <= this.tabTitles.length - 1 - Math.floor(this.page / 2)) {
this.tabBarNavSwipedPosition = viewportLength / 2 - swipingItemLength * (this.selectedKey + 1 / 2);
}
else if (this.selectedKey < Math.floor(this.page / 2)) {
this.tabBarNavSwipedPosition = 0;
}
else {
this.tabBarNavSwipedPosition = viewportLength - swipingItemLength * this.tabTitles.length;
}
if (this.tabBarNavSwipedPosition < 0) {
this.showPrev = true;
}
else {
this.showPrev = false;
}
if (this.tabBarNavSwipedPosition + swipingItemLength * this.tabTitles.length - viewportLength > 0) {
this.showNext = true;
}
else {
this.showNext = false;
}
}
}
DefaultTabBarComponent.decorators = [
{ type: Component, args: [{
selector: 'DefaultTabBar, nzm-default-tab-bar',
template: "<div class=\"{{prefixCls}} {{prefixCls}}-{{tabBarPosition}}\"\n [ngClass]=\"{'am-tabs-default-bar-animated' : animated}\"\n [ngStyle]=\"{backgroundColor: tabBarBackgroundColor || '#FFF'}\"\n>\n <div *ngIf=\"showPrev\" class=\"{{prefixCls}}-prevpage\"></div>\n <div #TabsBarSwipe\n class=\"{{prefixCls}}-content\"\n [ngStyle]=\"tabsBarStyle\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\"\n (cdkObserveContent)=\"onContentChange()\"\n >\n <ng-content></ng-content>\n <div class=\"{{prefixCls}}-underline\" [ngStyle]=\"inkBarStyle\">\n </div>\n </div>\n <div *ngIf=\"showNext\" class=\"{{prefixCls}}-nextpage\"></div>\n</div>"
}] }
];
/** @nocollapse */
DefaultTabBarComponent.ctorParameters = () => [
{ type: Renderer2 }
];
DefaultTabBarComponent.propDecorators = {
tabTitles: [{ type: ContentChildren, args: ['TabTitle',] }],
tabsBarSwipe: [{ type: ViewChild, args: ['TabsBarSwipe',] }],
page: [{ type: Input }],
animated: [{ type: Input }],
tabBarUnderlineStyle: [{ type: Input }],
tabBarBackgroundColor: [{ type: Input }],
tabBarPosition: [{ type: Input }],
activeTab: [{ type: Input }],
tabBarWrap: [{ type: HostBinding, args: ['class.am-tabs-tab-bar-wrap',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TabsModule {
}
TabsModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, ObserversModule],
declarations: [TabPane, Tabs, DefaultTabBarComponent],
exports: [TabPane, Tabs, DefaultTabBarComponent],
providers: []
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TabBarTab {
/**
* @param {?} tabPane
*/
constructor(tabPane) {
this.tabPane = tabPane;
this.prefixCls = 'am-tab-bar-tab';
this.selected = false;
this.tintColor = '#108ee9';
this.unselectedTintColor = '#888';
this.key = '';
this.title = '';
this.dot = false;
this.badge = null;
this.icon = null;
this.selectedIcon = null;
this.onPress = new EventEmitter();
this.tabBarTab = true;
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
return value instanceof TemplateRef;
}
/**
* @return {?}
*/
ngAfterContentInit() {
if (this.tabPane.active) {
this.selected = true;
}
else {
this.selected = false;
}
this.tintColor = this.tabPane.tintColor;
this.unselectedTintColor = this.tabPane.unselectedTintColor;
}
}
TabBarTab.decorators = [
{ type: Component, args: [{
selector: 'TabBarTab, nzm-tab-bar-tab',
template: "<div class=\"{{prefixCls}}-icon\" [style.color]=\"selected ? tintColor : unselectedTintColor\">\n <Badge *ngIf=\"badge\" className=\"{{prefixCls}}-badge tab-badge\" [text]=\"badge\">\n <ng-container *ngIf=\"isTemplateRef(selected ? selectedIcon : icon); then domTemplate; else imgTemplate\">\n </ng-container>\n </Badge>\n <Badge className=\"{{prefixCls}}-badge tab-badge\" [dot]=\"dot\" *ngIf=\"dot\">\n <ng-container *ngIf=\"isTemplateRef(selected ? selectedIcon : icon); then domTemplate; else imgTemplate\">\n </ng-container>\n </Badge>\n <ng-container *ngIf=\"!badge && !dot\" >\n <ng-container *ngIf=\"isTemplateRef(selected ? selectedIcon : icon); then domTemplate; else imgTemplate\">\n </ng-container>\n </ng-container>\n</div>\n<p class=\"{{prefixCls}}-title\" [style.color]=\"selected ? tintColor : unselectedTintColor\">\n {{title}}\n</p>\n\n<ng-template #domTemplate>\n <ng-template [ngTemplateOutlet]=\"(selected ? selectedIcon : icon)\"></ng-template>\n</ng-template>\n<ng-template #imgTemplate >\n <img src=\"{{selected ? selectedIcon : icon}}\" alt=\"{{title}}\">\n</ng-template>"
}] }
];
/** @nocollapse */
TabBarTab.ctorParameters = () => [
{ type: TabPane, decorators: [{ type: Optional }] }
];
TabBarTab.propDecorators = {
key: [{ type: Input }],
title: [{ type: Input }],
dot: [{ type: Input }],
badge: [{ type: Input }],
icon: [{ type: Input }],
selectedIcon: [{ type: Input }],
onPress: [{ type: Output }],
tabBarTab: [{ type: HostBinding, args: ['class.am-tab-bar-tab',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TabBar {
constructor() {
this.prefixCls = 'am-tab-bar';
this._tintColor = '#108ee9';
this._unselectedTintColor = '#888';
this.hidden = false;
this.activeTab = 0;
this.barTintColor = 'white';
this.tabBarPosition = 'bottom';
this.tabBar = true;
}
/**
* @return {?}
*/
get tintColor() {
return this._tintColor;
}
/**
* @param {?} color
* @return {?}
*/
set tintColor(color) {
this._tintColor = color;
if (this.tabBarTabs && this.tabBarTabs.length > 0) {
this.tabBarTabs.forEach((tabBarTab) => {
tabBarTab.tintColor = this._tintColor;
});
}
}
/**
* @return {?}
*/
get unselectedTintColor() {
return this._unselectedTintColor;
}
/**
* @param {?} color
* @return {?}
*/
set unselectedTintColor(color) {
this._unselectedTintColor = color;
if (this.tabBarTabs && this.tabBarTabs.length > 0) {
this.tabBarTabs.forEach((tabBarTab) => {
tabBarTab.unselectedTintColor = this._unselectedTintColor;
});
}
}
/**
* @param {?} index
* @return {?}
*/
selectTabPane(index) {
this.tabPanes.forEach((tabPane, indexKey) => {
if (index < indexKey) {
tabPane.position = 'right-without-animation';
}
else if (index > indexKey) {
tabPane.position = 'left-without-animation';
}
else {
tabPane.position = 'center-without-animation';
}
if (index !== indexKey) {
tabPane.active = false;
}
else {
tabPane.active = true;
}
});
if (this.tabBarTabs && this.tabBarTabs.length > 0) {
this.tabBarTabs.forEach((tabBarTab) => {
tabBarTab.selected = false;
});
this.tabBarTabs.toArray()[index].selected = true;
this.tabBarTabs.toArray()[index].onPress.emit({
title: this.tabBarTabs.toArray()[index].title,
key: this.tabBarTabs.toArray()[index].key
});
}
}
/**
* @return {?}
*/
ngAfterContentInit() {
this.selectTabPane(this.activeTab);
this.tabPanes.forEach((tabPane) => {
tabPane.tintColor = this.tintColor;
tabPane.unselectedTintColor = this.unselectedTintColor;
});
}
}
TabBar.decorators = [
{ type: Component, args: [{
selector: 'TabBar, nzm-tab-bar',
template: "<Tabs [activeTab]=\"activeTab\"\n [swipeable]=\"false\"\n [useOnPan]=\"false\"\n [animated]=\"false\"\n [tabDirection]=\"'horizontal'\"\n [tabBarPosition]='tabBarPosition'\n [renderTabBar]=\"TabBarBar\"\n [tabPanesComponent]=\"tabPanes\"\n>\n <ng-content></ng-content>\n</Tabs>\n\n<ng-template #TabBarBar>\n <div class=\"am-tabs-tab-bar-wrap\">\n <div class=\"{{prefixCls}}-bar\"\n [ngClass]=\"{'am-tab-bar-bar-hidden-top': 'top' === tabBarPosition && hidden, 'am-tab-bar-bar-hidden-bottom': 'bottom' === tabBarPosition && hidden}\"\n [style.background-color]=\"barTintColor\">\n <div *ngFor=\"let tabPane of tabPanes; let i = index;\" (click)=\"selectTabPane(i)\">\n <ng-container [ngTemplateOutlet]=\"tabPane.title\"></ng-container>\n </div>\n </div>\n </div>\n</ng-template>"
}] }
];
/** @nocollapse */
TabBar.ctorParameters = () => [];
TabBar.propDecorators = {
tabPanes: [{ type: ContentChildren, args: [TabPane, { descendants: true },] }],
tabBarTabs: [{ type: ContentChildren, args: [TabBarTab, { descendants: true },] }],
hidden: [{ type: Input }],
activeTab: [{ type: Input }],
barTintColor: [{ type: Input }],
tabBarPosition: [{ type: Input }],
tintColor: [{ type: Input }],
unselectedTintColor: [{ type: Input }],
tabBar: [{ type: HostBinding, args: ['class.am-tab-bar',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TabBarModule {
}
TabBarModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, TabsModule, BadgeModule],
exports: [TabBar, TabBarTab],
declarations: [TabBar, TabBarTab],
providers: []
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PickerOptions {
constructor() {
this.data = [];
this.value = [];
this.cols = 3;
this.mask = true;
this.title = '';
this.okText = '确定';
this.dismissText = '取消';
this.disabled = false;
this.cascade = true;
this.appendToBody = false;
this.onOk = new EventEmitter();
this.onDismiss = new EventEmitter();
this.onPickerChange = new EventEmitter();
this.indicatorStyle = {};
}
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @return {?}
*/
function getData() {
return [
{
label: '北京',
children: [
{
label: '北京市',
children: [
'东城区',
'西城区',
'崇文区',
'宣武区',
'朝阳区',
'丰台区',
'石景山区',
'海淀区',
'门头沟区',
'房山区',
'通州区',
'顺义区',
'昌平区',
'大兴区',
'平谷区',
'怀柔区',
'密云县',
'延庆县'
]
}
]
},
{
label: '天津市',
children: [
{
label: '天津市',
children: [
'和平区',
'河东区',
'河西区',
'南开区',
'河北区',
'红桥区',
'塘沽区',
'汉沽区',
'大港区',
'东丽区',
'西青区',
'津南区',
'北辰区',
'武清区',
'宝坻区',
'宁河县',
'静海县',
'蓟 县'
]
}
]
},
{
label: '河北省',
children: [
{
label: '石家庄市',
children: [
'长安区',
'桥东区',
'桥西区',
'新华区',
'郊 区',
'井陉矿区',
'井陉县',
'正定县',
'栾城县',
'行唐县',
'灵寿县',
'高邑县',
'深泽县',
'赞皇县',
'无极县',
'平山县',
'元氏县',
'赵 县',
'辛集市',
'藁',
'晋州市',
'新乐市',
'鹿泉市'
]
},
{
label: '唐山市',
children: [
'路南区',
'路北区',
'古冶区',
'开平区',
'新 区',
'丰润县',
'滦 县',
'滦南县',
'乐亭县',
'迁西县',
'玉田县',
'唐海县',
'遵化市',
'丰南市',
'迁安市'
]
},
{
label: '秦皇岛市',
children: ['海港区', '山海关区', '北戴河区', '青龙满族自治县', '昌黎县', '抚宁县', '卢龙县']
},
{
label: '邯郸市',
children: [
'邯山区',
'丛台区',
'复兴区',
'峰峰矿区',
'邯郸县',
'临漳县',
'成安县',
'大名县',
'涉 县',
'磁 县',
'肥乡县',
'永年县',
'邱 县',
'鸡泽县',
'广平县',
'馆陶县',
'魏 县',
'曲周县',
'武安市'
]
},
{
label: '邢台市',
children: [
'桥东区',
'桥西区',
'邢台县',
'临城县',
'内丘县',
'柏乡县',
'隆尧县',
'任 县',
'南和县',
'宁晋县',
'巨鹿县',
'新河县',
'广宗县',
'平乡县',
'威 县',
'清河县',
'临西县',
'南宫市',
'沙河市'
]
},
{
label: '保定市',
children: [
'新市区',
'北市区',
'南市区',
'满城县',
'清苑县',
'涞水县',
'阜平县',
'徐水县',
'定兴县',
'唐 县',
'高阳县',
'容城县',
'涞源县',
'望都县',
'安新县',
'易 县',
'曲阳县',
'蠡 县',
'顺平县',
'博野',
'雄县',
'涿州市',
'定州市',
'安国市',
'高碑店市'
]
},
{
label: '张家口',
children: [
'桥东区',
'桥西区',
'宣化区',
'下花园区',
'宣化县',
'张北县',
'康保县',
'沽源县',
'尚义县',
'蔚 县',
'阳原县',
'怀安县',
'万全县',
'怀来县',
'涿鹿县',
'赤城县',
'崇礼县'
]
},
{
label: '承德市',
children: [
'双桥区',
'双滦区',
'鹰手营子矿区',
'承德县',
'兴隆县',
'平泉县',
'滦平县',
'隆化县',
'丰宁满族自治县',
'宽城满族自治县',
'围场满族蒙古族自治县'
]
},
{
label: '沧州市',
children: [
'新华区',
'运河区',
'沧 县',
'青 县',
'东光县',
'海兴县',
'盐山县',
'肃宁县',
'南皮县',
'吴桥县',
'献 县',
'孟村回族自治县',
'泊头市',
'任丘市',
'黄骅市',
'河间市'
]
},
{
label: '廊坊市',
children: ['安次区', '固安县', '永清县', '香河县', '大城县', '文安县', '大厂回族自治县', '霸州市', '三河市']
},
{
label: '衡水市',
children: [
'桃城区',
'枣强县',
'武邑县',
'武强县',
'饶阳县',
'安平县',
'故城县',
'景 县',
'阜城县',
'冀州市',
'深州市'
]
}
]
},
{
label: '山西省',
children: [
{
label: '太原市',
children: [
'小店区',
'迎泽区',
'杏花岭区',
'尖草坪区',
'万柏林区',
'晋源区',
'清徐县',
'阳曲县',
'娄烦县',
'古交市'
]
},
{
label: '大同市',
children: [
'城 区',
'矿 区',
'南郊区',
'新荣区',
'阳高县',
'天镇县',
'广灵县',
'灵丘县',
'浑源县',
'左云县',
'大同县'
]
},
{
label: '阳泉市',
children: ['城 区', '矿 区', '郊 区', '平定县', '盂 县']
},
{
label: '长治市',
children: [
'城 区',
'郊 区',
'长治县',
'襄垣县',
'屯留县',
'平顺县',
'黎城县',
'壶关县',
'长子县',
'武乡县',
'沁 县',
'沁源县',
'潞城市'
]
},
{
label: '晋城市',
children: ['城 区', '沁水县', '阳城县', '陵川县', '泽州县', '高平市']
},
{
label: '朔州市',
children: ['朔城区', '平鲁区', '山阴县', '应 县', '右玉县', '怀仁县']
},
{
label: '忻州市',
children: [
'忻府区',
'原平市',
'定襄县',
'五台县',
'代 县',
'繁峙县',
'宁武县',
'静乐县',
'神池县',
'五寨县',
'岢岚县',
'河曲县',
'保德县',
'偏关县'
]
},
{
label: '吕梁市',
children: [
'离石区',
'孝义市',
'汾阳市',
'文水县',
'交城县',
'兴 县',
'临 县',
'柳林县',
'石楼县',
'岚 县',
'方山县',
'中阳县',
'交口县'
]
},
{
label: '晋中市',
children: [
'榆次市',
'介休市',
'榆社县',
'左权县',
'和顺县',
'昔阳县',
'寿阳县',
'太谷县',
'祁 县',
'平遥县',
'灵石县'
]
},
{
label: '临汾市',
children: [
'临汾市',
'侯马市',
'霍州市',
'曲沃县',
'翼城县',
'襄汾县',
'洪洞县',
'古 县',
'安泽县',
'浮山县',
'吉 县',
'乡宁县',
'蒲 县',
'大宁县',
'永和县',
'隰 县',
'汾西县'
]
},
{
label: '运城市',
children: [
'运城市',
'永济市',
'河津市',
'芮城县',
'临猗县',
'万荣县',
'新绛县',
'稷山县',
'闻喜县',
'夏 县',
'绛 县',
'平陆县',
'垣曲县'
]
}
]
},
{
label: '内蒙古',
children: [
{
label: '呼和浩特市',
children: [
'新城区',
'回民区',
'玉泉区',
'郊 区',
'土默特左旗',
'托克托县',
'和林格尔县',
'清水河县',
'武川县'
]
},
{
label: '包头市',
children: [
'东河区',
'昆都伦区',
'青山区',
'石拐矿区',
'白云矿区',
'郊 区',
'土默特右旗',
'固阳县',
'达尔罕茂明安联合旗'
]
},
{
label: '乌海市',
children: ['海勃湾区', '海南区', '乌达区']
},
{
label: '赤峰市',
children: [
'红山区',
'元宝山区',
'松山区',
'阿鲁科尔沁旗',
'巴林左旗',
'巴林右旗',
'林西县',
'克什克腾旗',
'翁牛特旗',
'喀喇沁旗',
'宁城县',
'敖汉旗'
]
},
{
label: '呼伦贝尔市',
children: [
'海拉尔市',
'满洲里市',
'扎兰屯市',
'牙克石市',
'根河市',
'额尔古纳市',
'阿荣旗',
'莫力达瓦达斡尔族自治旗',
'鄂伦春自治旗',
'鄂温克族自治旗',
'新巴尔虎右旗',
'新巴尔虎左旗',
'陈巴尔虎旗'
]
},
{
label: '兴安盟',
children: ['乌兰浩特市', '阿尔山市', '科尔沁右翼前旗', '科尔沁右翼中旗', '扎赉特旗', '突泉县']
},
{
label: '通辽市',
children: [
'科尔沁区',
'霍林郭勒市',
'科尔沁左翼中旗',
'科尔沁左翼后旗',
'开鲁县',
'库伦旗',
'奈曼旗',
'扎鲁特旗'
]
},
{
label: '锡林郭勒盟',
children: [
'二连浩特市',
'锡林浩特市',
'阿巴嘎旗',
'苏尼特左旗',
'苏尼特右旗',
'东乌珠穆沁旗',
'西乌珠穆沁旗',
'太仆寺旗',
'镶黄旗',
'正镶白旗',
'正蓝旗',
'多伦县'
]
},
{
label: '乌兰察布盟',
children: [
'集宁市',
'丰镇市',
'卓资县',
'化德县',
'商都县',
'兴和县',
'凉城县',
'察哈尔右翼前旗',
'察哈尔右翼中旗',
'察哈尔右翼后旗',
'四子王旗'
]
},
{
label: '伊克昭盟',
children: ['东胜市', '达拉特旗', '准格尔旗', '鄂托克前旗', '鄂托克旗', '杭锦旗', '乌审旗', '伊金霍洛旗']
},
{
label: '巴彦淖尔盟',
children: ['临河市', '五原县', '磴口县', '乌拉特前旗', '乌拉特中旗', '乌拉特后旗', '杭锦后旗']
},
{
label: '阿拉善盟',
children: ['阿拉善左旗', '阿拉善右旗', '额济纳旗']
}
]
},
{
label: '辽宁省',
children: [
{
label: '沈阳市',
children: [
'沈河区',
'皇姑区',
'和平区',
'大东区',
'铁西区',
'苏家屯区',
'东陵区',
'于洪区',
'新民市',
'法库县',
'辽中县',
'康平县',
'新城子区',
'其他'
]
},
{
label: '大连市',
children: [
'西岗区',
'中山区',
'沙河口区',
'甘井子区',
'旅顺口区',
'金州区',
'瓦房店市',
'普兰店市',
'庄河市',
'长海县',
'其他'
]
},
{
label: '鞍山市',
children: ['铁东区', '铁西区', '立山区', '千山区', '海城市', '台安县', '岫岩满族自治县', '其他']
},
{
label: '抚顺市',
children: ['顺城区', '新抚区', '东洲区', '望花区', '抚顺县', '清原满族自治县', '新宾满族自治县', '其他']
},
{
label: '本溪市',
children: ['平山区', '明山区', '溪湖区', '南芬区', '本溪满族自治县', '桓仁满族自治县', '其他']
},
{
label: '丹东市',
children: ['振兴区', '元宝区', '振安区', '东港市', '凤城市', '宽甸满族自治县', '其他']
},
{
label: '锦州市',
children: ['太和区', '古塔区', '凌河区', '凌海市', '黑山县', '义县', '北宁市', '其他']
},
{
label: '营口市',
children: ['站前区', '西市区', '鲅鱼圈区', '老边区', '大石桥市', '盖州市', '其他']
},
{
label: '阜新市',
children: ['海州区', '新邱区', '太平区', '清河门区', '细河区', '彰武县', '阜新蒙古族自治县', '其他']
},
{
label: '辽阳市',
children: ['白塔区', '文圣区', '宏伟区', '太子河区', '弓长岭区', '灯塔市', '辽阳县', '其他']
},
{
label: '盘锦',
children: ['双台子区', '兴隆台区', '盘山县', '大洼县', '其他']
},
{
label: '铁岭市',
children: ['银州区', '清河区', '调兵山市', '开原市', '铁岭县', '昌图县', '西丰县', '其他']
},
{
label: '朝阳市',
children: ['双塔区', '龙城区', '凌源市', '北票市', '朝阳县', '建平县', '喀喇沁左翼蒙古族自治县', '其他']
},
{
label: '葫芦岛市',
children: ['龙港区', '南票区', '连山区', '兴城市', '绥中县', '建昌县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '吉林省',
children: [
{
label: '长春市',
children: [
'朝阳区',
'宽城区',
'二道区',
'南关区',
'绿园区',
'双阳区',
'九台市',
'榆树市',
'德惠市',
'农安县',
'其他'
]
},
{
label: '吉林市',
children: ['船营区', '昌邑区', '龙潭区', '丰满区', '舒兰市', '桦甸市', '蛟河市', '磐石市', '永吉县', '其他']
},
{
label: '四平',
children: ['铁西区', '铁东区', '公主岭市', '双辽市', '梨树县', '伊通满族自治县', '其他']
},
{
label: '辽源市',
children: ['龙山区', '西安区', '东辽县', '东丰县', '其他']
},
{
label: '通化市',
children: ['东昌区', '二道江区', '梅河口市', '集安市', '通化县', '辉南县', '柳河县', '其他']
},
{
label: '白山市',
children: ['八道江区', '江源区', '临江市', '靖宇县', '抚松县', '长白朝鲜族自治县', '其他']
},
{
label: '松原市',
children: ['宁江区', '乾安县', '长岭县', '扶余县', '前郭尔罗斯蒙古族自治县', '其他']
},
{
label: '白城市',
children: ['洮北区', '大安市', '洮南市', '镇赉县', '通榆县', '其他']
},
{
label: '延边朝鲜族自治州',
children: ['延吉市', '图们市', '敦化市', '龙井市', '珲春市', '和龙市', '安图县', '汪清县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '黑龙江省',
children: [
{
label: '哈尔滨市',
children: [
'松北区',
'道里区',
'南岗区',
'平房区',
'香坊区',
'道外区',
'呼兰区',
'阿城区',
'双城市',
'尚志市',
'五常市',
'宾县',
'方正县',
'通河县',
'巴彦县',
'延寿县',
'木兰县',
'依兰县',
'其他'
]
},
{
label: '齐齐哈尔市',
children: [
'龙沙区',
'昂昂溪区',
'铁锋区',
'建华区',
'富拉尔基区',
'碾子山区',
'梅里斯达斡尔族区',
'讷河市',
'富裕县',
'拜泉县',
'甘南县',
'依安县',
'克山县',
'泰来县',
'克东县',
'龙江县',
'其他'
]
},
{
label: '鹤岗市',
children: ['兴山区', '工农区', '南山区', '兴安区', '向阳区', '东山区', '萝北县', '绥滨县', '其他']
},
{
label: '双鸭山',
children: ['尖山区', '岭东区', '四方台区', '宝山区', '集贤县', '宝清县', '友谊县', '饶河县', '其他']
},
{
label: '鸡西市',
children: ['鸡冠区', '恒山区', '城子河区', '滴道区', '梨树区', '麻山区', '密山市', '虎林市', '鸡东县', '其他']
},
{
label: '大庆市',
children: [
'萨尔图区',
'红岗区',
'龙凤区',
'让胡路区',
'大同区',
'林甸县',
'肇州县',
'肇源县',
'杜尔伯特蒙古族自治县',
'其他'
]
},
{
label: '伊春市',
children: [
'伊春区',
'带岭区',
'南岔区',
'金山屯区',
'西林区',
'美溪区',
'乌马河区',
'翠峦区',
'友好区',
'上甘岭区',
'五营区',
'红星区',
'新青区',
'汤旺河区',
'乌伊岭区',
'铁力市',
'嘉荫县',
'其他'
]
},
{
label: '牡丹江市',
children: [
'爱民区',
'东安区',
'阳明区',
'西安区',
'绥芬河市',
'宁安市',
'海林市',
'穆棱市',
'林口县',
'东宁县',
'其他'
]
},
{
label: '佳木斯市',
children: [
'向阳区',
'前进区',
'东风区',
'郊区',
'同江市',
'富锦市',
'桦川县',
'抚远县',
'桦南县',
'汤原县',
'其他'
]
},
{
label: '七台河市',
children: ['桃山区', '新兴区', '茄子河区', '勃利县', '其他']
},
{
label: '黑河市',
children: ['爱辉区', '北安市', '五大连池市', '逊克县', '嫩江县', '孙吴县', '其他']
},
{
label: '绥化市',
children: [
'北林区',
'安达市',
'肇东市',
'海伦市',
'绥棱县',
'兰西县',
'明水县',
'青冈县',
'庆安县',
'望奎县',
'其他'
]
},
{
label: '大兴安岭地区',
children: ['呼玛县', '塔河县', '漠河县', '大兴安岭辖区', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '上海',
children: [
{
label: '上海市',
children: [
'黄浦区',
'卢湾区',
'徐汇区',
'长宁区',
'静安区',
'普陀区',
'闸北区',
'虹口区',
'杨浦区',
'宝山区',
'闵行区',
'嘉定区',
'松江区',
'金山区',
'青浦区',
'南汇区',
'奉贤区',
'浦东新区',
'崇明县',
'其他'
]
}
]
},
{
label: '江苏省',
children: [
{
label: '南京市',
children: [
'玄武区',
'白下区',
'秦淮区',
'建邺区',
'鼓楼区',
'下关区',
'栖霞区',
'雨花台区',
'浦口区',
'江宁区',
'六合区',
'溧水县',
'高淳县',
'其他'
]
},
{
label: '苏州市',
children: [
'金阊区',
'平江区',
'沧浪区',
'虎丘区',
'吴中区',
'相城区',
'常熟市',
'张家港市',
'昆山市',
'吴江市',
'太仓市',
'其他'
]
},
{
label: '无锡市',
children: ['崇安区', '南长区', '北塘区', '滨湖区', '锡山区', '惠山区', '江阴市', '宜兴市', '其他']
},
{
label: '常州市',
children: ['钟楼区', '天宁区', '戚墅堰区', '新北区', '武进区', '金坛市', '溧阳市', '其他']
},
{
label: '镇江市',
children: ['京口区', '润州区', '丹徒区', '丹阳市', '扬中市', '句容市', '其他']
},
{
label: '南通市',
children: ['崇川区', '港闸区', '通州市', '如皋市', '海门市', '启东市', '海安县', '如东县', '其他']
},
{
label: '泰州市',
children: ['海陵区', '高港区', '姜堰市', '泰兴市', '靖江市', '兴化市', '其他']
},
{
label: '扬州市',
children: ['广陵区', '维扬区', '邗江区', '江都市', '仪征市', '高邮市', '宝应县', '其他']
},
{
label: '盐城市',
children: ['亭湖区', '盐都区', '大丰市', '东台市', '建湖县', '射阳县', '阜宁县', '滨海县', '响水县', '其他']
},
{
label: '连云港市',
children: ['新浦区', '海州区', '连云区', '东海县', '灌云县', '赣榆县', '灌南县', '其他']
},
{
label: '徐州市',
children: [
'云龙区',
'鼓楼区',
'九里区',
'泉山区',
'贾汪区',
'邳州市',
'新沂市',
'铜山县',
'睢宁县',
'沛县',
'丰县',
'其他'
]
},
{
label: '淮安市',
children: ['清河区', '清浦区', '楚州区', '淮阴区', '涟水县', '洪泽县', '金湖县', '盱眙县', '其他']
},
{
label: '宿迁市',
children: ['宿城区', '宿豫区', '沭阳县', '泗阳县', '泗洪县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '浙江省',
children: [
{
label: '杭州市',
children: [
'拱墅区',
'西湖区',
'上城区',
'下城区',
'江干区',
'滨江区',
'余杭区',
'萧山区',
'建德市',
'富阳市',
'临安市',
'桐庐县',
'淳安县',
'其他'
]
},
{
label: '宁波市',
children: [
'海曙区',
'江东区',
'江北区',
'镇海区',
'北仑区',
'鄞州区',
'余姚市',
'慈溪市',
'奉化市',
'宁海县',
'象山县',
'其他'
]
},
{
label: '温州市',
children: [
'鹿城区',
'龙湾区',
'瓯海区',
'瑞安市',
'乐清市',
'永嘉县',
'洞头县',
'平阳县',
'苍南县',
'文成县',
'泰顺县',
'其他'
]
},
{
label: '嘉兴市',
children: ['秀城区', '秀洲区', '海宁市', '平湖市', '桐乡市', '嘉善县', '海盐县', '其他']
},
{
label: '湖州市',
children: ['吴兴区', '南浔区', '长兴县', '德清县', '安吉县', '其他']
},
{
label: '绍兴市',
children: ['越城区', '诸暨市', '上虞市', '嵊州市', '绍兴县', '新昌县', '其他']
},
{
label: '金华市',
children: ['婺城区', '金东区', '兰溪市', '义乌市', '东阳市', '永康市', '武义县', '浦江县', '磐安县', '其他']
},
{
label: '衢州市',
children: ['柯城区', '衢江区', '江山市', '龙游县', '常山县', '开化县', '其他']
},
{
label: '舟山市',
children: ['定海区', '普陀区', '岱山县', '嵊泗县', '其他']
},
{
label: '台州市',
children: ['椒江区', '黄岩区', '路桥区', '临海市', '温岭市', '玉环县', '天台县', '仙居县', '三门县', '其他']
},
{
label: '丽水市',
children: [
'莲都区',
'龙泉市',
'缙云县',
'青田县',
'云和县',
'遂昌县',
'松阳县',
'庆元县',
'景宁畲族自治县',
'其他'
]
},
{
label: '其他市',
children: ['其他']
}
]
},
{
label: '安徽省',
children: [
{
label: '合肥市',
children: ['庐阳区', '瑶海区', '蜀山区', '包河区', '长丰县', '肥东县', '肥西县', '其他']
},
{
label: '芜湖市',
children: ['镜湖区', '弋江区', '鸠江区', '三山区', '芜湖县', '南陵县', '繁昌县', '其他']
},
{
label: '蚌埠市',
children: ['蚌山区', '龙子湖区', '禹会区', '淮上区', '怀远县', '固镇县', '五河县', '其他']
},
{
label: '淮南市',
children: ['田家庵区', '大通区', '谢家集区', '八公山区', '潘集区', '凤台县', '其他']
},
{
label: '马鞍山市',
children: ['雨山区', '花山区', '金家庄区', '当涂县', '其他']
},
{
label: '淮北市',
children: ['相山区', '杜集区', '烈山区', '濉溪县', '其他']
},
{
label: '铜陵市',
children: ['铜官山区', '狮子山区', '郊区', '铜陵县', '其他']
},
{
label: '安庆市',
children: [
'迎江区',
'大观区',
'宜秀区',
'桐城市',
'宿松县',
'枞阳县',
'太湖县',
'怀宁县',
'岳西县',
'望江县',
'潜山县',
'其他'
]
},
{
label: '黄山市',
children: ['屯溪区', '黄山区', '徽州区', '休宁县', '歙县', '祁门县', '黟县', '其他']
},
{
label: '滁州市',
children: ['琅琊区', '南谯区', '天长市', '明光市', '全椒县', '来安县', '定远县', '凤阳县', '其他']
},
{
label: '阜阳市',
children: ['颍州区', '颍东区', '颍泉区', '界首市', '临泉县', '颍上县', '阜南县', '太和县', '其他']
},
{
label: '宿州市',
children: ['埇桥区', '萧县', '泗县', '砀山县', '灵璧县', '其他']
},
{
label: '巢湖市',
children: ['居巢区', '含山县', '无为县', '庐江县', '和县', '其他']
},
{
label: '六安市',
children: ['金安区', '裕安区', '寿县', '霍山县', '霍邱县', '舒城县', '金寨县', '其他']
},
{
label: '亳州市',
children: ['谯城区', '利辛县', '涡阳县', '蒙城县', '其他']
},
{
label: '池州市',
children: ['贵池区', '东至县', '石台县', '青阳县', '其他']
},
{
label: '宣城市',
children: ['宣州区', '宁国市', '广德县', '郎溪县', '泾县', '旌德县', '绩溪县', '其他']
},
{
label: '其他市',
children: ['其他']
}
]
},
{
label: '福建省',
children: [
{
label: '福州市',
children: [
'鼓楼区',
'台江区',
'仓山区',
'马尾区',
'晋安区',
'福清市',
'长乐市',
'闽侯县',
'闽清县',
'永泰县',
'连江县',
'罗源县',
'平潭县',
'其他'
]
},
{
label: '厦门市',
children: ['思明区', '海沧区', '湖里区', '集美区', '同安区', '翔安区', '其他']
},
{
label: '莆田市',
children: ['城厢区', '涵江区', '荔城区', '秀屿区', '仙游县', '其他']
},
{
label: '三明市',
children: [
'梅列区',
'三元区',
'永安市',
'明溪县',
'将乐县',
'大田县',
'宁化县',
'建宁县',
'沙县',
'尤溪县',
'清流县',
'泰宁县',
'其他'
]
},
{
label: '泉州市',
children: [
'鲤城区',
'丰泽区',
'洛江区',
'泉港区',
'石狮市',
'晋江市',
'南安市',
'惠安县',
'永春县',
'安溪县',
'德化县',
'金门县',
'其他'
]
},
{
label: '漳州市',
children: [
'芗城区',
'龙文区',
'龙海市',
'平和县',
'南靖县',
'诏安县',
'漳浦县',
'华安县',
'东山县',
'长泰县',
'云霄县',
'其他'
]
},
{
label: '南平市',
children: [
'延平区',
'建瓯市',
'邵武市',
'武夷山市',
'建阳市',
'松溪县',
'光泽县',
'顺昌县',
'浦城县',
'政和县',
'其他'
]
},
{
label: '龙岩市',
children: ['新罗区', '漳平市', '长汀县', '武平县', '上杭县', '永定县', '连城县', '其他']
},
{
label: '宁德市',
children: ['蕉城区', '福安市', '福鼎市', '寿宁县', '霞浦县', '柘荣县', '屏南县', '古田县', '周宁县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '江西省',
children: [
{
label: '南昌市',
children: [
'东湖区',
'西湖区',
'青云谱区',
'湾里区',
'青山湖区',
'新建县',
'南昌县',
'进贤县',
'安义县',
'其他'
]
},
{
label: '景德镇市',
children: ['珠山区', '昌江区', '乐平市', '浮梁县', '其他']
},
{
label: '萍乡市',
children: ['安源区', '湘东区', '莲花县', '上栗县', '芦溪县', '其他']
},
{
label: '九江市',
children: [
'浔阳区',
'庐山区',
'瑞昌市',
'九江县',
'星子县',
'武宁县',
'彭泽县',
'永修县',
'修水县',
'湖口县',
'德安县',
'都昌县',
'其他'
]
},
{
label: '新余市',
children: ['渝水区', '分宜县', '其他']
},
{
label: '鹰潭市',
children: ['月湖区', '贵溪市', '余江县', '其他']
},
{
label: '赣州市',
children: [
'章贡区',
'瑞金市',
'南康市',
'石城县',
'安远县',
'赣县',
'宁都县',
'寻乌县',
'兴国县',
'定南县',
'上犹县',
'于都县',
'龙南县',
'崇义县',
'信丰县',
'全南县',
'大余县',
'会昌县',
'其他'
]
},
{
label: '吉安市',
children: [
'吉州区',
'青原区',
'井冈山市',
'吉安县',
'永丰县',
'永新县',
'新干县',
'泰和县',
'峡江县',
'遂川县',
'安福县',
'吉水县',
'万安县',
'其他'
]
},
{
label: '宜春市',
children: [
'袁州区',
'丰城市',
'樟树市',
'高安市',
'铜鼓县',
'靖安县',
'宜丰县',
'奉新县',
'万载县',
'上高县',
'其他'
]
},
{
label: '抚州市',
children: [
'临川区',
'南丰县',
'乐安县',
'金溪县',
'南城县',
'东乡县',
'资溪县',
'宜黄县',
'广昌县',
'黎川县',
'崇仁县',
'其他'
]
},
{
label: '上饶市',
children: [
'信州区',
'德兴市',
'上饶县',
'广丰县',
'鄱阳县',
'婺源县',
'铅山县',
'余干县',
'横峰县',
'弋阳县',
'玉山县',
'万年县',
'其他'
]
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '山东省',
children: [
{
label: '济南市',
children: [
'市中区',
'历下区',
'天桥区',
'槐荫区',
'历城区',
'长清区',
'章丘市',
'平阴县',
'济阳县',
'商河县',
'其他'
]
},
{
label: '青岛市',
children: [
'市南区',
'市北区',
'城阳区',
'四方区',
'李沧区',
'黄岛区',
'崂山区',
'胶南市',
'胶州市',
'平度市',
'莱西市',
'即墨市',
'其他'
]
},
{
label: '淄博市',
children: ['张店区', '临淄区', '淄川区', '博山区', '周村区', '桓台县', '高青县', '沂源县', '其他']
},
{
label: '枣庄市',
children: ['市中区', '山亭区', '峄城区', '台儿庄区', '薛城区', '滕州市', '其他']
},
{
label: '东营市',
children: ['东营区', '河口区', '垦利县', '广饶县', '利津县', '其他']
},
{
label: '烟台市',
children: [
'芝罘区',
'福山区',
'牟平区',
'莱山区',
'龙口市',
'莱阳市',
'莱州市',
'招远市',
'蓬莱市',
'栖霞市',
'海阳市',
'长岛县',
'其他'
]
},
{
label: '潍坊市',
children: [
'潍城区',
'寒亭区',
'坊子区',
'奎文区',
'青州市',
'诸城市',
'寿光市',
'安丘市',
'高密市',
'昌邑市',
'昌乐县',
'临朐县',
'其他'
]
},
{
label: '济宁市',
children: [
'市中区',
'任城区',
'曲阜市',
'兖州市',
'邹城市',
'鱼台县',
'金乡县',
'嘉祥县',
'微山县',
'汶上县',
'泗水县',
'梁山县',
'其他'
]
},
{
label: '泰安市',
children: ['泰山区', '岱岳区', '新泰市', '肥城市', '宁阳县', '东平县', '其他']
},
{
label: '威海市',
children: ['环翠区', '乳山市', '文登市', '荣成市', '其他']
},
{
label: '日照市',
children: ['东港区', '岚山区', '五莲县', '莒县', '其他']
},
{
label: '莱芜市',
children: ['莱城区', '钢城区', '其他']
},
{
label: '临沂市',
children: [
'兰山区',
'罗庄区',
'河东区',
'沂南县',
'郯城县',
'沂水县',
'苍山县',
'费县',
'平邑县',
'莒南县',
'蒙阴县',
'临沭县',
'其他'
]
},
{
label: '德州市',
children: [
'德城区',
'乐陵市',
'禹城市',
'陵县',
'宁津县',
'齐河县',
'武城县',
'庆云县',
'平原县',
'夏津县',
'临邑县',
'其他'
]
},
{
label: '聊城市',
children: ['东昌府区', '临清市', '高唐县', '阳谷县', '茌平县', '莘县', '东阿县', '冠县', '其他']
},
{
label: '滨州市',
children: ['滨城区', '邹平县', '沾化县', '惠民县', '博兴县', '阳信县', '无棣县', '其他']
},
{
label: '菏泽市',
children: ['牡丹区', '鄄城县', '单县', '郓城县', '曹县', '定陶县', '巨野县', '东明县', '成武县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '河南省',
children: [
{
label: '郑州市',
children: [
'中原区',
'金水区',
'二七区',
'管城回族区',
'上街区',
'惠济区',
'巩义市',
'新郑市',
'新密市',
'登封市',
'荥阳市',
'中牟县',
'其他'
]
},
{
label: '开封市',
children: [
'鼓楼区',
'龙亭区',
'顺河回族区',
'禹王台区',
'金明区',
'开封县',
'尉氏县',
'兰考县',
'杞县',
'通许县',
'其他'
]
},
{
label: '洛阳市',
children: [
'西工区',
'老城区',
'涧西区',
'瀍河回族区',
'洛龙区',
'吉利区',
'偃师市',
'孟津县',
'汝阳县',
'伊川县',
'洛宁县',
'嵩县',
'宜阳县',
'新安县',
'栾川县',
'其他'
]
},
{
label: '平顶山市',
children: [
'新华区',
'卫东区',
'湛河区',
'石龙区',
'汝州市',
'舞钢市',
'宝丰县',
'叶县',
'郏县',
'鲁山县',
'其他'
]
},
{
label: '安阳市',
children: ['北关区', '文峰区', '殷都区', '龙安区', '林州市', '安阳县', '滑县', '内黄县', '汤阴县', '其他']
},
{
label: '鹤壁市',
children: ['淇滨区', '山城区', '鹤山区', '浚县', '淇县', '其他']
},
{
label: '新乡市',
children: [
'卫滨区',
'红旗区',
'凤泉区',
'牧野区',
'卫辉市',
'辉县市',
'新乡县',
'获嘉县',
'原阳县',
'长垣县',
'封丘县',
'延津县',
'其他'
]
},
{
label: '焦作市',
children: [
'解放区',
'中站区',
'马村区',
'山阳区',
'沁阳市',
'孟州市',
'修武县',
'温县',
'武陟县',
'博爱县',
'其他'
]
},
{
label: '濮阳市',
children: ['华龙区', '濮阳县', '南乐县', '台前县', '清丰县', '范县', '其他']
},
{
label: '许昌市',
children: ['魏都区', '禹州市', '长葛市', '许昌县', '鄢陵县', '襄城县', '其他']
},
{
label: '漯河市',
children: ['源汇区', '郾城区', '召陵区', '临颍县', '舞阳县', '其他']
},
{
label: '三门峡市',
children: ['湖滨区', '义马市', '灵宝市', '渑池县', '卢氏县', '陕县', '其他']
},
{
label: '南阳市',
children: [
'卧龙区',
'宛城区',
'邓州市',
'桐柏县',
'方城县',
'淅川县',
'镇平县',
'唐河县',
'南召县',
'内乡县',
'新野县',
'社旗县',
'西峡县',
'其他'
]
},
{
label: '商丘市',
children: ['梁园区', '睢阳区', '永城市', '宁陵县', '虞城县', '民权县', '夏邑县', '柘城县', '睢县', '其他']
},
{
label: '信阳市',
children: [
'浉河区',
'平桥区',
'潢川县',
'淮滨县',
'息县',
'新县',
'商城县',
'固始县',
'罗山县',
'光山县',
'其他'
]
},
{
label: '周口市',
children: [
'川汇区',
'项城市',
'商水县',
'淮阳县',
'太康县',
'鹿邑县',
'西华县',
'扶沟县',
'沈丘县',
'郸城县',
'其他'
]
},
{
label: '驻马店市',
children: [
'驿城区',
'确山县',
'新蔡县',
'上蔡县',
'西平县',
'泌阳县',
'平舆县',
'汝南县',
'遂平县',
'正阳县',
'其他'
]
},
{
label: '焦作市',
children: ['济源市', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '湖北省',
children: [
{
label: '武汉市',
children: [
'江岸区',
'武昌区',
'江汉区',
'硚口区',
'汉阳区',
'青山区',
'洪山区',
'东西湖区',
'汉南区',
'蔡甸区',
'江夏区',
'黄陂区',
'新洲区',
'其他'
]
},
{
label: '黄石市',
children: ['黄石港区', '西塞山区', '下陆区', '铁山区', '大冶市', '阳新县', '其他']
},
{
label: '十堰市',
children: ['张湾区', '茅箭区', '丹江口市', '郧县', '竹山县', '房县', '郧西县', '竹溪县', '其他']
},
{
label: '荆州市',
children: ['沙市区', '荆州区', '洪湖市', '石首市', '松滋市', '监利县', '公安县', '江陵县', '其他']
},
{
label: '宜昌市',
children: [
'西陵区',
'伍家岗区',
'点军区',
'猇亭区',
'夷陵区',
'宜都市',
'当阳市',
'枝江市',
'秭归县',
'远安县',
'兴山县',
'五峰土家族自治县',
'长阳土家族自治县',
'其他'
]
},
{
label: '襄樊市',
children: ['襄城区', '樊城区', '襄阳区', '老河口市', '枣阳市', '宜城市', '南漳县', '谷城县', '保康县', '其他']
},
{
label: '鄂州市',
children: ['鄂城区', '华容区', '梁子湖区', '其他']
},
{
label: '荆门市',
children: ['东宝区', '掇刀区', '钟祥市', '京山县', '沙洋县', '其他']
},
{
label: '孝感市',
children: ['孝南区', '应城市', '安陆市', '汉川市', '云梦县', '大悟县', '孝昌县', '其他']
},
{
label: '黄冈市',
children: [
'黄州区',
'麻城市',
'武穴市',
'红安县',
'罗田县',
'浠水县',
'蕲春县',
'黄梅县',
'英山县',
'团风县',
'其他'
]
},
{
label: '咸宁市',
children: ['咸安区', '赤壁市', '嘉鱼县', '通山县', '崇阳县', '通城县', '其他']
},
{
label: '随州市',
children: ['曾都区', '广水市', '其他']
},
{
label: '恩施土家族苗族自治州',
children: ['恩施市', '利川市', '建始县', '来凤县', '巴东县', '鹤峰县', '宣恩县', '咸丰县', '其他']
},
{
label: '仙桃市',
children: ['仙桃']
},
{
label: '天门市',
children: ['天门']
},
{
label: '潜江市',
children: ['潜江']
},
{
label: '神农架林区',
children: ['神农架林区']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '湖南省',
children: [
{
label: '长沙市',
children: ['岳麓区', '芙蓉区', '天心区', '开福区', '雨花区', '浏阳市', '长沙县', '望城县', '宁乡县', '其他']
},
{
label: '株洲市',
children: ['天元区', '荷塘区', '芦淞区', '石峰区', '醴陵市', '株洲县', '炎陵县', '茶陵县', '攸县', '其他']
},
{
label: '湘潭市',
children: ['岳塘区', '雨湖区', '湘乡市', '韶山市', '湘潭县', '其他']
},
{
label: '衡阳市',
children: [
'雁峰区',
'珠晖区',
'石鼓区',
'蒸湘区',
'南岳区',
'耒阳市',
'常宁市',
'衡阳县',
'衡东县',
'衡山县',
'衡南县',
'祁东县',
'其他'
]
},
{
label: '邵阳市',
children: [
'双清区',
'大祥区',
'北塔区',
'武冈市',
'邵东县',
'洞口县',
'新邵县',
'绥宁县',
'新宁县',
'邵阳县',
'隆回县',
'城步苗族自治县',
'其他'
]
},
{
label: '岳阳市',
children: ['岳阳楼区', '云溪区', '君山区', '临湘市', '汨罗市', '岳阳县', '湘阴县', '平江县', '华容县', '其他']
},
{
label: '常德市',
children: ['武陵区', '鼎城区', '津市市', '澧县', '临澧县', '桃源县', '汉寿县', '安乡县', '石门县', '其他']
},
{
label: '张家界市',
children: ['永定区', '武陵源区', '慈利县', '桑植县', '其他']
},
{
label: '益阳市',
children: ['赫山区', '资阳区', '沅江市', '桃江县', '南县', '安化县', '其他']
},
{
label: '郴州市',
children: [
'北湖区',
'苏仙区',
'资兴市',
'宜章县',
'汝城县',
'安仁县',
'嘉禾县',
'临武县',
'桂东县',
'永兴县',
'桂阳县',
'其他'
]
},
{
label: '永州市',
children: [
'冷水滩区',
'零陵区',
'祁阳县',
'蓝山县',
'宁远县',
'新田县',
'东安县',
'江永县',
'道县',
'双牌县',
'江华瑶族自治县',
'其他'
]
},
{
label: '怀化市',
children: [
'鹤城区',
'洪江市',
'会同县',
'沅陵县',
'辰溪县',
'溆浦县',
'中方县',
'新晃侗族自治县',
'芷江侗族自治县',
'通道侗族自治县',
'靖州苗族侗族自治县',
'麻阳苗族自治县',
'其他'
]
},
{
label: '娄底市',
children: ['娄星区', '冷水江市', '涟源市', '新化县', '双峰县', '其他']
},
{
label: '湘西土家族苗族自治州',
children: ['吉首市', '古丈县', '龙山县', '永顺县', '凤凰县', '泸溪县', '保靖县', '花垣县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '广东省',
children: [
{
label: '广州市',
children: [
'越秀区',
'荔湾区',
'海珠区',
'天河区',
'白云区',
'黄埔区',
'番禺区',
'花都区',
'南沙区',
'萝岗区',
'增城市',
'从化市',
'其他'
]
},
{
label: '深圳市',
children: ['福田区', '罗湖区', '南山区', '宝安区', '龙岗区', '盐田区', '其他']
},
{
label: '东莞市',
children: ['莞城', '常平', '塘厦', '塘厦', '塘厦', '其他']
},
{
label: '中山市',
children: ['中山']
},
{
label: '潮州市',
children: ['湘桥区', '潮安县', '饶平县', '其他']
},
{
label: '揭阳市',
children: ['榕城区', '揭东县', '揭西县', '惠来县', '普宁市', '其他']
},
{
label: '云浮市',
children: ['云城区', '新兴县', '郁南县', '云安县', '罗定市', '其他']
},
{
label: '珠海市',
children: ['香洲区', '斗门区', '金湾区', '其他']
},
{
label: '汕头市',
children: ['金平区', '濠江区', '龙湖区', '潮阳区', '潮南区', '澄海区', '南澳县', '其他']
},
{
label: '韶关市',
children: [
'浈江区',
'武江区',
'曲江区',
'乐昌市',
'南雄市',
'始兴县',
'仁化县',
'翁源县',
'新丰县',
'乳源瑶族自治县',
'其他'
]
},
{
label: '佛山市',
children: ['禅城区', '南海区', '顺德区', '三水区', '高明区', '其他']
},
{
label: '江门市',
children: ['蓬江区', '江海区', '新会区', '恩平市', '台山市', '开平市', '鹤山市', '其他']
},
{
label: '湛江市',
children: ['赤坎区', '霞山区', '坡头区', '麻章区', '吴川市', '廉江市', '雷州市', '遂溪县', '徐闻县', '其他']
},
{
label: '茂名市',
children: ['茂南区', '茂港区', '化州市', '信宜市', '高州市', '电白县', '其他']
},
{
label: '肇庆市',
children: ['端州区', '鼎湖区', '高要市', '四会市', '广宁县', '怀集县', '封开县', '德庆县', '其他']
},
{
label: '惠州市',
children: ['惠城区', '惠阳区', '博罗县', '惠东县', '龙门县', '其他']
},
{
label: '梅州市',
children: ['梅江区', '兴宁市', '梅县', '大埔县', '丰顺县', '五华县', '平远县', '蕉岭县', '其他']
},
{
label: '汕尾市',
children: ['城区', '陆丰市', '海丰县', '陆河县', '其他']
},
{
label: '河源市',
children: ['源城区', '紫金县', '龙川县', '连平县', '和平县', '东源县', '其他']
},
{
label: '阳江市',
children: ['江城区', '阳春市', '阳西县', '阳东县', '其他']
},
{
label: '清远市',
children: [
'清城区',
'英德市',
'连州市',
'佛冈县',
'阳山县',
'清新县',
'连山壮族瑶族自治县',
'连南瑶族自治县',
'其他'
]
}
]
},
{
label: '广西',
children: [
{
label: '南宁市',
children: [
'青秀区',
'兴宁区',
'西乡塘区',
'良庆区',
'江南区',
'邕宁区',
'武鸣县',
'隆安县',
'马山县',
'上林县',
'宾阳县',
'横县',
'其他'
]
},
{
label: '柳州市',
children: [
'城中区',
'鱼峰区',
'柳北区',
'柳南区',
'柳江县',
'柳城县',
'鹿寨县',
'融安县',
'融水苗族自治县',
'三江侗族自治县',
'其他'
]
},
{
label: '桂林市',
children: [
'象山区',
'秀峰区',
'叠彩区',
'七星区',
'雁山区',
'阳朔县',
'临桂县',
'灵川县',
'全州县',
'平乐县',
'兴安县',
'灌阳县',
'荔浦县',
'资源县',
'永福县',
'龙胜各族自治县',
'恭城瑶族自治县',
'其他'
]
},
{
label: '梧州市',
children: ['万秀区', '蝶山区', '长洲区', '岑溪市', '苍梧县', '藤县', '蒙山县', '其他']
},
{
label: '北海市',
children: ['海城区', '银海区', '铁山港区', '合浦县', '其他']
},
{
label: '防城港市',
children: ['港口区', '防城区', '东兴市', '上思县', '其他']
},
{
label: '钦州市',
children: ['钦南区', '钦北区', '灵山县', '浦北县', '其他']
},
{
label: '贵港市',
children: ['港北区', '港南区', '覃塘区', '桂平市', '平南县', '其他']
},
{
label: '玉林市',
children: ['玉州区', '北流市', '容县', '陆川县', '博白县', '兴业县', '其他']
},
{
label: '百色市',
children: [
'右江区',
'凌云县',
'平果县',
'西林县',
'乐业县',
'德保县',
'田林县',
'田阳县',
'靖西县',
'田东县',
'那坡县',
'隆林各族自治县',
'其他'
]
},
{
label: '贺州市',
children: ['八步区', '钟山县', '昭平县', '富川瑶族自治县', '其他']
},
{
label: '河池市',
children: [
'金城江区',
'宜州市',
'天峨县',
'凤山县',
'南丹县',
'东兰县',
'都安瑶族自治县',
'罗城仫佬族自治县',
'巴马瑶族自治县',
'环江毛南族自治县',
'大化瑶族自治县',
'其他'
]
},
{
label: '来宾市',
children: ['兴宾区', '合山市', '象州县', '武宣县', '忻城县', '金秀瑶族自治县', '其他']
},
{
label: '崇左市',
children: ['江州区', '凭祥市', '宁明县', '扶绥县', '龙州县', '大新县', '天等县', '其他']
},
{
label: '其他市',
children: ['其他']
}
]
},
{
label: '海南省',
children: [
{
label: '海口市',
children: ['龙华区', '秀英区', '琼山区', '美兰区', '其他']
},
{
label: '三亚市',
children: ['三亚市', '其他']
},
{
label: '五指山市',
children: ['五指山']
},
{
label: '琼海市',
children: ['琼海']
},
{
label: '儋州市',
children: ['儋州']
},
{
label: '文昌市',
children: ['文昌']
},
{
label: '万宁市',
children: ['万宁']
},
{
label: '东方市',
children: ['东方']
},
{
label: '澄迈县',
children: ['澄迈县']
},
{
label: '定安县',
children: ['定安县']
},
{
label: '屯昌县',
children: ['屯昌县']
},
{
label: '临高县',
children: ['临高县']
},
{
label: '白沙黎族自治县',
children: ['白沙黎族自治县']
},
{
label: '昌江黎族自治县',
children: ['昌江黎族自治县']
},
{
label: '乐东黎族自治县',
children: ['乐东黎族自治县']
},
{
label: '陵水黎族自治县',
children: ['陵水黎族自治县']
},
{
label: '保亭黎族苗族自治县',
children: ['保亭黎族苗族自治县']
},
{
label: '琼中黎族苗族自治县',
children: ['琼中黎族苗族自治县']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '重庆市',
children: [
{
label: '重庆市',
children: [
'渝中区',
'大渡口区',
'江北区',
'南岸区',
'北碚区',
'渝北区',
'巴南区',
'长寿区',
'双桥区',
'沙坪坝区',
'万盛区',
'万州区',
'涪陵区',
'黔江区',
'永川区',
'合川区',
'江津区',
'九龙坡区',
'南川区',
'綦江县',
'潼南县',
'荣昌县',
'璧山县',
'大足县',
'铜梁县',
'梁平县',
'开县',
'忠县',
'城口县',
'垫江县',
'武隆县',
'丰都县',
'奉节县',
'云阳县',
'巫溪县',
'巫山县',
'石柱土家族自治县',
'秀山土家族苗族自治县',
'酉阳土家族苗族自治县',
'彭水苗族土家族自治县',
'其他'
]
}
]
},
{
label: '四川省',
children: [
{
label: '成都市',
children: [
'青羊区',
'锦江区',
'金牛区',
'武侯区',
'成华区',
'龙泉驿区',
'青白江区',
'新都区',
'温江区',
'都江堰市',
'彭州市',
'邛崃市',
'崇州市',
'金堂县',
'郫县',
'新津县',
'双流县',
'蒲江县',
'大邑县',
'其他'
]
},
{
label: '自贡市',
children: ['大安区', '自流井区', '贡井区', '沿滩区', '荣县', '富顺县', '其他']
},
{
label: '攀枝花市',
children: ['仁和区', '米易县', '盐边县', '东区', '西区', '其他']
},
{
label: '泸州市',
children: ['江阳区', '纳溪区', '龙马潭区', '泸县', '合江县', '叙永县', '古蔺县', '其他']
},
{
label: '德阳市',
children: ['旌阳区', '广汉市', '什邡市', '绵竹市', '罗江县', '中江县', '其他']
},
{
label: '绵阳市',
children: [
'涪城区',
'游仙区',
'江油市',
'盐亭县',
'三台县',
'平武县',
'安县',
'梓潼县',
'北川羌族自治县',
'其他'
]
},
{
label: '广元市',
children: ['元坝区', '朝天区', '青川县', '旺苍县', '剑阁县', '苍溪县', '市中区', '其他']
},
{
label: '遂宁市',
children: ['船山区', '安居区', '射洪县', '蓬溪县', '大英县', '其他']
},
{
label: '内江市',
children: ['市中区', '东兴区', '资中县', '隆昌县', '威远县', '其他']
},
{
label: '乐山市',
children: [
'市中区',
'五通桥区',
'沙湾区',
'金口河区',
'峨眉山市',
'夹江县',
'井研县',
'犍为县',
'沐川县',
'马边彝族自治县',
'峨边彝族自治县',
'其他'
]
},
{
label: '南充',
children: ['顺庆区', '高坪区', '嘉陵区', '阆中市', '营山县', '蓬安县', '仪陇县', '南部县', '西充县', '其他']
},
{
label: '眉山市',
children: ['东坡区', '仁寿县', '彭山县', '洪雅县', '丹棱县', '青神县', '其他']
},
{
label: '宜宾市',
children: [
'翠屏区',
'宜宾县',
'兴文县',
'南溪县',
'珙县',
'长宁县',
'高县',
'江安县',
'筠连县',
'屏山县',
'其他'
]
},
{
label: '广安市',
children: ['广安区', '华蓥市', '岳池县', '邻水县', '武胜县', '其他']
},
{
label: '达州市',
children: ['通川区', '万源市', '达县', '渠县', '宣汉县', '开江县', '大竹县', '其他']
},
{
label: '雅安市',
children: ['雨城区', '芦山县', '石棉县', '名山县', '天全县', '荥经县', '宝兴县', '汉源县', '其他']
},
{
label: '巴中市',
children: ['巴州区', '南江县', '平昌县', '通江县', '其他']
},
{
label: '资阳市',
children: ['雁江区', '简阳市', '安岳县', '乐至县', '其他']
},
{
label: '阿坝藏族羌族自治州',
children: [
'马尔康县',
'九寨沟县',
'红原县',
'汶川县',
'阿坝县',
'理县',
'若尔盖县',
'小金县',
'黑水县',
'金川县',
'松潘县',
'壤塘县',
'茂县',
'其他'
]
},
{
label: '甘孜藏族自治州',
children: [
'康定县',
'丹巴县',
'炉霍县',
'九龙县',
'甘孜县',
'雅江县',
'新龙县',
'道孚县',
'白玉县',
'理塘县',
'德格县',
'乡城县',
'石渠县',
'稻城县',
'色达县',
'巴塘县',
'泸定县',
'得荣县',
'其他'
]
},
{
label: '凉山彝族自治州',
children: [
'西昌市',
'美姑县',
'昭觉县',
'金阳县',
'甘洛县',
'布拖县',
'雷波县',
'普格县',
'宁南县',
'喜德县',
'会东县',
'越西县',
'会理县',
'盐源县',
'德昌县',
'冕宁县',
'木里藏族自治县',
'其他'
]
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '贵州省',
children: [
{
label: '贵阳市',
children: [
'南明区',
'云岩区',
'花溪区',
'乌当区',
'白云区',
'小河区',
'清镇市',
'开阳县',
'修文县',
'息烽县',
'其他'
]
},
{
label: '六盘水市',
children: ['钟山区', '水城县', '盘县', '六枝特区', '其他']
},
{
label: '遵义市',
children: [
'红花岗区',
'汇川区',
'赤水市',
'仁怀市',
'遵义县',
'绥阳县',
'桐梓县',
'习水县',
'凤冈县',
'正安县',
'余庆县',
'湄潭县',
'道真仡佬族苗族自治县',
'务川仡佬族苗族自治县',
'其他'
]
},
{
label: '安顺市',
children: [
'西秀区',
'普定县',
'平坝县',
'镇宁布依族苗族自治县',
'紫云苗族布依族自治县',
'关岭布依族苗族自治县',
'其他'
]
},
{
label: '铜仁地区',
children: [
'铜仁市',
'德江县',
'江口县',
'思南县',
'石阡县',
'玉屏侗族自治县',
'松桃苗族自治县',
'印江土家族苗族自治县',
'沿河土家族自治县',
'万山特区',
'其他'
]
},
{
label: '毕节地区',
children: [
'毕节市',
'黔西县',
'大方县',
'织金县',
'金沙县',
'赫章县',
'纳雍县',
'威宁彝族回族苗族自治县',
'其他'
]
},
{
label: '黔西南布依族苗族自治州',
children: ['兴义市', '望谟县', '兴仁县', '普安县', '册亨县', '晴隆县', '贞丰县', '安龙县', '其他']
},
{
label: '黔东南苗族侗族自治州',
children: [
'凯里市',
'施秉县',
'从江县',
'锦屏县',
'镇远县',
'麻江县',
'台江县',
'天柱县',
'黄平县',
'榕江县',
'剑河县',
'三穗县',
'雷山县',
'黎平县',
'岑巩县',
'丹寨县',
'其他'
]
},
{
label: '黔南布依族苗族自治州',
children: [
'都匀市',
'福泉市',
'贵定县',
'惠水县',
'罗甸县',
'瓮安县',
'荔波县',
'龙里县',
'平塘县',
'长顺县',
'独山县',
'三都水族自治县',
'其他'
]
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '云南省',
children: [
{
label: '昆明市',
children: [
'盘龙区',
'五华区',
'官渡区',
'西山区',
'东川区',
'安宁市',
'呈贡县',
'晋宁县',
'富民县',
'宜良县',
'嵩明县',
'石林彝族自治县',
'禄劝彝族苗族自治县',
'寻甸回族彝族自治县',
'其他'
]
},
{
label: '曲靖市',
children: ['麒麟区', '宣威市', '马龙县', '沾益县', '富源县', '罗平县', '师宗县', '陆良县', '会泽县', '其他']
},
{
label: '玉溪市',
children: [
'红塔区',
'江川县',
'澄江县',
'通海县',
'华宁县',
'易门县',
'峨山彝族自治县',
'新平彝族傣族自治县',
'元江哈尼族彝族傣族自治县',
'其他'
]
},
{
label: '保山市',
children: ['隆阳区', '施甸县', '腾冲县', '龙陵县', '昌宁县', '其他']
},
{
label: '昭通市',
children: [
'昭阳区',
'鲁甸县',
'巧家县',
'盐津县',
'大关县',
'永善县',
'绥江县',
'镇雄县',
'彝良县',
'威信县',
'水富县',
'其他'
]
},
{
label: '丽江市',
children: ['古城区', '永胜县', '华坪县', '玉龙纳西族自治县', '宁蒗彝族自治县', '其他']
},
{
label: '普洱市',
children: [
'思茅区',
'普洱哈尼族彝族自治县',
'墨江哈尼族自治县',
'景东彝族自治县',
'景谷傣族彝族自治县',
'镇沅彝族哈尼族拉祜族自治县',
'江城哈尼族彝族自治县',
'孟连傣族拉祜族佤族自治县',
'澜沧拉祜族自治县',
'西盟佤族自治县',
'其他'
]
},
{
label: '临沧市',
children: [
'临翔区',
'凤庆县',
'云县',
'永德县',
'镇康县',
'双江拉祜族佤族布朗族傣族自治县',
'耿马傣族佤族自治县',
'沧源佤族自治县',
'其他'
]
},
{
label: '德宏傣族景颇族自治州',
children: ['潞西市', '瑞丽市', '梁河县', '盈江县', '陇川县', '其他']
},
{
label: '怒江傈僳族自治州',
children: ['泸水县', '福贡县', '贡山独龙族怒族自治县', '兰坪白族普米族自治县', '其他']
},
{
label: '迪庆藏族自治州',
children: ['香格里拉县', '德钦县', '维西傈僳族自治县', '其他']
},
{
label: '大理白族自治州',
children: [
'大理市',
'祥云县',
'宾川县',
'弥渡县',
'永平县',
'云龙县',
'洱源县',
'剑川县',
'鹤庆县',
'漾濞彝族自治县',
'南涧彝族自治县',
'巍山彝族回族自治县',
'其他'
]
},
{
label: '楚雄彝族自治州',
children: [
'楚雄市',
'双柏县',
'牟定县',
'南华县',
'姚安县',
'大姚县',
'永仁县',
'元谋县',
'武定县',
'禄丰县',
'其他'
]
},
{
label: '红河哈尼族彝族自治州',
children: [
'蒙自县',
'个旧市',
'开远市',
'绿春县',
'建水县',
'石屏县',
'弥勒县',
'泸西县',
'元阳县',
'红河县',
'金平苗族瑶族傣族自治县',
'河口瑶族自治县',
'屏边苗族自治县',
'其他'
]
},
{
label: '文山壮族苗族自治州',
children: ['文山县', '砚山县', '西畴县', '麻栗坡县', '马关县', '丘北县', '广南县', '富宁县', '其他']
},
{
label: '西双版纳傣族自治州',
children: ['景洪市', '勐海县', '勐腊县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '西藏',
children: [
{
label: '拉萨市',
children: ['城关区', '林周县', '当雄县', '尼木县', '曲水县', '堆龙德庆县', '达孜县', '墨竹工卡县', '其他']
},
{
label: '那曲地区',
children: [
'那曲县',
'嘉黎县',
'比如县',
'聂荣县',
'安多县',
'申扎县',
'索县',
'班戈县',
'巴青县',
'尼玛县',
'其他'
]
},
{
label: '昌都地区',
children: [
'昌都县',
'江达县',
'贡觉县',
'类乌齐县',
'丁青县',
'察雅县',
'八宿县',
'左贡县',
'芒康县',
'洛隆县',
'边坝县',
'其他'
]
},
{
label: '林芝地区',
children: ['林芝县', '工布江达县', '米林县', '墨脱县', '波密县', '察隅县', '朗县', '其他']
},
{
label: '山南地区',
children: [
'乃东县',
'扎囊县',
'贡嘎县',
'桑日县',
'琼结县',
'曲松县',
'措美县',
'洛扎县',
'加查县',
'隆子县',
'错那县',
'浪卡子县',
'其他'
]
},
{
label: '日喀则地区',
children: [
'日喀则市',
'南木林县',
'江孜县',
'定日县',
'萨迦县',
'拉孜县',
'昂仁县',
'谢通门县',
'白朗县',
'仁布县',
'康马县',
'定结县',
'仲巴县',
'亚东县',
'吉隆县',
'聂拉木县',
'萨嘎县',
'岗巴县',
'其他'
]
},
{
label: '阿里地区',
children: ['噶尔县', '普兰县', '札达县', '日土县', '革吉县', '改则县', '措勤县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '陕西省',
children: [
{
label: '西安市',
children: [
'莲湖区',
'新城区',
'碑林区',
'雁塔区',
'灞桥区',
'未央区',
'阎良区',
'临潼区',
'长安区',
'高陵县',
'蓝田县',
'户县',
'周至县',
'其他'
]
},
{
label: '铜川市',
children: ['耀州区', '王益区', '印台区', '宜君县', '其他']
},
{
label: '宝鸡市',
children: [
'渭滨区',
'金台区',
'陈仓区',
'岐山县',
'凤翔县',
'陇县',
'太白县',
'麟游县',
'扶风县',
'千阳县',
'眉县',
'凤县',
'其他'
]
},
{
label: '咸阳市',
children: [
'秦都区',
'渭城区',
'杨陵区',
'兴平市',
'礼泉县',
'泾阳县',
'永寿县',
'三原县',
'彬县',
'旬邑县',
'长武县',
'乾县',
'武功县',
'淳化县',
'其他'
]
},
{
label: '渭南市',
children: [
'临渭区',
'韩城市',
'华阴市',
'蒲城县',
'潼关县',
'白水县',
'澄城县',
'华县',
'合阳县',
'富平县',
'大荔县',
'其他'
]
},
{
label: '延安市',
children: [
'宝塔区',
'安塞县',
'洛川县',
'子长县',
'黄陵县',
'延川县',
'富县',
'延长县',
'甘泉县',
'宜川县',
'志丹县',
'黄龙县',
'吴起县',
'其他'
]
},
{
label: '汉中市',
children: [
'汉台区',
'留坝县',
'镇巴县',
'城固县',
'南郑县',
'洋县',
'宁强县',
'佛坪县',
'勉县',
'西乡县',
'略阳县',
'其他'
]
},
{
label: '榆林市',
children: [
'榆阳区',
'清涧县',
'绥德县',
'神木县',
'佳县',
'府谷县',
'子洲县',
'靖边县',
'横山县',
'米脂县',
'吴堡县',
'定边县',
'其他'
]
},
{
label: '安康市',
children: [
'汉滨区',
'紫阳县',
'岚皋县',
'旬阳县',
'镇坪县',
'平利县',
'石泉县',
'宁陕县',
'白河县',
'汉阴县',
'其他'
]
},
{
label: '商洛市',
children: ['商州区', '镇安县', '山阳县', '洛南县', '商南县', '丹凤县', '柞水县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '甘肃省',
children: [
{
label: '兰州市',
children: ['城关区', '七里河区', '西固区', '安宁区', '红古区', '永登县', '皋兰县', '榆中县', '其他']
},
{
label: '嘉峪关市',
children: ['嘉峪关市', '其他']
},
{
label: '金昌市',
children: ['金川区', '永昌县', '其他']
},
{
label: '白银市',
children: ['白银区', '平川区', '靖远县', '会宁县', '景泰县', '其他']
},
{
label: '天水市',
children: ['清水县', '秦安县', '甘谷县', '武山县', '张家川回族自治县', '北道区', '秦城区', '其他']
},
{
label: '武威市',
children: ['凉州区', '民勤县', '古浪县', '天祝藏族自治县', '其他']
},
{
label: '酒泉市',
children: [
'肃州区',
'玉门市',
'敦煌市',
'金塔县',
'肃北蒙古族自治县',
'阿克塞哈萨克族自治县',
'安西县',
'其他'
]
},
{
label: '张掖市',
children: ['甘州区', '民乐县', '临泽县', '高台县', '山丹县', '肃南裕固族自治县', '其他']
},
{
label: '庆阳市',
children: ['西峰区', '庆城县', '环县', '华池县', '合水县', '正宁县', '宁县', '镇原县', '其他']
},
{
label: '平凉市',
children: ['崆峒区', '泾川县', '灵台县', '崇信县', '华亭县', '庄浪县', '静宁县', '其他']
},
{
label: '定西市',
children: ['安定区', '通渭县', '临洮县', '漳县', '岷县', '渭源县', '陇西县', '其他']
},
{
label: '陇南市',
children: ['武都区', '成县', '宕昌县', '康县', '文县', '西和县', '礼县', '两当县', '徽县', '其他']
},
{
label: '临夏回族自治州',
children: [
'临夏市',
'临夏县',
'康乐县',
'永靖县',
'广河县',
'和政县',
'东乡族自治县',
'积石山保安族东乡族撒拉族自治县',
'其他'
]
},
{
label: '甘南藏族自治州',
children: ['合作市', '临潭县', '卓尼县', '舟曲县', '迭部县', '玛曲县', '碌曲县', '夏河县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '青海省',
children: [
{
label: '西宁市',
children: ['城中区', '城东区', '城西区', '城北区', '湟源县', '湟中县', '大通回族土族自治县', '其他']
},
{
label: '海东地区',
children: [
'平安县',
'乐都县',
'民和回族土族自治县',
'互助土族自治县',
'化隆回族自治县',
'循化撒拉族自治县',
'其他'
]
},
{
label: '海北藏族自治州',
children: ['海晏县', '祁连县', '刚察县', '门源回族自治县', '其他']
},
{
label: '海南藏族自治州',
children: ['共和县', '同德县', '贵德县', '兴海县', '贵南县', '其他']
},
{
label: '黄南藏族自治州',
children: ['同仁县', '尖扎县', '泽库县', '河南蒙古族自治县', '其他']
},
{
label: '果洛藏族自治州',
children: ['玛沁县', '班玛县', '甘德县', '达日县', '久治县', '玛多县', '其他']
},
{
label: '玉树藏族自治州',
children: ['玉树县', '杂多县', '称多县', '治多县', '囊谦县', '曲麻莱县', '其他']
},
{
label: '海西蒙古族藏族自治州',
children: ['德令哈市', '格尔木市', '乌兰县', '都兰县', '天峻县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '宁夏',
children: [
{
label: '银川市',
children: ['兴庆区', '西夏区', '金凤区', '灵武市', '永宁县', '贺兰县', '其他']
},
{
label: '石嘴山市',
children: ['大武口区', '惠农区', '平罗县', '其他']
},
{
label: '吴忠市',
children: ['利通区', '青铜峡市', '盐池县', '同心县', '其他']
},
{
label: '固原市',
children: ['原州区', '西吉县', '隆德县', '泾源县', '彭阳县', '其他']
},
{
label: '中卫市',
children: ['沙坡头区', '中宁县', '海原县', '其他']
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '新疆',
children: [
{
label: '乌鲁木齐市',
children: [
'天山区',
'沙依巴克区',
'新市区',
'水磨沟区',
'头屯河区',
'达坂城区',
'东山区',
'乌鲁木齐县',
'其他'
]
},
{
label: '克拉玛依市',
children: ['克拉玛依区', '独山子区', '白碱滩区', '乌尔禾区', '其他']
},
{
label: '吐鲁番地区',
children: ['吐鲁番市', '托克逊县', '鄯善县', '其他']
},
{
label: '哈密地区',
children: ['哈密市', '伊吾县', '巴里坤哈萨克自治县', '其他']
},
{
label: '和田地区',
children: ['和田市', '和田县', '洛浦县', '民丰县', '皮山县', '策勒县', '于田县', '墨玉县', '其他']
},
{
label: '阿克苏地区',
children: [
'阿克苏市',
'温宿县',
'沙雅县',
'拜城县',
'阿瓦提县',
'库车县',
'柯坪县',
'新和县',
'乌什县',
'其他'
]
},
{
label: '喀什地区',
children: [
'喀什市',
'巴楚县',
'泽普县',
'伽师县',
'叶城县',
'岳普湖县',
'疏勒县',
'麦盖提县',
'英吉沙县',
'莎车县',
'疏附县',
'塔什库尔干塔吉克自治县',
'其他'
]
},
{
label: '克孜勒苏柯尔克孜自治州',
children: ['阿图什市', '阿合奇县', '乌恰县', '阿克陶县', '其他']
},
{
label: '巴音郭楞蒙古自治州',
children: [
'库尔勒市',
'和静县',
'尉犁县',
'和硕县',
'且末县',
'博湖县',
'轮台县',
'若羌县',
'焉耆回族自治县',
'其他'
]
},
{
label: '昌吉回族自治州',
children: [
'昌吉市',
'阜康市',
'奇台县',
'玛纳斯县',
'吉木萨尔县',
'呼图壁县',
'木垒哈萨克自治县',
'米泉市',
'其他'
]
},
{
label: '博尔塔拉蒙古自治州',
children: ['博乐市', '精河县', '温泉县', '其他']
},
{
label: '石河子',
children: ['石河子']
},
{
label: '阿拉尔',
children: ['阿拉尔']
},
{
label: '图木舒克',
children: ['图木舒克']
},
{
label: '五家渠',
children: ['五家渠']
},
{
label: '伊犁哈萨克自治州',
children: [
'伊宁市',
'奎屯市',
'伊宁县',
'特克斯县',
'尼勒克县',
'昭苏县',
'新源县',
'霍城县',
'巩留县',
'察布查尔锡伯自治县',
'塔城地区',
'阿勒泰地区',
'其他'
]
},
{
label: '其他',
children: ['其他']
}
]
},
{
label: '台湾省',
children: [
{
label: '台北市',
children: [
'内湖区',
'南港区',
'中正区',
'万华区',
'大同区',
'中山区',
'松山区',
'大安区',
'信义区',
'文山区',
'士林区',
'北投区'
]
},
{
label: '新北市',
children: ['板桥区', '汐止区', '新店区', '其他']
},
{
label: '桃园市',
children: ['其他']
},
{
label: '台中市',
children: ['其他']
},
{
label: '台南市',
children: ['其他']
},
{
label: '高雄市',
children: ['其他']
}
]
},
{
label: '澳门',
children: [
{
label: '澳门',
children: [
'花地玛堂区',
'圣安多尼堂区',
'大堂区',
'望德堂区',
'风顺堂区',
'嘉模堂区',
'圣方济各堂区',
'路凼',
'其他'
]
}
]
},
{
label: '香港',
children: [
{
label: '香港',
children: [
'深水埗区',
'油尖旺区',
'九龙城区',
'黄大仙区',
'观塘区',
'北区',
'大埔区',
'沙田区',
'西贡区',
'元朗区',
'屯门区',
'荃湾区',
'葵青区',
'离岛区',
'中西区',
'湾仔区',
'东区',
'南区',
'其他'
]
}
]
}
];
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PickerComponent {
/**
* @param {?} elementRef
* @param {?} options
* @param {?} _localeProviderService
*/
constructor(elementRef, options, _localeProviderService) {
this.elementRef = elementRef;
this.options = options;
this._localeProviderService = _localeProviderService;
this.transitionName = 'am-slide-up-enter am-slide-up-enter-active';
this.maskTransitionName = 'am-fade-enter am-fade-enter-active';
this.address = getData();
this.startY = 0;
this.differY = 0;
this.currentY = 0;
this.len = 0;
this.dom = null;
this.index = 0;
this.maxY = 0;
this.lineHeight = 34;
this.data = [];
this.selectedTarget = [];
this.isMouseDown = false;
this.Velocity = getVelocity();
this._unsubscribe$ = new Subject();
this.onChange = new EventEmitter();
}
/**
* @param {?} event
* @return {?}
*/
panstart(event) {
if (!event.target.classList.contains('am-picker-col-mask')) {
return;
}
this.isMouseDown = true;
event.preventDefault();
this.dom = getEventTarget(event).target.parentElement.children[2];
this.len = this.dom.children.length;
this.maxY = -(this.len - 1);
if (this.dom.style.transform === 'translateY(0px)') {
this.currentY = 0;
this.maxY = -(this.len - 1);
}
else if (this.selectedTarget.length > 0) {
this.selectedTarget.forEach(item => {
if (item.targetId === event.target.id) {
this.currentY = item.currentY;
}
});
}
this.startY = getEventTarget(event).clientY;
}
/**
* @param {?} event
* @return {?}
*/
panmove(event) {
if (!event.target.classList.contains('am-picker-col-mask') || !this.isMouseDown) {
return;
}
event.preventDefault();
/** @type {?} */
const ev = getEventTarget(event);
this.differY = ev.clientY - this.startY;
this.Velocity.record(this.differY);
this.dom.style.transition = 'transform 0s';
this.dom.style.transform = `translateY(${this.currentY * this.lineHeight + this.differY}px)`;
}
/**
* @param {?} event
* @return {?}
*/
panend(event) {
if (!event.target.classList.contains('am-picker-col-mask') || !this.isMouseDown) {
return;
}
this.isMouseDown = false;
event.preventDefault();
/** @type {?} */
const ev = getEventTarget(event);
this.differY = ev.clientY - this.startY;
/** @type {?} */
let time = 0.3;
/** @type {?} */
const velocityTemp = this.Velocity.getVelocity(this.differY) * 4;
if (velocity) {
this.differY = velocityTemp * 40 + this.differY;
time = Math.abs(velocityTemp) * 0.1;
}
this.dom.style.transition = 'transform ' + (time < 0.3 ? 0.3 : time) + 's';
if (this.differY <= -this.lineHeight / 2) {
this.currentY += Math.floor(this.differY / this.lineHeight);
if (this.currentY <= this.maxY) {
this.currentY = this.maxY;
}
}
else if (this.differY >= this.lineHeight / 2) {
this.currentY += Math.floor(this.differY / this.lineHeight);
if (this.currentY >= 0) {
this.currentY = 0;
}
}
if (this.selectedTarget.length > 0) {
/** @type {?} */
let hasKey = false;
this.selectedTarget.forEach(item => {
if (item.targetId === event.target.id) {
hasKey = true;
item.targetId = event.target.id;
item.currentY = this.currentY;
}
else if (parseInt(item.targetId, 0) > parseInt(event.target.id, 0) && this.options.cascade) {
item.currentY = 0;
}
});
if (!hasKey) {
this.selectedTarget.push({ targetId: event.target.id, currentY: this.currentY });
}
}
else {
this.selectedTarget.push({ targetId: event.target.id, currentY: this.currentY });
}
this.dom.style.transform = `translateY(${this.currentY * this.lineHeight}px)`;
this.index = Math.floor(Math.abs(this.currentY / 1));
this.setCurrentSelected(parseInt(event.target.id, 0), this.index);
this.onChange.emit(this.combineReslut());
this.options.onPickerChange.emit(this.combineReslut());
}
/**
* @return {?}
*/
init() {
if (this.options.data.length > 0) {
this.address = this.options.data;
}
if (this.data.length > 0) {
this.selectedTarget = [];
this.data = [];
}
this.data.push(this.generateArrayData(this.address));
if (this.options.value.length > 0) {
this.getInitValueIndex(this.data);
}
else {
this.checkArrayDeep(this.address[0]);
for (let index = 0; index < this.data.length; index++) {
this.selectedTarget.push({ targetId: `${index}`, currentY: 0 });
}
}
}
/**
* @param {?} dataTemp
* @return {?}
*/
getInitValueIndex(dataTemp) {
this.selectedTarget = [];
this.options.value.forEach((element, i) => {
dataTemp.forEach((item, j) => {
item.forEach((item1, k) => {
if (element === (item1.label || item1) && i === j) {
this.checkArrayDeep(this.data[i][k], false);
this.selectedTarget.push({ targetId: `${i}`, currentY: -k });
}
});
});
});
}
/**
* @return {?}
*/
reloadPicker() {
if (!this._picker || this._picker === undefined) {
return;
}
this.currentPicker = this._picker.element.nativeElement;
if (this.currentPicker && this.currentPicker.children.length > 0) {
/** @type {?} */
const self = this;
setTimeout(() => {
self.selectedTarget.forEach((item, i) => {
self.currentPicker.children[i].children[2].style.transition = 'transform .3s';
/** @type {?} */
const index = parseInt(item.currentY, 0);
self.currentPicker.children[i].children[2].style.transform = `translateY(${index * self.lineHeight}px)`;
});
}, 0);
}
}
/**
* @param {?} targetArr
* @return {?}
*/
generateArrayData(targetArr) {
/** @type {?} */
const tempArr = [];
if (targetArr instanceof Array) {
targetArr.forEach((item, i) => {
if (item instanceof Array) {
/** @type {?} */
const keys = Object.keys(item);
/** @type {?} */
const element = {};
keys.forEach(key => {
element[key] = targetArr[i][key] || targetArr[i];
});
tempArr.push(element);
}
else {
tempArr.push(item);
}
});
return tempArr;
}
return [];
}
/**
* @param {?} parent
* @param {?=} init
* @return {?}
*/
checkArrayDeep(parent, init = true) {
if (parent instanceof Object && parent.children && parent.children.length > 0) {
if (this.generateArrayData(parent.children).length > 0 && this.data.length < this.options.cols) {
this.data.push(this.generateArrayData(parent.children));
if (init) {
this.checkArrayDeep(parent.children[0]);
}
}
}
}
/**
* @return {?}
*/
ok() {
this.options.onOk.emit(this.combineReslut());
if (this.options.confirm) {
this.options.confirm(this.combineReslut());
}
this.setTransitionName();
}
/**
* @return {?}
*/
combineReslut() {
/** @type {?} */
const result = [];
this.selectedTarget.forEach(item => {
result.push(this.data[parseInt(item.targetId, 0)][-item.currentY]);
});
return result;
}
/**
* @return {?}
*/
cancel() {
this.setTransitionName();
this.options.onDismiss.emit();
if (this.options.cancel) {
this.options.cancel();
}
}
/**
* @return {?}
*/
setTransitionName() {
this.transitionName = 'am-slide-up-leave am-slide-up-leave-active';
this.maskTransitionName = 'am-fade-leave am-fade-leave-active';
setTimeout(() => {
this.options.hidePicker();
}, 200);
}
/**
* @param {?} target
* @param {?} index
* @return {?}
*/
setCurrentSelected(target, index) {
if (!this.options.cascade) {
return;
}
/** @type {?} */
const a = this.data.slice(0, target + 1);
this.data = a;
this.checkArrayDeep(this.data[target][index]);
setTimeout(() => {
this.data.forEach((item, i) => {
if (target !== `${i}` && i > target) {
this._picker.element.nativeElement.children[i].children[2].style.transition = 'transform .3s';
this._picker.element.nativeElement.children[i].children[2].style.transform = 'translateY(0px)';
}
});
}, 0);
}
/**
* @return {?}
*/
ngOnInit() {
this.init();
this._localeProviderService.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe(_ => {
/** @type {?} */
const locale = this._localeProviderService.getLocaleSubObj('Picker');
this.options.okText = locale.okText;
this.options.dismissText = locale.dismissText;
});
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.reloadPicker();
}
/**
* @return {?}
*/
ngOnDestroy() {
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
}
PickerComponent.decorators = [
{ type: Component, args: [{
selector: 'Picker',
template: "<div *ngIf=\"options.mask\" class=\"am-picker-popup-mask {{maskTransitionName}}\" (click)=\"cancel()\"></div>\n<div class=\"am-picker-popup {{transitionName}}\" style=\"z-index: 1001\">\n <div class=\"am-picker-popup-content\">\n <div class=\"am-picker-popup-body\">\n <div>\n <div class=\"am-picker-popup-header\">\n <div class=\"am-picker-popup-item am-picker-popup-header-left\" (click)=\"cancel()\">{{options.dismissText}}</div>\n <div class=\"am-picker-popup-item am-picker-popup-title\">{{options.title}}</div>\n <div class=\"am-picker-popup-item am-picker-popup-header-right\" (click)=\"ok()\">{{options.okText}}</div>\n </div>\n <div class=\"am-picker\" style=\"flex-direction: row; align-items: center;\" #picker>\n <div *ngFor=\"let item of data; let i = index\" class=\"am-picker-col\">\n <div class=\"am-picker-col-indicator \" style=\"top: 102px;\" [ngStyle]=\"options.indicatorStyle\"></div>\n <div class=\"am-picker-col-mask\" style=\"background-size: 100% 102px;\" id={{i}}></div>\n <div class=\"am-picker-col-content\">\n <div *ngFor=\"let val of item; let i = index\" class=\"am-picker-col-item\" id={{i}}>{{val.label?val.label:val}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
PickerComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: PickerOptions },
{ type: LocaleProviderService }
];
PickerComponent.propDecorators = {
_picker: [{ type: ViewChild, args: ['picker', { read: ViewContainerRef },] }],
onChange: [{ type: Output }],
panstart: [{ type: HostListener, args: ['mousedown', ['$event'],] }, { type: HostListener, args: ['touchstart', ['$event'],] }],
panmove: [{ type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }],
panend: [{ type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['mouseleave', ['$event'],] }, { type: HostListener, args: ['touchend', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PickerDirective {
/**
* @param {?} _viewContainerRef
* @param {?} _elm
* @param {?} _defaultOptions
* @param {?} _cfr
* @param {?} _renderer
*/
constructor(_viewContainerRef, _elm, _defaultOptions, _cfr, _renderer) {
this._viewContainerRef = _viewContainerRef;
this._elm = _elm;
this._defaultOptions = _defaultOptions;
this._cfr = _cfr;
this._renderer = _renderer;
this._eventListeners = [];
this.onVisibleChange = new EventEmitter(true);
this.onPickerChange = new EventEmitter();
this.onOk = new EventEmitter();
this.onDismiss = new EventEmitter();
}
/**
* @return {?}
*/
togglePicker() {
if (!this.picker) {
this.showPicker();
}
else {
this.hidePicker();
}
}
/**
* @return {?}
*/
ngOnInit() {
this.onVisibleChange.emit(false);
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes["isOpen"]) {
if (changes["isOpen"].currentValue === true) {
this.showPicker();
}
else {
this.hidePicker();
}
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.hidePicker();
}
/**
* @param {?} event
* @return {?}
*/
onDocumentClick(event) {
if (this.picker &&
!this._elm.nativeElement.contains(event.target) &&
!this.picker.location.nativeElement.contains(event.target)) {
this.hidePicker();
}
}
/**
* @return {?}
*/
showPicker() {
if (!this.picker) {
setTimeout(() => {
this._eventListeners = [
this._renderer.listen('document', 'click', (event) => this.onDocumentClick(event)),
this._renderer.listen('document', 'touchend', (event) => this.onDocumentClick(event))
];
});
/** @type {?} */
const options = new PickerOptions();
Object.assign(options, this._defaultOptions, {
hidePicker: (event) => {
this.hidePicker();
}
});
/** @type {?} */
const optionalParams = [
'data',
'value',
'cols',
'mask',
'title',
'okText',
'dismissText',
'disabled',
'cascade',
'appendToBody',
'indicatorStyle',
'onOk',
'onPickerChange'
];
optionalParams.forEach(param => {
if (typeof this[param] !== 'undefined') {
(/** @type {?} */ (options))[param] = this[param];
}
});
/** @type {?} */
const componentFactory = this._cfr.resolveComponentFactory(PickerComponent);
/** @type {?} */
const childInjector = Injector.create([
{
provide: PickerOptions,
useValue: options
}
]);
this.picker = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector);
if (options.appendToBody) {
document.body.appendChild(this.picker.location.nativeElement);
}
this.onVisibleChange.emit(true);
}
}
/**
* @return {?}
*/
hidePicker() {
if (this.picker) {
this.picker.destroy();
delete this.picker;
this.onVisibleChange.emit(false);
this._eventListeners.forEach(fn => fn());
this._eventListeners = [];
}
}
}
PickerDirective.decorators = [
{ type: Directive, args: [{
selector: '[Picker], [nzm-picker]'
},] }
];
/** @nocollapse */
PickerDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: ElementRef },
{ type: PickerOptions },
{ type: ComponentFactoryResolver },
{ type: Renderer2 }
];
PickerDirective.propDecorators = {
data: [{ type: Input }],
value: [{ type: Input }],
cols: [{ type: Input }],
mask: [{ type: Input }],
title: [{ type: Input }],
visible: [{ type: Input }],
okText: [{ type: Input }],
dismissText: [{ type: Input }],
disabled: [{ type: Input }],
cascade: [{ type: Input }],
appendToBody: [{ type: Input }],
indicatorStyle: [{ type: Input }],
onVisibleChange: [{ type: Output }],
onPickerChange: [{ type: Output }],
onOk: [{ type: Output }],
onDismiss: [{ type: Output }],
togglePicker: [{ type: HostListener, args: ['click',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PickerModule {
}
PickerModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, CoreModule],
exports: [PickerComponent, PickerDirective],
declarations: [PickerComponent, PickerDirective],
providers: [PickerOptions],
entryComponents: [PickerComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PickerViewComponent extends PickerComponent {
constructor() {
super(...arguments);
this.data = [];
this.value = [];
this.cols = 3;
this.indicatorStyle = {};
this.itemStyle = {};
this.onChange = new EventEmitter();
}
/**
* @return {?}
*/
pickerViewInit() {
this.options.data = this.data;
this.options.value = this.value;
this.options.cols = this.cols;
this.options.cascade = this.cascade;
this.init();
}
/**
* @return {?}
*/
ngOnInit() {
this.pickerViewInit();
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.currentPicker = this.elementRef.nativeElement;
this.reloadPicker();
}
}
PickerViewComponent.decorators = [
{ type: Component, args: [{
selector: 'PickerView, nzm-picker-view',
template: "<div #picker class=\"am-picker\" style=\"flex-direction: row; align-items: center;\">\n <div *ngFor=\"let item of data; let i = index\" class=\"am-picker-col\">\n <div #indicator class=\"am-picker-col-indicator \" [ngStyle]=\"indicatorStyle\"></div>\n <div id={{i}} class=\"am-picker-col-mask\" style=\"background-size: 100% 102px;\"></div>\n <div class=\"am-picker-col-content\">\n <div *ngFor=\"let val of item; let i = index\"\n id={{i}}\n class=\"am-picker-col-item\"\n [ngStyle]=\"itemStyle\"\n >\n {{val.label?val.label:val}}\n </div>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
PickerViewComponent.propDecorators = {
data: [{ type: Input }],
value: [{ type: Input }],
cols: [{ type: Input }],
cascade: [{ type: Input }],
indicatorStyle: [{ type: Input }],
itemStyle: [{ type: Input }],
onChange: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PickerViewModule {
}
PickerViewModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule
],
exports: [PickerViewComponent],
declarations: [PickerViewComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ImagePicker {
constructor() {
this.prefixCls = 'am-image-picker';
this.flexEl = [];
this._accept = 'image/*';
this._count = 4;
this._selectable = true;
this._files = [];
this._multiple = false;
this.onFail = new EventEmitter();
this.onChange = new EventEmitter();
this.onImageClick = new EventEmitter();
this.onAddImageClick = new EventEmitter();
}
/**
* @return {?}
*/
get files() {
return this._files;
}
/**
* @param {?} value
* @return {?}
*/
set files(value) {
this._files = value;
this.sortItem();
}
/**
* @return {?}
*/
get accept() {
return this._accept;
}
/**
* @param {?} value
* @return {?}
*/
set accept(value) {
this._accept = value;
this.sortItem();
}
/**
* @return {?}
*/
get length() {
return this._count;
}
/**
* @param {?} value
* @return {?}
*/
set length(value) {
if (value > 0) {
this._count = value;
}
else {
this._count = 4;
}
this.sortItem();
}
/**
* @return {?}
*/
get multiple() {
return this._multiple;
}
/**
* @param {?} value
* @return {?}
*/
set multiple(value) {
this._multiple = value;
this.sortItem();
}
/**
* @return {?}
*/
get selectable() {
return this._selectable;
}
/**
* @param {?} value
* @return {?}
*/
set selectable(value) {
this._selectable = value;
this.sortItem();
}
/**
* @return {?}
*/
sortItem() {
if (!this._files) {
return;
}
/** @type {?} */
let count = parseInt('' + this._count, 10);
if (count <= 0) {
count = 4;
}
/** @type {?} */
let allEl = this._files.map(item => {
return {
type: 'img',
backgroundImage: 'url(' + item.url + ')',
transform: 'rotate(' + this.getRotation(item.orientation) + ')deg'
};
});
if (this._selectable) {
allEl.push({
type: 'select',
backgroundImage: '',
transform: ''
});
}
/** @type {?} */
const length = allEl.length;
if (length !== 0 && length % count !== 0) {
/** @type {?} */
const blankCount = count - (length % count);
/** @type {?} */
const fillBlankEl = [];
for (let i = 0; i < blankCount; i++) {
fillBlankEl.push({
type: 'white',
backgroundImage: '',
transform: ''
});
}
allEl = allEl.concat(fillBlankEl);
}
this.flexEl = [];
for (let i = 0; i < allEl.length / count; i++) {
/** @type {?} */
const rowEl = allEl.slice(i * count, i * count + count);
this.flexEl.push(rowEl);
}
}
/**
* @param {?} imgItem
* @return {?}
*/
addImage(imgItem) {
this._files.push({
type: 'img',
url: imgItem.url,
orientation: imgItem.orientation
});
this.sortItem();
this.onChange.emit({
files: this._files,
operationType: 'add',
index: this._files.length - 1
});
}
/**
* @param {?} index
* @return {?}
*/
removeImage(index) {
this._files.splice(index, 1);
this.sortItem();
this.onChange.emit({
files: this._files,
operationType: 'remove',
index: index
});
}
/**
* @param {?} index
* @return {?}
*/
imageClick(index) {
this.onImageClick.emit({
index: index,
files: this._files
});
}
/**
* @param {?} e
* @return {?}
*/
addImageClick(e) {
this.onAddImageClick.emit(e);
}
/**
* @param {?} file
* @param {?} index
* @return {?}
*/
parseFile(file, index) {
/** @type {?} */
const reader = new FileReader();
reader.onload = e => {
/** @type {?} */
const dataURL = (/** @type {?} */ (e.target)).result;
if (!dataURL) {
this.onFail.emit(`Fail to get the ${index} image`);
return;
}
/** @type {?} */
let orientation = 1;
this.getOrientation(file, res => {
// -2: not jpeg , -1: not defined
if (res > 0) {
orientation = res;
}
this.addImage({
url: dataURL,
orientation,
file
});
});
};
reader.readAsDataURL(file);
}
/**
* @param {?} event
* @return {?}
*/
fileChange(event) {
/** @type {?} */
const fileList = event.target.files;
if (fileList && fileList.length) {
for (let i = 0; i < fileList.length; i++) {
this.parseFile(fileList[i], i);
}
}
}
/**
* @param {?=} orientation
* @return {?}
*/
getRotation(orientation = 1) {
/** @type {?} */
let imgRotation = 0;
switch (orientation) {
case 3:
imgRotation = 180;
break;
case 6:
imgRotation = 90;
break;
case 8:
imgRotation = 270;
break;
default:
}
return imgRotation;
}
/**
* @param {?} file
* @param {?} callback
* @return {?}
*/
getOrientation(file, callback) {
/** @type {?} */
const reader = new FileReader();
reader.onload = e => {
/** @type {?} */
const view = new DataView((/** @type {?} */ (e.target)).result);
if (view.getUint16(0, false) !== 0xffd8) {
return callback(-2);
}
/** @type {?} */
const length = view.byteLength;
/** @type {?} */
let offset = 2;
while (offset < length) {
/** @type {?} */
const marker = view.getUint16(offset, false);
offset += 2;
if (marker === 0xffe1) {
/** @type {?} */
const tmp = view.getUint32((offset += 2), false);
if (tmp !== 0x45786966) {
return callback(-1);
}
/** @type {?} */
const little = view.getUint16((offset += 6), false) === 0x4949;
offset += view.getUint32(offset + 4, little);
/** @type {?} */
const tags = view.getUint16(offset, little);
offset += 2;
for (let i = 0; i < tags; i++) {
if (view.getUint16(offset + i * 12, little) === 0x0112) {
return callback(view.getUint16(offset + i * 12 + 8, little));
}
}
}
else if ((marker & 0xff00) !== 0xff00) {
break;
}
else {
offset += view.getUint16(offset, false);
}
}
return callback(-1);
};
reader.readAsArrayBuffer(file.slice(0, 64 * 1024));
}
}
ImagePicker.decorators = [
{ type: Component, args: [{
selector: 'ImagePicker, nzm-image-picker',
template: "<div class=\"{{prefixCls}}-list\" role=\"group\">\n <Flex *ngFor=\"let rowItem of flexEl;let i = index;\">\n <FlexItem *ngFor=\"let item of rowItem;let j =index;\">\n <div *ngIf=\"item && 'img' === item.type && item.backgroundImage\" class=\"{{prefixCls}}-item\">\n <div role=\"button\"\n aria-label=\"Click and Remove this image\"\n class=\"{{prefixCls}}-item-remove\"\n (click)=\"removeImage(i * length + j)\"\n ></div>\n <div role=\"button\"\n aria-label=\"Image can be clicked\"\n class=\"{{prefixCls}}-item-content\"\n [ngStyle]=\"{'background-image': item.backgroundImage, 'transform': item.transform}\"\n (click)=\"imageClick(i * length + j)\"\n ></div>\n </div>\n <div role=\"button\"\n aria-label=\"Choose and add image\"\n *ngIf=\"item && 'select' === item.type\"\n class=\"{{prefixCls}}-item {{prefixCls}}-upload-btn\"\n (click)=\"addImageClick($event)\"\n >\n <input #fileSelectorInput\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"fileChange($event)\"\n />\n </div>\n <div *ngIf=\"item && 'white' === item.type\" class=\"{{prefixCls}}-item-white\">\n </div>\n </FlexItem>\n </Flex>\n</div>\n"
}] }
];
/** @nocollapse */
ImagePicker.ctorParameters = () => [];
ImagePicker.propDecorators = {
_fileSelectorInput: [{ type: ViewChild, args: ['fileSelectorInput', { read: ViewContainerRef },] }],
files: [{ type: Input }],
accept: [{ type: Input }],
length: [{ type: Input }],
multiple: [{ type: Input }],
selectable: [{ type: Input }],
onFail: [{ type: Output }],
onChange: [{ type: Output }],
onImageClick: [{ type: Output }],
onAddImageClick: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ImagePickerModule {
}
ImagePickerModule.decorators = [
{ type: NgModule, args: [{
declarations: [ImagePicker],
exports: [ImagePicker],
imports: [CommonModule, FlexModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Result {
constructor() {
this.prefixCls = 'am-result';
this.isTitleString = true;
this.isMessageString = true;
this.onButtonClick = new EventEmitter();
this.role = 'alert';
this.amResult = true;
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
if (this.isTemplateRef(value)) {
this.isTitleString = false;
}
else {
this.isTitleString = true;
}
this._title = value;
}
/**
* @return {?}
*/
get message() {
return this._message;
}
/**
* @param {?} value
* @return {?}
*/
set message(value) {
if (this.isTemplateRef(value)) {
this.isMessageString = false;
}
else {
this.isMessageString = true;
}
this._message = value;
}
/**
* @param {?} event
* @return {?}
*/
buttonClick(event) {
this.onButtonClick.emit(event);
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
if (value) {
return value instanceof TemplateRef;
}
return false;
}
}
Result.decorators = [
{ type: Component, args: [{
selector: 'Result, nzm-result',
template: "<div *ngIf=\"img\" class=\"{{prefixCls}}-pic\">\n <ng-template [ngTemplateOutlet]=\"img\"></ng-template>\n</div>\n<div *ngIf=\"!img && imgUrl\"\n class=\"{{prefixCls}}-pic\"\n [ngStyle]=\"{ backgroundImage: 'url('+ imgUrl +')' }\"\n></div>\n<div *ngIf=\"title\" class=\"{{prefixCls}}-title\">\n <ng-template *ngIf=\"!isTitleString\" [ngTemplateOutlet]=\"title\"></ng-template>\n <span *ngIf=\"isTitleString\">{{title}}</span>\n</div>\n<div [ngClass]=\"prefixCls+'-message'\">\n <ng-template *ngIf=\"!isMessageString\" [ngTemplateOutlet]=\"message\"></ng-template>\n <span *ngIf=\"isMessageString\">{{message}}</span>\n</div>\n<div *ngIf=\"buttonText\" class=\"{{prefixCls}}-button\">\n <a Button [type]=\"buttonType\" (click)=\"buttonClick($event)\">\n {{buttonText}}\n </a>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
Result.ctorParameters = () => [];
Result.propDecorators = {
title: [{ type: Input }],
imgUrl: [{ type: Input }],
buttonText: [{ type: Input }],
buttonType: [{ type: Input }],
img: [{ type: Input }],
message: [{ type: Input }],
onButtonClick: [{ type: Output }],
role: [{ type: HostBinding, args: ['attr.role',] }],
amResult: [{ type: HostBinding, args: ['class.am-result',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ResultModule {
}
ResultModule.decorators = [
{ type: NgModule, args: [{
declarations: [Result],
exports: [Result],
imports: [CommonModule, IconModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Range {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.prefixCls = 'am-slider';
this.offset = [];
this.length = [];
this._min = 0;
this._max = 100;
this._step = 1;
this._defaultValue = [0, 0, 0];
this._disabled = false;
this._marks = {};
this._dots = false;
this._included = true;
this._count = 1;
this._allowCross = true;
this._handleStyle = [];
this._trackStyle = [];
this.onChange = new EventEmitter();
this.onAfterChange = new EventEmitter();
this.amWrapper = true;
}
/**
* @return {?}
*/
get min() {
return this._min;
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
this._min = value;
}
/**
* @return {?}
*/
get max() {
return this._max;
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
this._max = value;
}
/**
* @return {?}
*/
get step() {
return this._step;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} value
* @return {?}
*/
set value(value) {
this._value = value;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
}
/**
* @return {?}
*/
get marks() {
return this._marks;
}
/**
* @param {?} value
* @return {?}
*/
set marks(value) {
this._marks = value;
}
/**
* @return {?}
*/
get dots() {
return this._dots;
}
/**
* @param {?} value
* @return {?}
*/
set dots(value) {
this._dots = value;
}
/**
* @return {?}
*/
get included() {
return this._included;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set count(value) {
this._count = value;
}
/**
* @param {?} value
* @return {?}
*/
set allowCross(value) {
this._allowCross = value;
this.setValueBound();
}
/**
* @param {?} value
* @return {?}
*/
set pushable(value) {
this._pushable = value;
if (this.verifyPushable()) {
this.setValueBound();
}
}
/**
* @return {?}
*/
get handleStyle() {
return this._handleStyle;
}
/**
* @param {?} value
* @return {?}
*/
set handleStyle(value) {
this._handleStyle = value;
}
/**
* @return {?}
*/
get trackStyle() {
return this._trackStyle;
}
/**
* @param {?} value
* @return {?}
*/
set trackStyle(value) {
this._trackStyle = value;
}
/**
* @return {?}
*/
get railStyle() {
return this._railStyle;
}
/**
* @param {?} value
* @return {?}
*/
set railStyle(value) {
this._railStyle = value;
}
/**
* @return {?}
*/
setCls() {
this.sliderCls = {
[`${this.prefixCls}-disabled`]: this._disabled
};
}
/**
* @return {?}
*/
initialValue() {
/** @type {?} */
const minTemp = this._min;
/** @type {?} */
const initialValue = Array.apply(null, Array(this._count + 1)).map(function () {
return minTemp;
});
this._defaultValue = this._defaultValue !== undefined ? this._defaultValue : initialValue;
this._value = this._value !== undefined ? this._value : this._defaultValue;
if (this._count > 0) {
this.upperBound = Math.max(...this._value);
this.lowerBound = Math.min(...this._value);
}
}
/**
* @param {?} e
* @param {?} i
* @return {?}
*/
handleChange(e, i) {
/** @type {?} */
let temp = [...this._value];
if (typeof this._pushable === 'boolean' && this._pushable) {
/** @type {?} */
const diff = e - this._value[i];
temp = temp.map(v => (v = v + diff));
}
else {
temp[i] = e;
}
this.upperBound = Math.max(...temp);
this.lowerBound = Math.min(...temp);
this.setTrackStyle(temp);
this.onChange.emit(temp);
}
/**
* @param {?} e
* @param {?} i
* @return {?}
*/
handleAfterChange(e, i) {
setTimeout(() => {
this._value[i] = e;
this.upperBound = Math.max(...this._value);
this.lowerBound = Math.min(...this._value);
this.setTrackStyle(this._value);
this.onAfterChange.emit(this._value);
this.setValueBound();
}, 0);
}
/**
* @param {?} value
* @return {?}
*/
setTrackStyle(value) {
if (value && value.length === this._count + 1) {
value.sort((a, b) => a - b);
for (let i = 0; i < this._count; i++) {
this.offset[i] = (value[i] * 100) / (this._max - this._min);
this.length[i] = ((value[i + 1] - value[i]) * 100) / (this._max - this._min);
}
}
}
/**
* @return {?}
*/
setValueBound() {
this.maxBound = [];
this.minBound = [];
if (this._allowCross || this._handleCount <= 1) {
for (let i = 0; i < this._handleCount; i++) {
this.maxBound[i] = this._max;
this.minBound[i] = this._min;
}
}
else {
if (typeof this._pushable !== 'number' || (typeof this._pushable === 'boolean' && this._pushable)) {
this._pushable = 0;
}
for (let i = 0; i < this._handleCount; i++) {
this.maxBound[i] = i === this._handleCount - 1 ? this._max : this._value[i + 1] - this._pushable;
this.minBound[i] = i === 0 ? this._min : this._value[i - 1] + this._pushable;
}
}
}
/**
* @return {?}
*/
verifyPushable() {
if (typeof this._pushable === 'number') {
for (let i = 1; i < this._handleCount; i++) {
/** @type {?} */
const diff = this._value[i] - this._value[i - 1];
if (diff < this._pushable) {
return false;
}
}
}
return true;
}
/**
* @return {?}
*/
ngOnInit() {
if (this._max === undefined || this._min === undefined) {
return;
}
if (this.verifyPushable()) {
this.setValueBound();
this._handleCount = this._count + 1;
this.setCls();
/** @type {?} */
const sliderCoords = this._elf.nativeElement.getElementsByClassName('am-slider')[0].getBoundingClientRect();
this.sliderLength = sliderCoords.width;
this.sliderStart = sliderCoords.left;
this.initialValue();
}
}
}
Range.decorators = [
{ type: Component, args: [{
selector: 'Range , nzm-range',
template: "<div class=\"am-slider\" [ngClass]=\"sliderCls\">\n <div class=\"am-slider-rail\" [ngStyle]=\"railStyle\"></div>\n <SliderTrack *ngFor=\"let off of offset ; let i = index\"\n [className]=\"'am-slider-track'\"\n [included]=\"included\"\n [style]=\"trackStyle[i]\"\n [offset]=\"off\"\n [length]=\"length[i]\"\n ></SliderTrack>\n <SliderSteps [max]=\"max\"\n [min]=\"min\"\n [dots]=\"dots\"\n [step]=\"step\"\n [marks]=\"marks\"\n [upperBound]=\"upperBound\"\n [lowerBound]=\"lowerBound\"\n ></SliderSteps>\n <SliderHandle *ngFor=\"let val of value ; let i = index\"\n [max]=\"max\"\n [min]=\"min\"\n [maxBound]=\"maxBound[i]\"\n [minBound]=\"minBound[i]\"\n [value]=\"val\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [sliderLength]=\"sliderLength\"\n [sliderStart]=\"sliderStart\"\n [handleStyle]=\"handleStyle[i]\"\n (onChange)=\"handleChange($event , i)\"\n (onAfterChange)=\"handleAfterChange($event , i)\"\n ></SliderHandle>\n <SliderMarks [max]=\"max\"\n [min]=\"min\"\n [marks]=\"marks\"\n [upperBound]=\"upperBound\"\n [lowerBound]=\"lowerBound\"\n ></SliderMarks>\n</div>\n"
}] }
];
/** @nocollapse */
Range.ctorParameters = () => [
{ type: ElementRef }
];
Range.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
step: [{ type: Input }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
disabled: [{ type: Input }],
marks: [{ type: Input }],
dots: [{ type: Input }],
included: [{ type: Input }],
count: [{ type: Input }],
allowCross: [{ type: Input }],
pushable: [{ type: Input }],
handleStyle: [{ type: Input }],
trackStyle: [{ type: Input }],
railStyle: [{ type: Input }],
onChange: [{ type: Output }],
onAfterChange: [{ type: Output }],
amWrapper: [{ type: HostBinding, args: ['class.am-slider-wrapper',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Slider {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.prefixCls = 'am-slider';
this.offset = 0;
this.length = 0;
this._min = 0;
this._max = 100;
this._step = 1;
this._value = 10;
this._disabled = false;
this._marks = {};
this._dots = false;
this._included = true;
this._trackStyle = {};
this.onChange = new EventEmitter();
this.onAfterChange = new EventEmitter();
this.amSliderWrapper = true;
}
/**
* @return {?}
*/
get min() {
return this._min;
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
this._min = value;
}
/**
* @return {?}
*/
get max() {
return this._max;
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
this._max = value;
}
/**
* @return {?}
*/
get step() {
return this._step;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} value
* @return {?}
*/
set value(value) {
this._value = value;
this.valueRange();
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.setCls();
}
/**
* @return {?}
*/
get marks() {
return this._marks;
}
/**
* @param {?} value
* @return {?}
*/
set marks(value) {
this._marks = value;
}
/**
* @return {?}
*/
get dots() {
return this._dots;
}
/**
* @param {?} value
* @return {?}
*/
set dots(value) {
this._dots = value;
}
/**
* @return {?}
*/
get included() {
return this._included;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @return {?}
*/
get handleStyle() {
return this._handleStyle;
}
/**
* @param {?} value
* @return {?}
*/
set handleStyle(value) {
this._handleStyle = value;
}
/**
* @return {?}
*/
get trackStyle() {
return this._trackStyle;
}
/**
* @param {?} value
* @return {?}
*/
set trackStyle(value) {
this._trackStyle = value;
}
/**
* @return {?}
*/
get railStyle() {
return this._railStyle;
}
/**
* @param {?} value
* @return {?}
*/
set railStyle(value) {
this._railStyle = value;
}
/**
* @return {?}
*/
setCls() {
this.sliderCls = {
[`${this.prefixCls}-disabled`]: this._disabled
};
}
/**
* @param {?} e
* @return {?}
*/
handleChange(e) {
setTimeout(() => {
this.offset = 0;
this.length = ((e - this._min) * 100) / (this._max - this._min);
this._value = e;
}, 10);
this.onChange.emit(e);
}
/**
* @param {?} e
* @return {?}
*/
handleAfterChange(e) {
setTimeout(() => {
this.offset = 0;
this.length = ((e - this._min) * 100) / (this._max - this._min);
this._value = e;
}, 10);
this.onAfterChange.emit(e);
}
/**
* @return {?}
*/
valueRange() {
if (this._value < this._min) {
this._value = this._min;
}
if (this._value > this._max) {
this._value = this._max;
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setCls();
this.valueRange();
/** @type {?} */
const sliderCoords = this._elf.nativeElement.getElementsByClassName('am-slider')[0].getBoundingClientRect();
this.sliderLength = sliderCoords.width;
this.sliderStart = sliderCoords.left;
}
}
Slider.decorators = [
{ type: Component, args: [{
selector: 'Slider , nzm-slider',
template: "<div class=\"am-slider\" [ngClass]=\"sliderCls\">\n <div class=\"am-slider-rail\" [ngStyle]=\"railStyle\"></div>\n <SliderTrack [className]=\"'am-slider-track'\"\n [style]=\"trackStyle\"\n [offset]=\"offset\"\n [length]=\"length\"\n [included]=\"included\"\n ></SliderTrack>\n <SliderSteps [max]=\"max\"\n [min]=\"min\"\n [dots]=\"dots\"\n [step]=\"step\"\n [marks]=\"marks\"\n [lowerBound]=\"min\"\n [upperBound]=\"value\"\n [included]=\"included\"\n ></SliderSteps>\n <SliderHandle [max]=\"max\"\n [min]=\"min\"\n [value]=\"value\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [handleStyle]=\"handleStyle\"\n [sliderStart]=\"sliderStart\"\n [sliderLength]=\"sliderLength\"\n (onChange)=\"handleChange($event)\"\n (onAfterChange)=\"handleAfterChange($event)\"\n ></SliderHandle>\n <SliderMarks [max]=\"max\"\n [min]=\"min\"\n [marks]=\"marks\"\n [lowerBound]=\"min\"\n [upperBound]=\"value\"\n [included]=\"included\"\n ></SliderMarks>\n</div>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
Slider.ctorParameters = () => [
{ type: ElementRef }
];
Slider.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
step: [{ type: Input }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
disabled: [{ type: Input }],
marks: [{ type: Input }],
dots: [{ type: Input }],
included: [{ type: Input }],
handleStyle: [{ type: Input }],
trackStyle: [{ type: Input }],
railStyle: [{ type: Input }],
onChange: [{ type: Output }],
onAfterChange: [{ type: Output }],
amSliderWrapper: [{ type: HostBinding, args: ['class.am-slider-wrapper',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SliderHandle {
/**
* @param {?} _elf
* @param {?} _sanitizer
*/
constructor(_elf, _sanitizer) {
this._elf = _elf;
this._sanitizer = _sanitizer;
this._disabled = false;
this._marks = {};
this._isDraging = false;
this.onChange = new EventEmitter();
this.onAfterChange = new EventEmitter();
this.mouseDown = event => {
if (!this._disabled && this.isMouseTarget(event)) {
this._startX = event.clientX;
this._handleStatus = 'start';
this._isDraging = true;
document.addEventListener('mousemove', this.mouseMove, false);
document.addEventListener('mouseup', this.mouseUp, false);
this.pauseEvent(event);
}
};
this.mouseMove = event => {
if (!this._disabled && this._isDraging) {
this.pauseEvent(event);
/** @type {?} */
const pos = event.clientX;
this._value = Math.round(this.calcValueByPos(pos));
this.left = this.calcOffset(this._value);
if (this._oldValue !== this._value) {
this._oldValue = this._value;
this.onChange.emit(this._value);
}
}
};
this.mouseUp = event => {
if (!this._disabled && this._isDraging) {
this._handleStatus = 'end';
this._isDraging = false;
/** @type {?} */
const pos = event.clientX;
this._value = Math.round(this.calcValueByPos(pos));
this.left = this.calcOffset(this._value);
this.onAfterChange.emit(this._value);
}
};
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
this._min = value;
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
this._max = value;
}
/**
* @param {?} value
* @return {?}
*/
set minBound(value) {
this._minBound = value;
}
/**
* @param {?} value
* @return {?}
*/
set maxBound(value) {
this._maxBound = value;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @param {?} value
* @return {?}
*/
set value(value) {
this._value = value;
if (this._value) {
this.left = this.calcOffset(this._value);
}
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
}
/**
* @param {?} value
* @return {?}
*/
set sliderLength(value) {
this._sliderLength = value;
}
/**
* @param {?} value
* @return {?}
*/
set sliderStart(value) {
this._sliderStart = value;
}
/**
* @return {?}
*/
get handleStyle() {
return this._handleStyle;
}
/**
* @param {?} value
* @return {?}
*/
set handleStyle(value) {
this._handleStyle = value;
}
/**
* @param {?} event
* @return {?}
*/
panstart(event) {
event.preventDefault();
if (!this._disabled) {
this._startX = event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientX;
this._handleStatus = 'start';
this._isDraging = true;
}
}
/**
* @param {?} event
* @return {?}
*/
panmove(event) {
event.preventDefault();
if (!this._disabled && this._isDraging) {
/** @type {?} */
const pos = event.changedTouches[0].clientX;
this._value = Math.round(this.calcValueByPos(pos));
this.left = this.calcOffset(this._value);
if (this._oldValue !== this._value) {
this._oldValue = this._value;
this.onChange.emit(this._value);
}
}
}
/**
* @param {?} event
* @return {?}
*/
panend(event) {
event.preventDefault();
if (!this._disabled && this._isDraging) {
this._handleStatus = 'end';
this._isDraging = false;
/** @type {?} */
const pos = event.changedTouches[0].clientX;
this._value = Math.round(this.calcValueByPos(pos));
this.left = this.calcOffset(this._value);
this.onAfterChange.emit(this._value);
}
}
/**
* @param {?} pos
* @return {?}
*/
calcValueByPos(pos) {
/** @type {?} */
const offset = pos - this._sliderStart;
/** @type {?} */
let value = this.calcValue(offset);
if (value <= this._minBound) {
value = this._minBound;
}
if (value >= this._maxBound) {
value = this._maxBound;
}
/** @type {?} */
const closestPoint = this.getClosestPoint(value);
return this._step === null ? closestPoint : parseFloat(closestPoint.toFixed(this.getPrecision(this._step)));
}
/**
* @param {?} offset
* @return {?}
*/
calcValue(offset) {
/** @type {?} */
const ratio = Math.abs(Math.max(offset, 0) / this._sliderLength);
/** @type {?} */
const value = ratio * (this._max - this._min) + this._min;
return value;
}
/**
* @param {?} val
* @return {?}
*/
getClosestPoint(val) {
/** @type {?} */
const points = Object.keys(this._marks).map(parseFloat);
if (this._step !== null) {
/** @type {?} */
const closestStep = Math.round((val - this._min) / this._step) * this._step + this._min;
points.push(closestStep);
}
/** @type {?} */
const diffs = points.map(function (point) {
return Math.abs(val - point);
});
return points[diffs.indexOf(Math.min.apply(Math, this.toConsumableArray(diffs)))];
}
/**
* @param {?} step
* @return {?}
*/
getPrecision(step) {
/** @type {?} */
const stepString = step.toString();
/** @type {?} */
let precision = 0;
if (stepString.indexOf('.') >= 0) {
precision = stepString.length - stepString.indexOf('.') - 1;
}
return precision;
}
/**
* @param {?} value
* @return {?}
*/
calcOffset(value) {
/** @type {?} */
const ratio = (value - this._min) / (this._max - this._min);
return ratio * 100;
}
/**
* @param {?} e
* @return {?}
*/
pauseEvent(e) {
e.stopPropagation();
e.preventDefault();
}
/**
* @param {?} event
* @return {?}
*/
isMouseTarget(event) {
/** @type {?} */
let target = event.target;
/** @type {?} */
let parentFound = false;
while (target !== null && !parentFound) {
if (target === this._elf.nativeElement) {
parentFound = true;
}
target = target.parentElement;
}
return parentFound;
}
/**
* @param {?} arr
* @return {?}
*/
toConsumableArray(arr) {
if (Array.isArray(arr)) {
/** @type {?} */
const arr2 = Array(arr.length);
for (let i = 0; i < arr.length; i++) {
arr2[i] = arr[i];
}
return arr2;
}
}
/**
* @return {?}
*/
ngOnInit() {
this._elf.nativeElement.addEventListener('mousedown', this.mouseDown, false);
this._handleOffsetX = this._elf.nativeElement.getBoundingClientRect().x;
this.left = this.calcOffset(this._value);
this._minBound = this._minBound === undefined ? this._min : this._minBound;
this._maxBound = this._maxBound === undefined ? this._max : this._maxBound;
this.onAfterChange.emit(this._value);
}
/**
* @return {?}
*/
ngOnDestroy() {
document.removeEventListener('mousemove', this.mouseMove, false);
document.removeEventListener('mouseup', this.mouseUp, false);
}
}
SliderHandle.decorators = [
{ type: Component, args: [{
selector: 'SliderHandle, nzm-slider-handle',
template: "<div role=\"slider\"\n class=\"am-slider-handle\"\n [ngStyle]=\"handleStyle\"\n [style.left.%]=\"left\">\n</div>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SliderHandle.ctorParameters = () => [
{ type: ElementRef },
{ type: DomSanitizer }
];
SliderHandle.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
minBound: [{ type: Input }],
maxBound: [{ type: Input }],
step: [{ type: Input }],
value: [{ type: Input }],
disabled: [{ type: Input }],
sliderLength: [{ type: Input }],
sliderStart: [{ type: Input }],
handleStyle: [{ type: Input }],
onChange: [{ type: Output }],
onAfterChange: [{ type: Output }],
panstart: [{ type: HostListener, args: ['touchstart', ['$event'],] }],
panmove: [{ type: HostListener, args: ['touchmove', ['$event'],] }],
panend: [{ type: HostListener, args: ['touchend', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SliderMarks {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.markArray = [];
this._min = 0;
this._max = 100;
this._marks = {};
this._included = true;
this._className = 'am-slider-mark';
this.onChange = new EventEmitter();
this.onAfterChange = new EventEmitter();
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
if (value && value <= this._max) {
this._min = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
if (value && value >= this._min) {
this._max = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set marks(value) {
this._marks = value;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set upperBound(value) {
if (value && value !== this._upperBound) {
this._upperBound = value;
this.setActiveCls();
}
}
/**
* @param {?} value
* @return {?}
*/
set lowerBound(value) {
if (value && value !== this.lowerBound) {
this._lowerBound = value;
this.setActiveCls();
}
}
/**
* @return {?}
*/
get class() {
return this._className;
}
/**
* @param {?} marksKeys
* @return {?}
*/
getMarks(marksKeys) {
this.markArray = [];
marksKeys
.map(parseFloat)
.sort((a, b) => a - b)
.map(point => {
/** @type {?} */
const markItem = {
markLabel: '',
point: '',
className: {},
style: {}
};
/** @type {?} */
const markPoint = this._marks[point];
/** @type {?} */
const markPointIsObject = typeof markPoint === 'object';
/** @type {?} */
const markLabel = markPointIsObject ? markPoint.label : markPoint;
if (!markLabel && markLabel !== 0) {
return null;
}
/** @type {?} */
const isActive = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
/** @type {?} */
const markClassName = {
[`${this._className}-text`]: true,
[`${this._className}-text-active`]: isActive
};
/** @type {?} */
const bottomStyle = {
marginBottom: '-50%',
bottom: `${((point - this._min) / this._range) * 100}%`
};
/** @type {?} */
const leftStyle = {
width: `${this._markWidth}%`,
marginLeft: `${-this._markWidth / 2}%`,
left: `${((point - this._min) / this._range) * 100}%`
};
/** @type {?} */
const style$$1 = leftStyle;
/** @type {?} */
const markStyle = markPointIsObject ? Object.assign({}, style$$1, markPoint.style) : style$$1;
markItem.markLabel = markLabel;
markItem.point = point;
markItem.className = Object.keys(markClassName).join(' ');
markItem.style = markStyle;
this.markArray.push(markItem);
});
}
/**
* @return {?}
*/
setActiveCls() {
for (let i = 0; i < this.markArray.length; i++) {
/** @type {?} */
const point = this.markArray[i].point;
/** @type {?} */
const isActive = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
this.markArray[i].className = {
[`${this._className}-text`]: true,
[`${this._className}-text-active`]: isActive
};
}
}
/**
* @return {?}
*/
setMarksLable() {
for (let i = 0; i < this.markArray.length; i++) {
/** @type {?} */
const markEle = this._elf.nativeElement.getElementsByClassName(this._className + '-text')[i];
markEle.innerHTML = this.markArray[i].markLabel;
}
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const marksKeys = Object.keys(this._marks);
/** @type {?} */
const marksCount = marksKeys.length;
/** @type {?} */
const unit = marksCount > 1 ? 100 / (marksCount - 1) : 100;
this._markWidth = unit * 0.9;
this._range = this._max - this._min;
this.getMarks(marksKeys);
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.setMarksLable();
}
}
SliderMarks.decorators = [
{ type: Component, args: [{
selector: 'SliderMarks, nzm-slider-marks',
template: "<span *ngFor=\"let item of markArray\"\n [ngClass]=\"item.className\"\n [ngStyle]=\"item.style\"\n (onMouseDown)=\"onClickLabel($event, point)\"\n (onTouchStart)=\"onClickLabel($events, point)\">\n</span>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SliderMarks.ctorParameters = () => [
{ type: ElementRef }
];
SliderMarks.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
marks: [{ type: Input }],
included: [{ type: Input }],
upperBound: [{ type: Input }],
lowerBound: [{ type: Input }],
onChange: [{ type: Output }],
onAfterChange: [{ type: Output }],
class: [{ type: HostBinding }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SliderSteps {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.prefixCls = 'am-slider';
this.stepArray = [];
this._min = 0;
this._max = 100;
this._marks = {};
this._included = true;
this._dots = false;
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
if (value && value <= this._max) {
this._min = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
if (value && value >= this._min) {
this._max = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set marks(value) {
this._marks = value;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set dots(value) {
this._dots = value;
}
/**
* @param {?} value
* @return {?}
*/
set upperBound(value) {
if (value !== undefined && value !== this._upperBound) {
this._upperBound = value;
this.setActiveCls();
}
}
/**
* @param {?} value
* @return {?}
*/
set lowerBound(value) {
if (value !== undefined && value !== this.lowerBound) {
this._lowerBound = value;
this.setActiveCls();
}
}
/**
* @return {?}
*/
get class() {
return 'am-slider-step';
}
/**
* @return {?}
*/
calPoints() {
/** @type {?} */
const points = Object.keys(this._marks).map(parseFloat);
if (this._dots) {
for (let i = this._min; i <= this._max; i = i + this._step) {
if (points.indexOf(i) < 0) {
points.push(i);
}
}
}
return points;
}
/**
* @param {?} points
* @return {?}
*/
getSteps(points) {
/** @type {?} */
const range = this._max - this._min;
this.stepArray = [];
points.map(point => {
/** @type {?} */
const stepItem = {
stepStyle: {},
stepClass: {},
point: null
};
/** @type {?} */
const offset = `${(Math.abs(point - this._min) / range) * 100}%`;
/** @type {?} */
const isActived = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
/** @type {?} */
let style$$1 = Object.assign({ left: offset }, this._dotStyle);
if (isActived) {
style$$1 = Object.assign({}, style$$1, this._activeDotStyle);
}
/** @type {?} */
const pointClassName = {
[`${this.prefixCls}-dot`]: true,
[`${this.prefixCls}-dot-active`]: isActived
};
stepItem.point = point;
stepItem.stepStyle = style$$1;
stepItem.stepClass = pointClassName;
this.stepArray.push(stepItem);
});
}
/**
* @return {?}
*/
setActiveCls() {
for (let i = 0; i < this.stepArray.length; i++) {
/** @type {?} */
const point = this.stepArray[i].point;
/** @type {?} */
const isActived = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
this.stepArray[i].stepClass = {
[`${this.prefixCls}-dot`]: true,
[`${this.prefixCls}-dot-active`]: isActived
};
}
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const points = this.calPoints();
this.getSteps(points);
}
}
SliderSteps.decorators = [
{ type: Component, args: [{
selector: 'SliderSteps, nzm-slider-steps',
template: "<span *ngFor=\"let item of stepArray\"\n [ngClass]=\"item.stepClass\"\n [ngStyle]=\"item.stepStyle\">\n</span>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SliderSteps.ctorParameters = () => [
{ type: ElementRef }
];
SliderSteps.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
marks: [{ type: Input }],
step: [{ type: Input }],
included: [{ type: Input }],
dots: [{ type: Input }],
upperBound: [{ type: Input }],
lowerBound: [{ type: Input }],
class: [{ type: HostBinding }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SliderTrack {
/**
* @param {?} _elf
* @param {?} _sanitizer
*/
constructor(_elf, _sanitizer) {
this._elf = _elf;
this._sanitizer = _sanitizer;
this.prefixCls = 'am-slider';
this._included = true;
}
/**
* @return {?}
*/
get className() {
return this._className;
}
/**
* @param {?} value
* @return {?}
*/
set className(value) {
this._className = value;
}
/**
* @return {?}
*/
get included() {
return this._included;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set offset(value) {
this._offset = value;
}
/**
* @param {?} value
* @return {?}
*/
set length(value) {
this._length = value;
}
/**
* @param {?} value
* @return {?}
*/
set style(value) {
this._style = value;
}
/**
* @return {?}
*/
ngOnChanges() {
/** @type {?} */
const positonStyle = {
left: `${this._offset}%`,
width: `${this._length}%`
};
this.elStyle = Object.assign({}, this._style, positonStyle);
}
}
SliderTrack.decorators = [
{ type: Component, args: [{
selector: 'SliderTrack, nzm-slider-track',
template: "<div *ngIf=\"included\" \n [ngClass]=\"className\" \n [ngStyle]=\"elStyle\" >\n</div>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SliderTrack.ctorParameters = () => [
{ type: ElementRef },
{ type: DomSanitizer }
];
SliderTrack.propDecorators = {
className: [{ type: Input }],
included: [{ type: Input }],
offset: [{ type: Input }],
length: [{ type: Input }],
style: [{ type: Input }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SliderModule {
}
SliderModule.decorators = [
{ type: NgModule, args: [{
exports: [Slider, SliderHandle, SliderMarks, SliderSteps, SliderTrack],
declarations: [Slider, SliderHandle, SliderMarks, SliderSteps, SliderTrack],
imports: [CommonModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class RangeModule {
}
RangeModule.decorators = [
{ type: NgModule, args: [{
exports: [Range],
declarations: [Range],
imports: [CommonModule, SliderModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PaginationComponent {
/**
* @param {?} _localeProviderService
*/
constructor(_localeProviderService) {
this._localeProviderService = _localeProviderService;
this.prefixCls = 'am-pagination';
this._locale = {};
this._unsubscribe$ = new Subject();
this.mode = 'button';
this.current = 1;
this.total = 0;
this.simple = false;
this.disabled = false;
this.onChange = new EventEmitter();
}
/**
* @return {?}
*/
get locale() {
return this._locale;
}
/**
* @param {?} v
* @return {?}
*/
set locale(v) {
this._locale = v;
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
/**
* @param {?} key
* @return {?}
*/
isTemplateRef(key) {
return /** @type {?} */ (key) instanceof TemplateRef;
}
/**
* @param {?} p
* @return {?}
*/
onClick(p) {
this.current = p;
this.onChange.emit(p);
}
/**
* @param {?} p
* @return {?}
*/
getNumber(p) {
return new Array(p);
}
/**
* @return {?}
*/
ngOnInit() {
this._localeProviderService.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe(_ => {
this._locale = this._localeProviderService.getLocaleSubObj('Pagination');
});
}
/**
* @return {?}
*/
ngOnDestroy() {
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
}
PaginationComponent.decorators = [
{ type: Component, args: [{
selector: 'Pagination, nzm-pagination',
template: "<div class=\"{{prefixCls}} {{prefixCls}}-align-center\">\n <Flex *ngIf=\"mode === 'button'\">\n <FlexItem class=\"{{prefixCls}}-wrap-btn {{prefixCls}}-wrap-btn-prev\">\n <a Button [inline]=\"true\" [disabled]=\"current <= 1\" (onClick)=\"onClick(current - 1)\">\n <ng-container *ngIf=\"!isTemplateRef(locale.prevText)\">\n {{locale.prevText}}\n </ng-container>\n <ng-template *ngIf=\"isTemplateRef(locale.prevText)\" [ngTemplateOutlet]=\"locale.prevText\"></ng-template>\n </a>\n </FlexItem>\n <FlexItem class=\"{{prefixCls}}-wrap\" aria-live=\"assertive\" *ngIf=\"!simple\">\n <span class=\"active\">{{current}}</span>/\n <span>{{total}}</span>\n </FlexItem>\n <FlexItem class=\"{{prefixCls}}-wrap-btn {{prefixCls}}-wrap-btn-next\">\n <a Button [inline]=\"true\" [disabled]=\"current>= total\" (onClick)=\"onClick(current + 1)\">\n <ng-container *ngIf=\"!isTemplateRef(locale.nextText)\">\n {{locale.nextText}}\n </ng-container>\n <ng-template *ngIf=\"isTemplateRef(locale.nextText)\" [ngTemplateOutlet]=\"locale.nextText\"></ng-template>\n </a>\n </FlexItem>\n </Flex>\n\n <div class=\"{{prefixCls}}-wrap\" *ngIf=\"mode === 'number'\">\n <span class=\"active\">{{current}}</span>/<span>{{total}}</span>\n </div>\n\n <div class=\"{{prefixCls}}-wrap\" *ngIf=\"mode === 'pointer'\">\n <div *ngFor=\"let number of getNumber(total); let i = index\" class=\"{{prefixCls}}-wrap-dot {{current === i+1 ? (prefixCls + '-wrap-dot-active') : ''}}\">\n <span></span>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
PaginationComponent.ctorParameters = () => [
{ type: LocaleProviderService }
];
PaginationComponent.propDecorators = {
mode: [{ type: Input }],
current: [{ type: Input }],
total: [{ type: Input }],
simple: [{ type: Input }],
disabled: [{ type: Input }],
locale: [{ type: Input }],
onChange: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PaginationModule {
}
PaginationModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, ButtonModule, FlexModule, IconModule],
declarations: [PaginationComponent],
exports: [PaginationComponent],
providers: [LocaleProviderModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TagComponent {
constructor() {
this.prefixCls = 'am-tag';
this.closed = false;
this.wrapCls = {};
this._small = false;
this._closable = false;
this._selected = false;
this._disabled = false;
this.onChange = new EventEmitter();
this.onClose = new EventEmitter();
this.afterClose = new EventEmitter();
}
/**
* @return {?}
*/
get small() {
return this._small;
}
/**
* @param {?} v
* @return {?}
*/
set small(v) {
this._small = v;
this.setClassMap();
}
/**
* @return {?}
*/
get closable() {
return this._closable;
}
/**
* @param {?} v
* @return {?}
*/
set closable(v) {
this._closable = v;
this.setClassMap();
}
/**
* @param {?} v
* @return {?}
*/
set selected(v) {
this._selected = v;
this.setClassMap();
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} v
* @return {?}
*/
set disabled(v) {
this._disabled = v;
this.setClassMap();
}
/**
* @return {?}
*/
onClick() {
if (this._disabled) {
return;
}
this._selected = !this._selected;
this.onChange.emit(this._selected);
this.setClassMap();
}
/**
* @return {?}
*/
onTagClose() {
this.onClose.emit();
this.closed = true;
this.afterClose.emit();
}
/**
* @return {?}
*/
setClassMap() {
this.wrapCls = {
[this.prefixCls]: true,
[`${this.prefixCls}-normal`]: !this._disabled && (!this._selected || this._small || this._closable),
[`${this.prefixCls}-small`]: this._small,
[`${this.prefixCls}-active`]: this._selected && !this._disabled && !this._small && !this._closable,
[`${this.prefixCls}-disabled`]: this._disabled,
[`${this.prefixCls}-closable`]: this._closable
};
}
/**
* @return {?}
*/
ngOnInit() {
this.setClassMap();
}
}
TagComponent.decorators = [
{ type: Component, args: [{
selector: 'Tag, nzm-tag',
template: "<div *ngIf=\"!closed\" [ngClass]=\"wrapCls\" (click)=\"onClick()\">\n <div class=\"{{prefixCls}}-text\">\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"closable && !disabled && !small\"\n role=\"button\"\n class=\"{{prefixCls}}-close\"\n aria-label=\"remove tag\"\n (click)=\"onTagClose()\">\n <Icon aria-hidden=\"true\" [type]=\"'cross-circle'\" [size]=\"'xs'\"></Icon>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
TagComponent.ctorParameters = () => [];
TagComponent.propDecorators = {
small: [{ type: Input }],
closable: [{ type: Input }],
selected: [{ type: Input }],
disabled: [{ type: Input }],
onChange: [{ type: Output }],
onClose: [{ type: Output }],
afterClose: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class TagModule {
}
TagModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, IconModule],
declarations: [TagComponent],
exports: [TagComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class MenuComponent {
/**
* @param {?} _localeProviderService
*/
constructor(_localeProviderService) {
this._localeProviderService = _localeProviderService;
this.prefixCls = 'am-menu';
this.subMenuPrefixCls = 'am-sub-menu';
this.radioPrefixCls = 'am-radio';
this.multiSelectMenuBtnsCls = 'am-multi-select-btns';
this.menuSelectContanerPrefixCls = 'am-menu-select-container';
this.locale = {};
this._data = [];
this._unsubscribe$ = new Subject();
this.level = 2;
this.value = [];
this.height = document.documentElement.clientHeight / 2;
this.multiSelect = false;
this.onChange = new EventEmitter();
this.onOk = new EventEmitter();
this.onCancel = new EventEmitter();
}
/**
* @return {?}
*/
get data() {
return this._data;
}
/**
* @param {?} v
* @return {?}
*/
set data(v) {
this._data = v;
this.initData();
}
/**
* @return {?}
*/
onMenuOk() {
this.onOk.emit(this.value);
}
/**
* @return {?}
*/
onMenuCancel() {
this.onCancel.emit();
}
/**
* @return {?}
*/
getNewFsv() {
/** @type {?} */
let firstValue = '';
if (this.value && this.value.length) {
firstValue = /** @type {?} */ (this.value[0]);
}
else if (this._data && this._data.length && !this._data[0].isLeaf) {
firstValue = this._data[0].value;
}
return firstValue;
}
/**
* @param {?} dataItem
* @return {?}
*/
onClickFirstLevelItem(dataItem) {
this.firstLevelSelectValue = dataItem.value;
if (dataItem.isLeaf && this.onChange) {
this.onChange.emit([dataItem.value]);
}
this.initData();
}
/**
* @param {?} dataItem
* @return {?}
*/
onClickSubMenuItem(dataItem) {
this.value = this.getSelectValue(dataItem);
this.initData();
setTimeout(() => {
this.onChange.emit(this.value);
}, 300);
}
/**
* @param {?} dataItem
* @return {?}
*/
getSelectValue(dataItem) {
if (this.multiSelect) {
if (this.value && this.value.length > 0) {
if (this.level === 2 && this.value[0] !== this.firstLevelSelectValue) {
return [this.firstLevelSelectValue, [dataItem.value]];
}
else {
if (this.level == 1) {
/** @type {?} */
const chosenValues = Array.from(this.value);
/** @type {?} */
const existIndex = chosenValues.indexOf(dataItem.value);
if (existIndex === -1) {
chosenValues.push(dataItem.value);
}
else {
chosenValues.splice(existIndex, 1);
}
return chosenValues;
}
else {
/** @type {?} */
const chosenValues = Array.from(this.value[1]);
/** @type {?} */
const existIndex = chosenValues.indexOf(dataItem.value);
if (existIndex === -1) {
chosenValues.push(dataItem.value);
}
else {
chosenValues.splice(existIndex, 1);
}
return [this.firstLevelSelectValue, chosenValues];
}
}
}
else {
return this.level === 2 ? [this.firstLevelSelectValue, [dataItem.value]] : [dataItem.value];
}
}
return this.level === 2 ? [this.firstLevelSelectValue, dataItem.value] : [dataItem.value];
}
/**
* @return {?}
*/
initData() {
this.subMenuData = this._data;
if (this.level === 2) {
/** @type {?} */
let parent = this._data;
if (this.firstLevelSelectValue && this.firstLevelSelectValue !== '') {
parent = this._data.filter(dataItem => dataItem.value === this.firstLevelSelectValue);
}
if (parent[0] && parent[0].children && parent[0].isLeaf !== true) {
this.subMenuData = parent[0].children;
}
else {
this.subMenuData = [];
}
}
/** @type {?} */
let subValue = (this.value && this.value.length > 0 && [...this.value]) || [];
if (this.level === 2 && subValue.length > 1) {
subValue.shift();
if (this.multiSelect) {
subValue = /** @type {?} */ (subValue[0]);
}
}
this.subSelInitItem = this.subMenuData.filter(dataItem => subValue.indexOf(dataItem.value) !== -1).map(item => {
return item.value;
});
/** @type {?} */
const parentValue = this.value && this.value.length > 1 && this.level === 2 ? this.value[0] : null;
this.showSelect = true;
if (this.level === 2 && parentValue !== this.firstLevelSelectValue) {
this.showSelect = false;
}
}
/**
* @param {?} dataItem
* @return {?}
*/
getClass(dataItem) {
return this.dataItemSelected(dataItem) ? this.prefixCls + '-selected' : '';
}
/**
* @param {?} dataItem
* @return {?}
*/
dataItemSelected(dataItem) {
return dataItem.value === this.firstLevelSelectValue;
}
/**
* @return {?}
*/
ngOnInit() {
this._localeProviderService.localeChange.pipe(takeUntil(this._unsubscribe$)).subscribe(_ => {
this.locale = this._localeProviderService.getLocaleSubObj('Menu');
});
this.firstLevelSelectValue = this.getNewFsv();
this.heightStyle = {
height: this.height + 'px'
};
this.initData();
}
/**
* @return {?}
*/
ngOnDestroy() {
this._unsubscribe$.next();
this._unsubscribe$.complete();
}
}
MenuComponent.decorators = [
{ type: Component, args: [{
selector: 'Menu, nzm-menu',
template: "<Flex class=\"{{prefixCls}}\"\n [ngStyle]=\"heightStyle\"\n [direction]=\"'column'\"\n [align]=\"'stretch'\"\n>\n <Flex class=\"{{menuSelectContanerPrefixCls}}\" [align]=\"'start'\">\n <FlexItem *ngIf=\"level == 2\">\n <List role=\"tablist\">\n <ListItem role=\"tab\"\n *ngFor=\"let dataItem of data, let i = index\"\n [className]=\"getClass(dataItem)\"\n (click)=\"onClickFirstLevelItem(dataItem)\"\n >\n {{dataItem.label}}\n </ListItem>\n </List>\n </FlexItem>\n\n <FlexItem role=\"tabpanel\" aria-hidden=\"false\" class=\"{{menuSelectContanerPrefixCls}}-submenu\">\n <SubMenu [subMenuPrefixCls]=\"subMenuPrefixCls\"\n [radioPrefixCls]=\"radioPrefixCls\"\n [subMenuData]=\"subMenuData\"\n [selItem]=\"subSelInitItem\"\n [showSelect]=\"showSelect\"\n [multiSelect]=\"multiSelect\"\n (onSel)=\"onClickSubMenuItem($event)\">\n </SubMenu>\n </FlexItem>\n </Flex>\n\n <div *ngIf=\"multiSelect\" class=\"{{multiSelectMenuBtnsCls}}\">\n <a Button\n [className]=\"'am-multi-select-btns-btn'\"\n [inline]=\"true\"\n (onClick)=\"onMenuCancel()\"\n >\n {{locale.cancelText}}\n </a>\n <a Button\n [className]=\"'am-multi-select-btns-btn'\"\n [inline]=\"true\" [type]=\"'primary'\"\n (onClick)=\"onMenuOk()\"\n >\n {{locale.okText}}\n </a>\n </div>\n</Flex>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
MenuComponent.ctorParameters = () => [
{ type: LocaleProviderService }
];
MenuComponent.propDecorators = {
data: [{ type: Input }],
level: [{ type: Input }],
value: [{ type: Input }],
height: [{ type: Input }],
multiSelect: [{ type: Input }],
onChange: [{ type: Output }],
onOk: [{ type: Output }],
onCancel: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SubMenuComponent {
constructor() {
this.prefixCls = 'am-sub-menu';
this.onSel = new EventEmitter();
}
/**
* @return {?}
*/
get subMenuPrefixCls() {
return this._subMenuPrefixCls;
}
/**
* @param {?} v
* @return {?}
*/
set subMenuPrefixCls(v) {
this._subMenuPrefixCls = v;
}
/**
* @return {?}
*/
get radioPrefixCls() {
return this._radioPrefixCls;
}
/**
* @param {?} v
* @return {?}
*/
set radioPrefixCls(v) {
this._radioPrefixCls = v;
}
/**
* @return {?}
*/
get subMenuData() {
return this._subMenuData;
}
/**
* @param {?} v
* @return {?}
*/
set subMenuData(v) {
this._subMenuData = v;
}
/**
* @return {?}
*/
get showSelect() {
return this._showSelect;
}
/**
* @param {?} v
* @return {?}
*/
set showSelect(v) {
this._showSelect = v;
}
/**
* @return {?}
*/
get selItem() {
return this._selItem;
}
/**
* @param {?} v
* @return {?}
*/
set selItem(v) {
this._selItem = v;
}
/**
* @return {?}
*/
get multiSelect() {
return this._multiSelect;
}
/**
* @param {?} v
* @return {?}
*/
set multiSelect(v) {
this._multiSelect = v;
}
/**
* @param {?} dataItem
* @return {?}
*/
onClick(dataItem) {
this.onSel.emit(dataItem);
}
/**
* @param {?} dataItem
* @return {?}
*/
selected(dataItem) {
return this._showSelect && (this._selItem.length > 0 && this._selItem.indexOf(dataItem.value) !== -1);
}
/**
* @param {?} dataItem
* @return {?}
*/
getClass(dataItem) {
/** @type {?} */
let name = this._radioPrefixCls + '-item ';
name += this.selected(dataItem) ? this._subMenuPrefixCls + '-item-selected' : '';
name += dataItem.disabled ? this._subMenuPrefixCls + '-item-disabled' : '';
return name;
}
}
SubMenuComponent.decorators = [
{ type: Component, args: [{
selector: 'SubMenu, nzm-sub-menu',
template: "<List class=\"{{subMenuPrefixCls}}\" style=\"padding: 0\">\n <ListItem *ngFor=\"let dataItem of subMenuData; let i = index;\"\n key=\"i\"\n [className]=\"getClass(dataItem)\"\n [extra]=\"extra\"\n >\n {{dataItem.label}}\n\n <ng-template #extra>\n <label Radio\n *ngIf=\"!multiSelect\"\n [checked]=\"selected(dataItem)\"\n [disabled]=\"dataItem.disabled\"\n (onChange)=\"onClick(dataItem)\"\n >\n </label>\n <label Checkbox\n *ngIf=\"multiSelect\"\n [checked]=\"selected(dataItem)\"\n [disabled]=\"dataItem.disabled\"\n (onChange)=\"onClick(dataItem)\"\n >\n </label>\n </ng-template>\n </ListItem>\n</List>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SubMenuComponent.ctorParameters = () => [];
SubMenuComponent.propDecorators = {
onSel: [{ type: Output }],
subMenuPrefixCls: [{ type: Input }],
radioPrefixCls: [{ type: Input }],
subMenuData: [{ type: Input }],
showSelect: [{ type: Input }],
selItem: [{ type: Input }],
multiSelect: [{ type: Input }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class MenuModule {
}
MenuModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FlexModule, ListModule, RadioModule, CheckboxModule, ButtonModule],
exports: [MenuComponent, SubMenuComponent],
declarations: [MenuComponent, SubMenuComponent],
providers: [LocaleProviderModule]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DrawerComponent {
/**
* @param {?} _el
*/
constructor(_el) {
this._el = _el;
this.prefixCls = 'am-drawer';
this.sidebarStyleFinal = {};
this.contentStyleFinal = {};
this.overlayStyleFinal = {};
this.sidebarWidth = 0;
this.sidebarHeight = 0;
this.sidebarTop = 0;
this.dragHandleTop = 0;
this.touchIdentifier = null;
this.touchStartX = null;
this.touchStartY = null;
this.touchCurrentX = null;
this.touchCurrentY = null;
this.touchSupported = typeof window === 'object' && 'ontouchstart' in window;
this._docked = false;
this._open = false;
this._position = 'left';
this.sidebarStyle = {};
this.contentStyle = {};
this.overlayStyle = {};
this.dragHandleStyle = {};
this.transitions = true;
this.touch = true;
this.enableDragHandle = true;
this.dragToggleDistance = 30;
this.onOpenChange = new EventEmitter();
this.am = true;
this.left = this._position === 'left';
this.right = this._position === 'right';
this.top = this._position == 'top';
this.bottom = this._position == 'bottom';
this.dockedCls = this._docked;
this.openCls = this._open;
}
/**
* @return {?}
*/
get docked() {
return this._docked;
}
/**
* @param {?} v
* @return {?}
*/
set docked(v) {
this._docked = v;
this.dockedCls = v;
}
/**
* @return {?}
*/
get open() {
return this._open;
}
/**
* @param {?} v
* @return {?}
*/
set open(v) {
this._open = v;
this.openCls = v;
}
/**
* @param {?} v
* @return {?}
*/
set position(v) {
this._position = v;
this.right = false;
this.left = false;
this.top = false;
this.bottom = false;
switch (v) {
case 'right':
this.right = true;
break;
case 'left':
this.left = true;
break;
case 'top':
this.top = true;
break;
case 'bottom':
this.bottom = true;
break;
}
}
/**
* @return {?}
*/
onOverlayClicked() {
if (this._open) {
this.onOpenChange.emit(true);
}
}
/**
* @return {?}
*/
isTouching() {
return this.touchIdentifier !== null;
}
/**
* @param {?} event
* @return {?}
*/
onTouchStart(event) {
/** @type {?} */
const touch = event.changedTouches[0];
this.touchIdentifier = touch.identifier;
this.touchStartX = touch.clientX;
this.touchStartY = touch.clientY;
this.touchCurrentX = touch.clientX;
this.touchCurrentY = touch.clientY;
}
/**
* @param {?} ev
* @return {?}
*/
onTouchMove(ev) {
for (let ind = 0; ind < ev.changedTouches.length; ind++) {
if (ev.changedTouches[ind].identifier === this.touchIdentifier) {
this.touchCurrentX = ev.changedTouches[ind].clientX;
this.touchCurrentY = ev.changedTouches[ind].clientY;
break;
}
}
this.update();
}
/**
* @return {?}
*/
onTouchEnd() {
/** @type {?} */
const touchWidth = this.touchSidebarWidth();
if ((this._open && touchWidth < this.sidebarWidth - this.dragToggleDistance) ||
(!this._open && touchWidth > this.dragToggleDistance)) {
this.onOpenChange.emit(!this._open);
}
/** @type {?} */
const touchHeight = this.touchSidebarHeight();
if ((this._open && touchHeight < this.sidebarHeight - this.dragToggleDistance) ||
(!this._open && touchHeight > this.dragToggleDistance)) {
this.onOpenChange.emit(!this._open);
}
this.touchIdentifier = null;
this.touchStartX = null;
this.touchStartY = null;
this.touchCurrentX = null;
this.touchCurrentY = null;
this.update();
}
/**
* @return {?}
*/
saveSidebarSize() {
/** @type {?} */
const sidebar = this._el.nativeElement.querySelector('#sidebar');
/** @type {?} */
const dragHandle = this._el.nativeElement.querySelector('#dragHandle');
/** @type {?} */
const width = sidebar.offsetWidth;
/** @type {?} */
const height = sidebar.offsetHeight;
/** @type {?} */
const sidebarTop = this.getOffset(sidebar).top;
/** @type {?} */
const dragHandleTop = this.getOffset(dragHandle).top;
if (width !== this.sidebarWidth) {
this.sidebarWidth = width;
}
if (height !== this.sidebarHeight) {
this.sidebarHeight = height;
}
if (sidebarTop !== this.sidebarTop) {
this.sidebarTop = sidebarTop;
}
if (dragHandleTop !== this.dragHandleTop) {
this.dragHandleTop = dragHandleTop;
}
}
/**
* @return {?}
*/
touchSidebarWidth() {
if (this._position === 'right') {
if (this._open && window.innerWidth - this.touchStartX < this.sidebarWidth) {
if (this.touchCurrentX > this.touchStartX) {
return this.sidebarWidth + this.touchStartX - this.touchCurrentX;
}
return this.sidebarWidth;
}
return Math.min(window.innerWidth - this.touchCurrentX, this.sidebarWidth);
}
if (this._position === 'left') {
if (this._open && this.touchStartX < this.sidebarWidth) {
if (this.touchCurrentX > this.touchStartX) {
return this.sidebarWidth;
}
return this.sidebarWidth - this.touchStartX + this.touchCurrentX;
}
return Math.min(this.touchCurrentX, this.sidebarWidth);
}
}
/**
* @return {?}
*/
touchSidebarHeight() {
if (this._position === 'bottom') {
if (this._open &&
this._el.nativeElement.offsetHeight - this.touchStartY + this._el.nativeElement.offsetTop < this.sidebarHeight) {
if (this.touchCurrentY > this.touchStartY) {
return this.sidebarHeight + this.touchStartY - this.touchCurrentY;
}
return this.sidebarHeight;
}
return Math.min(this._el.nativeElement.offsetHeight - this.touchCurrentY + this._el.nativeElement.offsetTop, this.sidebarHeight);
}
if (this._position === 'top') {
/** @type {?} */
const touchStartOffsetY = this.touchStartY - this.sidebarTop;
if (this._open && touchStartOffsetY < this.sidebarHeight) {
if (this.touchCurrentY > this.touchStartY) {
return this.sidebarHeight;
}
return this.sidebarHeight - this.touchStartY + this.touchCurrentY;
}
return Math.min(this.touchCurrentY - this.dragHandleTop, this.sidebarHeight);
}
}
/**
* @param {?} __0
* @return {?}
*/
renderStyle({ sidebarStyle, isTouching, overlayStyle, contentStyle }) {
if (this._position === 'right' || this._position === 'left') {
sidebarStyle.transform = `translateX(0%)`;
sidebarStyle.WebkitTransform = `translateX(0%)`;
if (isTouching) {
/** @type {?} */
const percentage = this.touchSidebarWidth() / this.sidebarWidth;
// slide open to what we dragged
if (this._position === 'right') {
sidebarStyle.transform = `translateX(${(1 - percentage) * 100}%)`;
sidebarStyle.WebkitTransform = `translateX(${(1 - percentage) * 100}%)`;
}
if (this._position === 'left') {
sidebarStyle.transform = `translateX(-${(1 - percentage) * 100}%)`;
sidebarStyle.WebkitTransform = `translateX(-${(1 - percentage) * 100}%)`;
}
overlayStyle.opacity = percentage;
overlayStyle.visibility = 'visible';
}
if (contentStyle) {
contentStyle[this._position] = `${this.sidebarWidth}px`;
}
}
if (this._position === 'top' || this._position === 'bottom') {
sidebarStyle.transform = `translateY(0%)`;
sidebarStyle.WebkitTransform = `translateY(0%)`;
if (isTouching) {
/** @type {?} */
const percentage = this.touchSidebarHeight() / this.sidebarHeight;
if (this._position === 'bottom') {
sidebarStyle.transform = `translateY(${(1 - percentage) * 100}%)`;
sidebarStyle.WebkitTransform = `translateY(${(1 - percentage) * 100}%)`;
}
if (this._position === 'top') {
sidebarStyle.transform = `translateY(-${(1 - percentage) * 100}%)`;
sidebarStyle.WebkitTransform = `translateY(-${(1 - percentage) * 100}%)`;
}
overlayStyle.opacity = percentage;
overlayStyle.visibility = 'visible';
}
if (contentStyle) {
contentStyle[this._position] = `${this.sidebarHeight}px`;
}
}
}
/**
* @return {?}
*/
update() {
/** @type {?} */
const sidebarStyle = Object.assign({}, this.sidebarStyle);
/** @type {?} */
const contentStyle = Object.assign({}, this.contentStyle);
/** @type {?} */
const overlayStyle = Object.assign({}, this.overlayStyle);
if (this.isTouching()) {
this.renderStyle({
sidebarStyle: sidebarStyle,
isTouching: true,
contentStyle: undefined,
overlayStyle: overlayStyle
});
}
else if (this._docked) {
this.dockedCls = true;
this.renderStyle({
sidebarStyle: sidebarStyle,
isTouching: undefined,
contentStyle: contentStyle,
overlayStyle: undefined
});
}
else if (this._open) {
this.openCls = true;
this.renderStyle({
sidebarStyle: sidebarStyle,
isTouching: undefined,
contentStyle: undefined,
overlayStyle: undefined
});
overlayStyle["opacity"] = 1;
overlayStyle["visibility"] = 'visible';
}
if (this.isTouching() || !this.transitions) {
sidebarStyle["transition"] = 'none';
sidebarStyle["WebkitTransition"] = 'none';
contentStyle["transition"] = 'none';
overlayStyle["transition"] = 'none';
}
this.sidebarStyleFinal = sidebarStyle;
this.contentStyleFinal = contentStyle;
this.overlayStyleFinal = overlayStyle;
}
/**
* @param {?} ele
* @return {?}
*/
getOffset(ele) {
/** @type {?} */
let el = ele;
/** @type {?} */
let _x = 0;
/** @type {?} */
let _y = 0;
while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
_x += el.offsetLeft - el.scrollLeft;
_y += el.offsetTop - el.scrollTop;
el = el.offsetParent;
}
return { top: _y, left: _x };
}
/**
* @return {?}
*/
ngAfterViewChecked() {
if (!this.isTouching()) {
this.saveSidebarSize();
}
}
/**
* @return {?}
*/
ngOnChanges() {
this.update();
}
}
DrawerComponent.decorators = [
{ type: Component, args: [{
selector: 'Drawer, nzm-drawer',
template: "<div class=\"{{prefixCls}}-sidebar\"\n [ngStyle]=\"sidebarStyleFinal\"\n id=\"sidebar\">\n <ng-template [ngTemplateOutlet]=\"sidebar\"></ng-template>\n</div>\n<div class=\"{{prefixCls}}-overlay\"\n [ngStyle]=\"overlayStyleFinal\"\n role=\"presentation\"\n ref=\"overlay\"\n (click)=\"onOverlayClicked()\"\n></div>\n<div class=\"{{prefixCls}}-content\"\n [ngStyle]=\"contentStyleFinal\"\n ref=\"content\">\n <div *ngIf=\"touch && touchSupported && !open && !docked && enableDragHandle\"\n id=\"dragHandle\"\n class=\"{{prefixCls}}-draghandle\"\n [ngStyle]=\"dragHandleStyle\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\"\n (touchcancle)=\"onTouchEnd()\"\n ></div>\n <ng-content></ng-content>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
DrawerComponent.ctorParameters = () => [
{ type: ElementRef }
];
DrawerComponent.propDecorators = {
sidebar: [{ type: Input }],
sidebarStyle: [{ type: Input }],
contentStyle: [{ type: Input }],
overlayStyle: [{ type: Input }],
dragHandleStyle: [{ type: Input }],
transitions: [{ type: Input }],
touch: [{ type: Input }],
enableDragHandle: [{ type: Input }],
dragToggleDistance: [{ type: Input }],
docked: [{ type: Input }],
open: [{ type: Input }],
position: [{ type: Input }],
onOpenChange: [{ type: Output }],
am: [{ type: HostBinding, args: ['class.am-drawer',] }],
left: [{ type: HostBinding, args: ['class.am-drawer-left',] }],
right: [{ type: HostBinding, args: ['class.am-drawer-right',] }],
top: [{ type: HostBinding, args: ['class.am-drawer-top',] }],
bottom: [{ type: HostBinding, args: ['class.am-drawer-bottom',] }],
dockedCls: [{ type: HostBinding, args: ['class.am-drawer-docked',] }],
openCls: [{ type: HostBinding, args: ['class.am-drawer-open',] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class DrawerModule {
}
DrawerModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
declarations: [DrawerComponent],
exports: [DrawerComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SwipeAction {
constructor() {
this.prefixCls = 'am-swipe';
this.wrapCls = {};
this._swiping = false;
this._openedLeft = false;
this._openedRight = false;
this.left = [];
this.right = [];
this.autoClose = false;
this.disabled = false;
this.onOpen = new EventEmitter();
this.onClose = new EventEmitter();
this.onCloseSwipe = () => {
if (!(this._openedLeft || this._openedRight)) {
return;
}
this.close();
};
this.onTouchStart = e => {
this._startX = e.changedTouches[0].clientX;
this._swiping = true;
};
}
/**
* @return {?}
*/
setClassMap() {
this.wrapCls = {
[this.prefixCls]: true,
[`${this.prefixCls}-swiping`]: this._swiping
};
}
/**
* @return {?}
*/
close() {
if (this._openedLeft || this._openedRight) {
this.onClose.emit();
}
this.setBtnStyle(0);
this._openedLeft = false;
this._openedRight = false;
}
/**
* @param {?} value
* @return {?}
*/
setBtnStyle(value) {
/** @type {?} */
const limit = value > 0 ? this._btnsLeftWidth : -this._btnsRightWidth;
/** @type {?} */
const contentLeft = this.getContentEasing(value, limit);
this.content.nativeElement.style.left = `${contentLeft}px`;
this.cover.nativeElement.style.display = Math.abs(value) > 0 ? 'block' : 'none';
this.cover.nativeElement.style.left = `${contentLeft}px`;
}
/**
* @param {?} value
* @param {?} limit
* @return {?}
*/
getContentEasing(value, limit) {
return Math.abs(value) - Math.abs(limit) > 0 ? limit : value;
}
/**
* @param {?} e
* @return {?}
*/
onTouchMove(e) {
/** @type {?} */
const deltaX = e.changedTouches[0].clientX - this._startX;
e.preventDefault();
this._needShowRight = deltaX < 0 && this.right.length > 0;
this._needShowLeft = deltaX > 0 && this.left.length > 0;
if (this.leftBtnRef) {
this.leftBtnRef.nativeElement.style.visibility = this._needShowRight ? 'hidden' : 'visible';
}
if (this.rightBtnRef) {
this.rightBtnRef.nativeElement.style.visibility = this._needShowLeft ? 'hidden' : 'visible';
}
this.setBtnStyle(deltaX);
}
/**
* @param {?} e
* @return {?}
*/
onTouchEnd(e) {
/** @type {?} */
const deltaX = e.changedTouches[0].clientX - this._startX;
/** @type {?} */
const needOpenRight = this._needShowRight && Math.abs(deltaX) > this._btnsRightWidth / 2;
/** @type {?} */
const needOpenLeft = this._needShowLeft && Math.abs(deltaX) > this._btnsLeftWidth / 2;
if (needOpenRight) {
this.doOpenRight();
}
else if (needOpenLeft) {
this.doOpenLeft();
}
else {
this.close();
}
this._swiping = false;
this._needShowLeft = false;
this._needShowRight = false;
}
/**
* @return {?}
*/
doOpenLeft() {
this.open(this._btnsLeftWidth, true, false);
}
/**
* @return {?}
*/
doOpenRight() {
this.open(-this._btnsRightWidth, false, true);
}
/**
* @param {?} ev
* @param {?} btn
* @return {?}
*/
onBtnClick(ev, btn) {
/** @type {?} */
const onPress = btn.onPress;
if (onPress) {
onPress(ev);
}
if (this.autoClose) {
this.close();
}
}
/**
* @param {?} value
* @param {?} openedLeft
* @param {?} openedRight
* @return {?}
*/
open(value, openedLeft, openedRight) {
this.onOpen.emit();
this._openedLeft = openedLeft;
this._openedRight = openedRight;
this.setBtnStyle(value);
}
/**
* @return {?}
*/
ngOnInit() {
this.setClassMap();
}
/**
* @return {?}
*/
ngAfterViewInit() {
this._btnsLeftWidth = this.leftBtnRef ? this.leftBtnRef.nativeElement.offsetWidth : 0;
this._btnsRightWidth = this.rightBtnRef ? this.rightBtnRef.nativeElement.offsetWidth : 0;
document.body.addEventListener('touchstart', this.onCloseSwipe, true);
}
/**
* @return {?}
*/
ngOnDestroy() {
document.body.removeEventListener('touchstart', this.onCloseSwipe, true);
}
}
SwipeAction.decorators = [
{ type: Component, args: [{
selector: 'SwipeAction, nzm-swipe-action',
template: "<div *ngIf=\"(left.length != 0 || right.length != 0) && !disabled\" [ngClass]=\"wrapCls\">\n <div class=\"{{prefixCls}}-cover\" #coverRef></div>\n <div *ngIf=\"left && left.length > 0\"\n class=\"{{prefixCls}}-actions {{prefixCls}}-actions-left\"\n #leftBtnRef>\n <div *ngFor=\"let btn of left\"\n class=\"{{prefixCls}}-btn\"\n [ngStyle]=\"btn.style\"\n role=\"button\"\n (click)=\"onBtnClick($event, btn)\">\n <div class=\"{{prefixCls}}-btn-text\">\n {{btn.text || 'Click'}}\n </div>\n </div>\n </div>\n <div *ngIf=\"right && right.length > 0\"\n class=\"{{prefixCls}}-actions {{prefixCls}}-actions-right\"\n #rightBtnRef>\n <div *ngFor=\"let btn of right\"\n class=\"{{prefixCls}}-btn\"\n [ngStyle]=\"btn.style\"\n role=\"button\"\n (click)=\"onBtnClick($event, btn)\"\n >\n <div class=\"{{prefixCls}}-btn-text\">\n {{btn.text || 'Click'}}\n </div>\n </div>\n </div>\n <div class=\"{{prefixCls}}-content\"\n #contentRef\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </div>\n</div>\n<div *ngIf=\"!((left.length != 0 || right.length != 0) && !disabled)\"\n class=\"{{prefixCls}}-content\"\n #contentRef>\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n</div>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SwipeAction.ctorParameters = () => [];
SwipeAction.propDecorators = {
leftBtnRef: [{ type: ViewChild, args: ['leftBtnRef',] }],
rightBtnRef: [{ type: ViewChild, args: ['rightBtnRef',] }],
content: [{ type: ViewChild, args: ['contentRef',] }],
cover: [{ type: ViewChild, args: ['coverRef',] }],
left: [{ type: Input }],
right: [{ type: Input }],
autoClose: [{ type: Input }],
disabled: [{ type: Input }],
onOpen: [{ type: Output }],
onClose: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SwipeActionModule {
}
SwipeActionModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
exports: [SwipeAction],
declarations: [SwipeAction],
providers: [],
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PullToRefreshComponent {
constructor() {
this.transtionCls = {};
this.style = {
'-webkit-transform': 'translate3d( 0, 0, 0 )',
transform: 'translate3d( 0, 0, 0 )'
};
this.state = {
currSt: 'deactivate',
drag: false
};
this._indicator = {
activate: '松开立即刷新',
deactivate: '下拉可以刷新',
release: '刷新中。。。',
finish: '完成刷新'
};
this._direction = 'down';
this._clientHeight = 0;
this._currentContentHeight = 0;
this._footerHeight = 54;
this._lastcontentOffset = 0;
this._viewHeight = Math.max(window.innerHeight, window.innerWidth);
this.scrollRefresh = false;
this.distanceToRefresh = 25;
this.damping = 100;
this.footerRefresh = new EventEmitter();
this.onRefresh = new EventEmitter();
this.refresh = true;
this.container = true;
this.refreshUp = false;
this.refreshDown = true;
}
/**
* @return {?}
*/
get direction() {
return this._direction;
}
/**
* @param {?} value
* @return {?}
*/
set direction(value) {
this._direction = value;
this.refreshUp = this._direction === 'up';
this.refreshDown = this._direction === 'down';
}
/**
* @return {?}
*/
get indicator() {
return this._indicator;
}
/**
* @param {?} value
* @return {?}
*/
set indicator(value) {
this._indicator.activate = value.activate ? value.activate : this._indicator.activate;
this._indicator.deactivate = value.deactivate ? value.deactivate : this._indicator.deactivate;
this._indicator.release = value.release ? value.release : this._indicator.release;
this._indicator.finish = value.finish ? value.finish : this._indicator.finish;
}
/**
* @param {?} e
* @return {?}
*/
touchstart(e) {
if (this._direction === 'down') {
if (document.getElementsByTagName('pulltorefresh')[0].scrollTop > 0) {
this.startY = undefined;
return;
}
this.startY = e && e.changedTouches && e.changedTouches[0] && e.changedTouches[0].clientY;
this.state.drag = undefined;
}
else {
this.startY = e && e.changedTouches && e.changedTouches[0] && e.changedTouches[0].clientY;
this._clientHeight = this._pullToRefresh.element.nativeElement.clientHeight;
this._currentContentHeight = document.getElementsByTagName('pulltorefresh')[0].clientHeight;
}
this.transtionCls = '';
}
/**
* @param {?} e
* @return {?}
*/
touchmove(e) {
if (this._direction === 'down') {
if (!this.startY) {
return;
}
/** @type {?} */
let distanceY = e.changedTouches[0].clientY - this.startY;
if (distanceY < 0) {
// 滚动
this.state.drag = false;
}
else {
// 下拉
this.state.drag = true;
}
if (this.state.drag) {
// 禁止滚动
e.preventDefault();
}
else {
return;
}
if (distanceY > this.damping) {
//当超过设定阈值是,缓慢增加
distanceY = (distanceY / (distanceY + this.damping)) * this.damping * 2;
}
else if (distanceY < 0) {
distanceY = 0;
}
if (distanceY > this.distanceToRefresh) {
this.state.currSt = 'activate';
}
this.style = {
'-webkit-transform': 'translate3d( 0, ' + distanceY + 'px, 0 )',
transform: 'translate3d( 0, ' + distanceY + 'px, 0 )'
};
}
else {
/** @type {?} */
let distanceY = e.changedTouches[0].clientY - this.startY;
//向上拉动的时候,如果当前窗口内容没有滚到最后,则不实现拖动的动作;向下滚动不实现拖动动作
if (Math.abs(this._lastcontentOffset) <= this._clientHeight - this._currentContentHeight - this.distanceToRefresh ||
distanceY > 0) {
// 滚动
this.state.drag = false;
}
else {
// 上拉
this.state.drag = true;
}
if (this.state.drag) {
// 禁止滚动
e.preventDefault();
}
else {
return;
}
//如果滑动到底部了,滑动距离随着拉动的距离增加缓慢增加
distanceY = -(distanceY / (distanceY - this.damping)) * this.damping;
if (Math.abs(distanceY) > this.distanceToRefresh) {
this.state.currSt = 'activate';
}
this.style = {
'-webkit-transform': 'translate3d( 0, ' + distanceY + 'px, 0 )',
transform: 'translate3d( 0, ' + distanceY + 'px, 0 )'
};
}
}
/**
* @param {?} e
* @return {?}
*/
touchend(e) {
if (!this.startY || this.state.drag === false) {
return;
}
/** @type {?} */
const distanceY = e.changedTouches[0].clientY - this.startY;
if (Math.abs(distanceY) >= this.distanceToRefresh) {
this.state.currSt = 'release';
if (this._direction === 'down') {
this.translateY(this.distanceToRefresh + 1);
}
else {
this.translateY(-this.distanceToRefresh - 1);
}
setTimeout(() => {
this.state.currSt = 'finish';
this.onRefresh.emit();
setTimeout(() => {
this.state.currSt = 'deactivate';
this.translateY(0);
}, 0);
}, 500);
}
else {
this.translateY(0);
}
}
/**
* @param {?} evt
* @return {?}
*/
touchcancel(evt) {
this.translateY(0);
}
/**
* @param {?} evt
* @return {?}
*/
scroll(evt) {
/** @type {?} */
const contentOffset = evt.target.scrollTop;
/** @type {?} */
const offset = contentOffset - this._lastcontentOffset;
this._lastcontentOffset = contentOffset;
if (!this.scrollRefresh) {
return;
}
if (offset > 0 &&
contentOffset > 0 &&
evt.target.scrollTop + this._viewHeight > evt.target.scrollHeight - this._footerHeight / 2) {
setTimeout(() => {
this.footerRefresh.emit('finished');
}, 500);
}
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
if (value) {
return value instanceof TemplateRef;
}
}
/**
* @param {?} distanceY
* @return {?}
*/
translateY(distanceY) {
this.transtionCls = 'am-pull-to-refresh-transition';
this.style = {
'-webkit-transform': 'translate3d( 0, ' + distanceY + 'px, 0 )',
transform: 'translate3d( 0, ' + distanceY + 'px, 0 )'
};
}
}
PullToRefreshComponent.decorators = [
{ type: Component, args: [{
selector: 'PullToRefresh, nzm-pull-to-refresh',
template: "<div class=\"am-pull-to-refresh-content-wrapper\">\n <div class=\"am-pull-to-refresh-content\" [ngClass]=\"transtionCls\" [ngStyle]=\"style\">\n <div *ngIf=\"direction === 'down'\" class=\"am-pull-to-refresh-indicator\">\n <ng-template *ngIf=\"isTemplateRef(indicator[state.currSt])\" [ngTemplateOutlet]=\"indicator[state.currSt]\"></ng-template>\n <ng-container *ngIf=\"!isTemplateRef(indicator[state.currSt])\">{{indicator[state.currSt]}}</ng-container>\n </div>\n <div #pullToRefresh>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"direction === 'up'\" class=\"am-pull-to-refresh-indicator\">\n <ng-template *ngIf=\"isTemplateRef(indicator[state.currSt])\" [ngTemplateOutlet]=\"indicator[state.currSt]\"></ng-template>\n <ng-container *ngIf=\"!isTemplateRef(indicator[state.currSt])\">{{indicator[state.currSt]}}</ng-container>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
PullToRefreshComponent.ctorParameters = () => [];
PullToRefreshComponent.propDecorators = {
_pullToRefresh: [{ type: ViewChild, args: ['pullToRefresh', { read: ViewContainerRef },] }],
scrollRefresh: [{ type: Input }],
distanceToRefresh: [{ type: Input }],
damping: [{ type: Input }],
direction: [{ type: Input }],
indicator: [{ type: Input }],
footerRefresh: [{ type: Output }],
onRefresh: [{ type: Output }],
refresh: [{ type: HostBinding, args: ['class.am-pull-to-refresh',] }],
container: [{ type: HostBinding, args: ['class.super-container',] }],
refreshUp: [{ type: HostBinding, args: ['class.am-pull-to-refresh-up',] }],
refreshDown: [{ type: HostBinding, args: ['class.am-pull-to-refresh-down',] }],
touchstart: [{ type: HostListener, args: ['touchstart', ['$event'],] }],
touchmove: [{ type: HostListener, args: ['touchmove', ['$event'],] }],
touchend: [{ type: HostListener, args: ['touchend', ['$event'],] }],
touchcancel: [{ type: HostListener, args: ['touchcancel', ['$event'],] }],
scroll: [{ type: HostListener, args: ['scroll', ['$event'],] }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class PullToRefreshModule {
}
PullToRefreshModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, IconModule],
exports: [PullToRefreshComponent],
declarations: [PullToRefreshComponent]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ToastOptions {
}
ToastOptions.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Toast {
/**
* @param {?} _appRef
* @param {?} _compiler
* @param {?} _cfr
* @param {?} _zone
*/
constructor(_appRef, _compiler, _cfr, _zone) {
this._appRef = _appRef;
this._compiler = _compiler;
this._cfr = _cfr;
this._zone = _zone;
Toast._zone = this._zone;
Toast._appRef = this._appRef;
Toast._toastCompFactory = this._cfr.resolveComponentFactory(ToastComponent);
}
/**
* @param {?} config
* @param {?} options
* @return {?}
*/
static _initConfig(config, options) {
/** @type {?} */
const props = {};
/** @type {?} */
const optionalParams = ['content', 'iconType', 'mask'];
config = Object.assign(options, config);
optionalParams.forEach(key => {
if (config[key] !== undefined) {
props[key] = config[key];
}
});
/** @type {?} */
const iconType = {
info: '',
success: 'success',
fail: 'fail',
offline: 'dislike',
loading: 'loading'
}[options.iconType];
props['iconType'] = iconType;
props['mask'] = options.mask;
return props;
}
/**
* @param {?} config
* @param {?} type
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static notice(config, type, timeInterval = 2000, onClose, mask = true) {
// 如果已经存在,在没有遮罩层的情况下,会响应别的toast,需要清除原来的
if (Toast.compRef) {
Toast.hide();
}
/** @type {?} */
const options = new ToastOptions();
options.iconType = type;
options.mask = mask;
/** @type {?} */
const props = Toast._initConfig(config, options);
document.body.insertBefore(document.createElement(Toast._toastCompFactory.selector), document.body.firstChild);
/** @type {?} */
let instance;
/** @type {?} */
let subject;
Toast.compRef = Toast._appRef.bootstrap(Toast._toastCompFactory);
instance = Toast.compRef.instance;
subject = instance.subject;
if (timeInterval) {
Toast.timeout = setTimeout(() => {
if (onClose) {
onClose();
}
Toast.hide();
}, timeInterval);
}
Object.assign(instance, props);
return subject;
}
/**
* Open info dialog
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static info(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'info',
content: content
});
return Toast.notice(config, 'info', timeInterval, onClose, mask);
}
/**
* Open success dialog
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static success(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'success',
content: content
});
return Toast.notice(config, 'success', timeInterval, onClose, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} mask
* @return {?}
*/
static show(content, timeInterval, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'info',
content: content
});
return Toast.notice(config, 'info', timeInterval, () => { }, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static fail(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'fail',
content: content
});
return Toast.notice(config, 'fail', timeInterval, onClose, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static offline(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'offline',
content: content
});
return Toast.notice(config, 'offline', timeInterval, onClose, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static loading(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'loading',
content: content
});
return Toast.notice(config, 'loading', timeInterval, onClose, mask);
}
/**
* @return {?}
*/
static hide() {
if (Toast.timeout) {
clearTimeout(Toast.timeout);
}
if (Toast.compRef) {
Toast._zone.run(() => {
Toast.compRef.destroy();
});
Toast.compRef = null;
}
}
}
Toast.timeout = null;
Toast._zone = null;
Toast.compRef = null;
Toast._toastCompFactory = null;
Toast._appRef = null;
Toast.decorators = [
{ type: Injectable }
];
/** @nocollapse */
Toast.ctorParameters = () => [
{ type: ApplicationRef },
{ type: Compiler },
{ type: ComponentFactoryResolver },
{ type: NgZone }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Modal {
/**
* @param {?} _appRef
* @param {?} _compiler
* @param {?} _cfr
*/
constructor(_appRef, _compiler, _cfr) {
this._appRef = _appRef;
this._compiler = _compiler;
this._cfr = _cfr;
Modal.appRef = this._appRef;
Modal._modalCompFactory = this._cfr.resolveComponentFactory(ModalComponent);
}
/**
* @param {?} config
* @param {?} options
* @return {?}
*/
static _initConfig(config, options) {
/** @type {?} */
const props = new BaseOptions();
/** @type {?} */
const optionalParams = [
'visible',
'focus',
'closable',
'maskClosable',
'onClose',
'transparent',
'popup',
'animationType',
'title',
'footer',
'platform',
'className',
'wrapClassName',
'message',
'actions',
'callbackOrActions',
'type',
'defaultValue',
'placeholders',
'operation',
'transitionName',
'maskTransitionName',
'close'
];
options.transitionName = `${options.transitionName}-enter ${options.transitionName}-enter-active`;
options.maskTransitionName = `${options.maskTransitionName}-enter ${options.maskTransitionName}-enter-active`;
config = Object.assign(options, config, {
close: () => {
if (config.maskClosable || config.closable) {
Modal.closeWithAnimation();
}
}
});
optionalParams.forEach(key => {
if (config[key] !== undefined) {
props[key] = config[key];
}
});
return props;
}
/**
* @param {?} props
* @param {?} factory
* @return {?}
*/
static _open(props, factory) {
document.body.insertBefore(document.createElement(factory.selector), document.body.firstChild);
/** @type {?} */
let subject;
Modal.compRef = Modal.appRef.bootstrap(factory);
Modal.instance = Modal.compRef.instance;
subject = Modal.instance.subject;
Object.assign(Modal.instance, props);
return subject;
}
/**
* @return {?}
*/
static closeWithAnimation() {
/** @type {?} */
const options = new BaseOptions();
Modal.instance.transitionName = `${options.transitionName}-leave ${options.transitionName}-leave-active`;
Modal.instance.maskTransitionName = `${options.maskTransitionName}-leave ${options.maskTransitionName}-leave-active`;
setTimeout(() => {
Modal.close();
}, 200);
}
/**
* @param {?} config
* @return {?}
*/
static open(config) {
/** @type {?} */
const options = new ModalOptions();
/** @type {?} */
const props = Modal._initConfig(config, options);
return Modal._open(props, Modal._modalCompFactory);
}
/**
* @param {?=} title
* @param {?=} message
* @param {?=} actions
* @param {?=} platform
* @return {?}
*/
static alert(title, message, actions, platform) {
/** @type {?} */
const options = new AlertOptions();
options.visible = true;
options.transparent = true;
options.closable = false;
options.maskClosable = false;
options.platform = 'ios';
/** @type {?} */
const footer = getFooter(actions);
/** @type {?} */
const config = Object.assign({
title: title,
message: message,
actions: footer ? footer : [{ text: '确定' }],
platform: platform ? platform : 'ios'
});
/** @type {?} */
const props = Modal._initConfig(config, options);
return Modal._open(props, this._modalCompFactory);
}
/**
* @param {?=} title
* @param {?=} message
* @param {?=} callbackOrActions
* @param {?=} type
* @param {?=} defaultValue
* @param {?=} placeholders
* @param {?=} platform
* @return {?}
*/
static prompt(title, message, callbackOrActions, type, defaultValue, placeholders, platform) {
/** @type {?} */
const options = new AlertOptions();
options.visible = true;
options.transparent = true;
options.closable = false;
options.maskClosable = false;
options.className = 'am-modal-alert-content';
options.defaultValue = defaultValue;
options.placeholders = placeholders;
(options.type = type ? type : 'default'), (options.platform = platform ? platform : 'ios');
/**
* @param {?} self
* @param {?} func
* @return {?}
*/
function getArgs(self, func) {
/** @type {?} */
const text = self.instance.data.text || defaultValue || '';
/** @type {?} */
const password = self.instance.data.password || '';
if (type === 'login-password') {
return func(text, password);
}
else if (type === 'secure-text') {
return func(password || defaultValue);
}
return func(text);
}
/** @type {?} */
let actions;
if (typeof callbackOrActions === 'function') {
actions = [
{ text: '取消' },
{
text: '确定',
onPress: () => {
getArgs(this, callbackOrActions);
}
}
];
}
else {
actions = callbackOrActions.map(item => {
return {
text: item.text,
onPress: () => {
if (item.onPress) {
return getArgs(this, item.onPress);
}
}
};
});
}
/** @type {?} */
const footer = getFooter(actions);
/** @type {?} */
const config = Object.assign({
title: title,
message: message,
type: type ? type : 'default',
actions: footer ? footer : [{ text: '确定' }],
platform: platform ? platform : 'ios'
});
/** @type {?} */
const props = Modal._initConfig(config, options);
return Modal._open(props, this._modalCompFactory);
}
/**
* @param {?=} actions
* @param {?=} platform
* @return {?}
*/
static operation(actions, platform) {
/** @type {?} */
const options = new BaseOptions();
options.visible = true;
options.transparent = true;
options.closable = false;
options.maskClosable = false;
options.operation = true;
options.className = 'am-modal-operation';
/** @type {?} */
const footer = getFooter(actions);
/** @type {?} */
const config = Object.assign({
actions: footer ? footer : [{ text: '确定' }],
platform: platform ? platform : 'ios'
});
/** @type {?} */
const props = Modal._initConfig(config, options);
return Modal._open(props, this._modalCompFactory);
}
/**
* @return {?}
*/
static close() {
if (Modal.compRef) {
Modal.compRef.destroy();
Modal.compRef = null;
}
}
}
Modal.compRef = null;
Modal._modalCompFactory = null;
Modal.appRef = null;
Modal.instance = null;
Modal.decorators = [
{ type: Injectable }
];
/** @nocollapse */
Modal.ctorParameters = () => [
{ type: ApplicationRef },
{ type: Compiler },
{ type: ComponentFactoryResolver }
];
/**
* @param {?} actions
* @return {?}
*/
function getFooter(actions) {
return actions.map((button) => {
/** @type {?} */
const orginPress = button.onPress || function () { };
button.onPress = () => {
/** @type {?} */
const res = orginPress();
if (res && res.then) {
res.then(() => {
Modal.closeWithAnimation();
});
}
else {
Modal.closeWithAnimation();
}
};
return button;
});
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class ActionSheetOptions {
constructor() {
this.transitionName = 'am-slide-up';
this.maskTransitionName = 'am-fade';
}
}
ActionSheetOptions.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
const NORMAL = 'NORMAL';
/** @type {?} */
const SHARE = 'SHARE';
/**
* @return {?}
*/
function noop() { }
class ActionSheet {
/**
* @param {?} _appRef
* @param {?} _cfr
*/
constructor(_appRef, _cfr) {
this._appRef = _appRef;
this._cfr = _cfr;
ActionSheet.appRef = this._appRef;
ActionSheet._actionSheetCompFactory = this._cfr.resolveComponentFactory(ActionSheetComponent);
}
/**
* @param {?} config
* @param {?=} options
* @return {?}
*/
static _initConfig(config, options = {}) {
/** @type {?} */
const props = new ActionSheetOptions();
/** @type {?} */
const optionalParams = [
'prefixCls',
'maskClosable',
'cancelButtonIndex',
'destructiveButtonIndex',
'title',
'message',
'className',
'transitionName',
'maskTransitionName',
'options'
];
config = Object.assign(options, config);
optionalParams.forEach(key => {
if (config[key] !== undefined) {
props[key] = config[key];
}
});
return props;
}
/**
* @param {?} props
* @param {?} factory
* @return {?}
*/
static _open(props, factory) {
document.body.insertBefore(document.createElement(factory.selector), document.body.firstChild);
/** @type {?} */
let subject;
ActionSheet.compRef = ActionSheet.appRef.bootstrap(factory);
ActionSheet.instance = ActionSheet.compRef.instance;
subject = ActionSheet.instance.subject;
Object.assign(ActionSheet.instance, props);
return subject;
}
/**
* @param {?} flag
* @param {?} config
* @param {?} callback
* @return {?}
*/
static createActionSheet(flag, config, callback) {
/** @type {?} */
const options = new ActionSheetOptions();
/** @type {?} */
const transitionName = config.transitionName ? config.transitionName : options.transitionName;
options.transitionName = `${transitionName}-enter ${transitionName}-enter-active`;
/** @type {?} */
const maskTransitionName = config.maskTransitionName ? config.maskTransitionName : options.maskTransitionName;
options.maskTransitionName = `${maskTransitionName}-enter ${maskTransitionName}-enter-active`;
/** @type {?} */
const props = ActionSheet._initConfig(config, options);
Object.assign(props, { onPress: cb }, { flag: flag });
/**
* @param {?} index
* @param {?=} rowIndex
* @param {?=} event
* @return {?}
*/
function cb(index, rowIndex = 0, event) {
event.stopPropagation();
/** @type {?} */
const res = callback(index, rowIndex);
if (res && res.then) {
res.then(() => {
ActionSheet.closeWithAnimation(transitionName, maskTransitionName);
});
}
else {
ActionSheet.closeWithAnimation(transitionName, maskTransitionName);
}
}
return ActionSheet._open(props, ActionSheet._actionSheetCompFactory);
}
/**
* @param {?} transitionName
* @param {?} maskTransitionName
* @return {?}
*/
static closeWithAnimation(transitionName, maskTransitionName) {
ActionSheet.instance.transitionName = `${transitionName}-leave ${transitionName}-leave-active`;
ActionSheet.instance.maskTransitionName = `${maskTransitionName}-leave ${maskTransitionName}-leave-active`;
setTimeout(() => {
ActionSheet.close();
}, 200);
}
/**
* @param {?} config
* @param {?=} callback
* @return {?}
*/
static showActionSheetWithOptions(config, callback = noop) {
ActionSheet.createActionSheet(NORMAL, config, callback);
}
/**
* @param {?} config
* @param {?=} callback
* @return {?}
*/
static showShareActionSheetWithOptions(config, callback = noop) {
ActionSheet.createActionSheet(SHARE, config, callback);
}
/**
* @return {?}
*/
static close() {
if (ActionSheet.compRef) {
ActionSheet.compRef.destroy();
ActionSheet.compRef = null;
}
}
}
ActionSheet.compRef = null;
ActionSheet._actionSheetCompFactory = null;
ActionSheet.appRef = null;
ActionSheet.instance = null;
ActionSheet.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ActionSheet.ctorParameters = () => [
{ type: ApplicationRef },
{ type: ComponentFactoryResolver }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class Picker$4 extends PopupService {
/**
* @param {?=} config
* @param {?=} confirmCallback
* @param {?=} cancelCallback
* @return {?}
*/
static showPicker(config = Picker$4.defaultOptions, confirmCallback, cancelCallback) {
/** @type {?} */
const options = new PickerOptions();
Object.assign(options, config, {
hidePicker: (event) => {
this.hidePicker();
},
confirm: (event) => {
if (confirmCallback) {
confirmCallback(event);
}
},
cancel: () => {
if (cancelCallback) {
cancelCallback();
}
}
});
/** @type {?} */
const optionalParams = [
'data',
'value',
'cols',
'mask',
'title',
'okText',
'dismissText',
'disabled',
'cascade',
'onOk',
'onPickerChange',
'indicatorStyle'
];
optionalParams.forEach(param => {
if (typeof this[param] !== 'undefined') {
(/** @type {?} */ (options))[param] = this[param];
}
});
/** @type {?} */
const childInjector = Injector.create([
{
provide: PickerOptions,
useValue: options
}
]);
Picker$4.showPopup(PickerComponent, childInjector);
}
/**
* @return {?}
*/
static hidePicker() {
Picker$4.hidePopup();
}
}
Picker$4.defaultOptions = new PickerOptions();
Picker$4.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NgZorroAntdMobileModule {
/**
* @return {?}
*/
static forRoot() {
return {
ngModule: NgZorroAntdMobileModule,
providers: [ActionSheet, Toast, Modal, Picker$4]
};
}
}
NgZorroAntdMobileModule.decorators = [
{ type: NgModule, args: [{
providers: [],
exports: [
ActivityIndicatorModule,
CardModule,
TabsModule,
TabBarModule,
ButtonModule,
SwitchModule,
SearchBarModule,
StepperModule,
StepsModule,
CheckboxModule,
ProgressModule,
SegmentedControlModule,
BadgeModule,
CarouselModule,
ActionSheetModule,
AccordionModule,
NoticeBarModule,
IconModule,
ToastModule,
RadioModule,
ModalModule,
PopoverModule,
PopoverItemModule,
NavBarModule,
ListModule,
CalendarModule,
InputItemModule,
FlexModule,
GridModule,
RangeModule,
SliderModule,
TextareaItemModule,
NgZorroAntdMobilePipesModule,
PickerModule,
PickerViewModule,
ImagePickerModule,
ResultModule,
WhiteSpaceModule,
WingBlankModule,
LocaleProviderModule,
NgZorroAntdMobilePipesModule,
PaginationModule,
TagModule,
MenuModule,
DatePickerModule,
DatePickerViewModule,
DrawerModule,
PullToRefreshModule,
SwipeActionModule
]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
export { ActivityIndicatorModule, CardModule, ResultModule, WhiteSpaceModule, WingBlankModule, TabsModule, TabBarModule, BadgeModule, InputItemModule, ButtonModule, SwitchModule, SearchBarModule, StepperModule, StepsModule, CarouselModule, CheckboxModule, RadioModule, ProgressModule, AccordionModule, NoticeBarModule, IconModule, ToastModule, ModalModule, PopoverModule, NavBarModule, ListModule, PopoverItemModule, FlexModule, GridModule, ActionSheetModule, SegmentedControlModule, TextareaItemModule, NgZorroAntdMobilePipesModule, RangeModule, SliderModule, PaginationModule, TagModule, MenuModule, PickerModule, PickerViewModule, ImagePickerModule, DatePickerModule, DatePickerViewModule, DrawerModule, SwipeActionModule, PullToRefreshModule, LocaleProviderModule, LocaleProviderService, LOCAL_PROVIDER_TOKEN, LocaleProviderPipe, Toast, ToastComponent, Modal, ModalComponent, ActionSheet, ActionSheetComponent, Picker$4 as Picker, PickerComponent, NgZorroAntdMobileModule, en_US, ru_RU, sv_SE, zh_CN, AccordionGroupComponent as ɵbq, AccordionComponent as ɵbo, AccordionService as ɵbp, ActivityIndicator as ɵd, Badge as ɵl, Button as ɵo, NZ_BUTTON_DIRECTIVES as ɵa, CalendarComponent as ɵcl, CalendarModule as ɵcg, ConfirmPanelComponent as ɵcq, DatePickerComponent as ɵcn, HeaderComponent as ɵcm, ShortcutPanelComponent as ɵcs, SingleMonthComponent as ɵcp, TimePickerComponent as ɵcr, WeekPanelComponent as ɵco, CardBody as ɵg, CardFooter as ɵh, CardHeader as ɵf, Card as ɵe, CarouselSlideComponent as ɵbh, CarouselComponent as ɵbg, DotIndicatorComponent as ɵbi, AgreeItem as ɵbd, CheckboxItem as ɵbc, Checkbox as ɵbb, CoreModule as ɵbk, TouchFeedBackComponent as ɵbn, TouchFeedbackDirective as ɵbm, PopupService as ɵbl, IconHandler as ɵq, DatePickerViewComponent as ɵck, DatePickerOptions as ɵci, DatePickerComponent$1 as ɵch, DatePickerDirective as ɵcj, DrawerComponent as ɵdm, FlexComponent as ɵct, FlexItemComponent as ɵcu, GridComponent as ɵcv, IconComponent as ɵp, ImagePicker as ɵdg, CustomInput as ɵbw, CustomInputService as ɵbx, CustomKeyboard as ɵbv, InputItem as ɵbu, Brief as ɵv, ListItem as ɵu, List as ɵt, LOCALE_PROVIDER_SERVICE_FACTORY as ɵb, LOCALE_PROVIDER_SERVICE_PROVIDER as ɵc, MenuComponent as ɵdk, SubMenuComponent as ɵdl, BaseOptions as ɵby, ModalOptions as ɵbz, NavBarComponent as ɵcf, NoticeBarComponent as ɵbr, PaginationComponent as ɵdi, PickerViewComponent as ɵdf, PickerOptions as ɵdd, PickerDirective as ɵde, SafeHTMLPipe as ɵbj, PopoverComponentOptions as ɵcd, PopoverItemComponent as ɵce, PopoverOptions as ɵcb, PopoverComponent as ɵcc, PopoverDirective as ɵca, ProgressComponent as ɵbe, PullToRefreshComponent as ɵdn, RadioItem as ɵbt, Radio as ɵbs, Range as ɵcw, Result as ɵdh, SearchBar$1 as ɵx, SegmentedControlComponent as ɵbf, SliderHandle as ɵcy, SliderMarks as ɵcz, SliderSteps as ɵda, SliderTrack as ɵdb, Slider as ɵcx, Stepper as ɵy, Step as ɵba, Steps as ɵz, SwipeAction as ɵdo, Switch as ɵw, TabBarTab as ɵn, TabBar as ɵm, DefaultTabBarComponent as ɵk, TabPane as ɵi, Tabs as ɵj, TagComponent as ɵdj, TextareaItem as ɵdc, WhiteSpace as ɵs, WingBlank as ɵr };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctem9ycm8tYW50ZC1tb2JpbGUuanMubWFwIiwic291cmNlcyI6WyJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2FjdGl2aXR5LWluZGljYXRvci9hY3Rpdml0eS1pbmRpY2F0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9hY3Rpdml0eS1pbmRpY2F0b3IvYWN0aXZpdHktaW5kaWNhdG9yLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FyZC9jYXJkLWhlYWRlci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NhcmQvY2FyZC1ib2R5LmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FyZC9jYXJkLWZvb3Rlci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NhcmQvY2FyZC5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2JhZGdlL2JhZGdlLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvYmFkZ2UvYmFkZ2UubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9pbnB1dC1pdGVtL2lucHV0LWl0ZW0uY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnRva2VuLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9waWNrZXIvbG9jYWxlL3poX0NOLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9kYXRlLXBpY2tlci9sb2NhbGUvemhfQ04udHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2RhdGUtcGlja2VyLXZpZXcvbG9jYWxlL3poX0NOLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9tZW51L2xvY2FsZS96aF9DTi50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FsZW5kYXIvbG9jYWxlL3poX0NOLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zZWFyY2gtYmFyL2xvY2FsZS96aF9DTi50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvaW5wdXQtaXRlbS9sb2NhbGUvemhfQ04udHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BhZ2luYXRpb24vbG9jYWxlL3poX0NOLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9wdWxsLXRvLXJlZnJlc2gvbG9jYWxlL3poX0NOLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9sb2NhbGUtcHJvdmlkZXIvbGFuZ3VhZ2VzL3poX0NOLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnNlcnZpY2UudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2lucHV0LWl0ZW0vY3VzdG9tLWtleWJvYXJkL2N1c3RvbS1rZXlib2FyZC5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2lucHV0LWl0ZW0vY3VzdG9tLWlucHV0L2N1c3RvbS1pbnB1dC5zZXJ2aWNlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9pbnB1dC1pdGVtL2N1c3RvbS1pbnB1dC9jdXN0b20taW5wdXQuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9pbnB1dC1pdGVtL2lucHV0LWl0ZW0ubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY29yZS91dGlsL2ljb24udHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2ljb24vaWNvbi5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2ljb24vaWNvbi5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3dpbmctYmxhbmsvd2luZy1ibGFuay5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3dpbmctYmxhbmsvd2luZy1ibGFuay5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3doaXRlLXNwYWNlL3doaXRlLXNwYWNlLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvd2hpdGUtc3BhY2Uvd2hpdGUtc3BhY2UubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9saXN0L2xpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9saXN0L2xpc3QtaXRlbS9saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9saXN0L2JyaWVmL2JyaWVmLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbGlzdC9saXN0Lm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvYnV0dG9uL2J1dHRvbi5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3N3aXRjaC9zd2l0Y2guY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zd2l0Y2gvc3dpdGNoLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc2VhcmNoLWJhci9zZWFyY2gtYmFyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc3RlcHBlci9zdGVwcGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc3RlcHBlci9zdGVwcGVyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc3RlcHMvc3RlcC9zdGVwLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc3RlcHMvc3RlcHMuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zdGVwcy9zdGVwcy5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2Nhcm91c2VsL2Nhcm91c2VsLXNsaWRlL2Nhcm91c2VsLXNsaWRlLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY29yZS91dGlsL3RvdWNoLWV2ZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2Nhcm91c2VsL2RvdGluZGljYXRvci9kb3RpbmRpY2F0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYXJvdXNlbC9jYXJvdXNlbC5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NvcmUvdXRpbC9jb252ZXJ0LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NoZWNrYm94L2FncmVlLWl0ZW0uY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jaGVja2JveC9jaGVja2JveC1pdGVtLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2hlY2tib3gvY2hlY2tib3gubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3JhZGlvL3JhZGlvLWl0ZW0uY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9yYWRpby9yYWRpby5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3Byb2dyZXNzL3Byb2dyZXNzLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcHJvZ3Jlc3MvcHJvZ3Jlc3MubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9hY2NvcmRpb24vYWNjb3JkaW9uLnNlcnZpY2UudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAvYWNjb3JkaW9uLWdyb3VwLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2FjY29yZGlvbi9hY2NvcmRpb24ubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9ub3RpY2UtYmFyL25vdGljZS1iYXIuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9ub3RpY2UtYmFyL25vdGljZS1iYXIubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90b2FzdC90b2FzdC5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3RvYXN0L3RvYXN0Lm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbW9kYWwvbW9kYWwtb3B0aW9ucy5wcm92aWRlci50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9tb2RhbC9tb2RhbC5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BvcG92ZXIvcG9wb3Zlci1vcHRpb25zLnByb3ZpZGVyLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9wb3BvdmVyL3BvcG92ZXItY29tcG9uZW50LW9wdGlvbnMucHJvdmlkZXIudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NvcmUvdXRpbC9wb3NpdGlvbi50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcG9wb3Zlci9wb3BvdmVyLmRpcmVjdGl2ZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcG9wb3Zlci9wb3BvdmVyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbmF2LWJhci9uYXYtYmFyLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbmF2LWJhci9uYXYtYmFyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FsZW5kYXIvbG9jYWxlL2VuX1VTLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci91dGlsL2luZGV4LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NhbGVuZGFyL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci9kYXRlL0RhdGFUeXBlcy50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FsZW5kYXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmJhc2UuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9waWNrZXIvbG9jYWxlL2VuX1VTLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9kYXRlLXBpY2tlci9sb2NhbGUvZW5fVVMudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2RhdGUtcGlja2VyLXZpZXcvbG9jYWxlL2VuX1VTLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9tZW51L2xvY2FsZS9lbl9VUy50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc2VhcmNoLWJhci9sb2NhbGUvZW5fVVMudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2lucHV0LWl0ZW0vbG9jYWxlL2VuX1VTLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9wYWdpbmF0aW9uL2xvY2FsZS9lbl9VUy50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcHVsbC10by1yZWZyZXNoL2xvY2FsZS9lbl9VUy50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbG9jYWxlLXByb3ZpZGVyL2xhbmd1YWdlcy9lbl9VUy50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcGlja2VyL2xvY2FsZS9ydV9SVS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZGF0ZS1waWNrZXIvbG9jYWxlL3J1X1JVLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9kYXRlLXBpY2tlci12aWV3L2xvY2FsZS9ydV9SVS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbWVudS9sb2NhbGUvcnVfUlUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3NlYXJjaC1iYXIvbG9jYWxlL3J1X1JVLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9pbnB1dC1pdGVtL2xvY2FsZS9ydV9SVS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcGFnaW5hdGlvbi9sb2NhbGUvcnVfUlUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3B1bGwtdG8tcmVmcmVzaC9sb2NhbGUvcnVfUlUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2xvY2FsZS1wcm92aWRlci9sYW5ndWFnZXMvcnVfUlUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BpY2tlci9sb2NhbGUvc3ZfU0UudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2RhdGUtcGlja2VyL2xvY2FsZS9zdl9TRS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZGF0ZS1waWNrZXItdmlldy9sb2NhbGUvc3ZfU0UudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL21lbnUvbG9jYWxlL3N2X1NFLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zZWFyY2gtYmFyL2xvY2FsZS9zdl9TRS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvaW5wdXQtaXRlbS9sb2NhbGUvc3ZfU0UudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BhZ2luYXRpb24vbG9jYWxlL3N2X1NFLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9wdWxsLXRvLXJlZnJlc2gvbG9jYWxlL3N2X1NFLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9sb2NhbGUtcHJvdmlkZXIvbGFuZ3VhZ2VzL3N2X1NFLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci93ZWVrLXBhbmVsL3dlZWstcGFuZWwuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci9jb25maXJtLXBhbmVsL2NvbmZpcm0tcGFuZWwuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jYWxlbmRhci9zaW5nbGUtbW9udGgvc2luZ2xlLW1vbnRoLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY2FsZW5kYXIvc2hvcnRjdXQtcGFuZWwvc2hvcnRjdXQtcGFuZWwuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1vcHRpb25zLnByb3ZpZGVyLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jb3JlL3V0aWwvdmVsb2NpdHkudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZGF0ZS1waWNrZXItdmlldy9kYXRlLXBpY2tlci12aWV3LmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvbG9jYWxlLXByb3ZpZGVyL2xvY2FsZS1wcm92aWRlci5waXBlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuZGlyZWN0aXZlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2RhdGUtcGlja2VyLXZpZXcvZGF0ZS1waWNrZXItdmlldy5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NhbGVuZGFyL2NhbGVuZGFyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcG9wb3Zlci9wb3BvdmVyLWl0ZW0vcG9wb3Zlci1pdGVtLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcG9wb3Zlci9wb3BvdmVyLWl0ZW0vcG9wb3Zlci1pdGVtLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZmxleC9mbGV4LmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZmxleC9mbGV4Lm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY29yZS9kaXJlY3RpdmUvdG91Y2gtZmVlZGJhY2suZGlyZWN0aXZlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9jb3JlL2RpcmVjdGl2ZS90b3VjaC1mZWVkYmFjay5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2NvcmUvc2VydmljZXMvcG9wdXAuc2VydmljZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvY29yZS9jb3JlLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZ3JpZC9ncmlkLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcGlwZXMvc2F2ZS1odG1sLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9waXBlcy9uZy16b3Jyby1hbnRkLW1vYmlsZS5waXBlcy5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2FjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9hY3Rpb24tc2hlZXQvYWN0aW9uLXNoZWV0Lm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc2VnbWVudGVkLWNvbnRyb2wvc2VnbWVudGVkLWNvbnRyb2wuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zZWdtZW50ZWQtY29udHJvbC9zZWdtZW50ZWQtY29udHJvbC5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3RleHRhcmVhLWl0ZW0vdGV4dGFyZWEtaXRlbS5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3RleHRhcmVhLWl0ZW0vdGV4dGFyZWEtaXRlbS5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3RhYnMvdGFiLXBhbmUuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90YWJzL2RlZmF1bHQtdGFiLWJhci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3RhYnMvdGFicy5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3RhYi1iYXIvdGFiLWJhci10YWIuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90YWItYmFyL3RhYi1iYXIuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90YWItYmFyL3RhYi1iYXIubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9waWNrZXIvcGlja2VyLW9wdGlvbnMucHJvdmlkZXIudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BpY2tlci9kZW1vLWRhdGEvYWRkcmVzcy1kYXRhLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9waWNrZXIvcGlja2VyLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcGlja2VyL3BpY2tlci5kaXJlY3RpdmUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BpY2tlci9waWNrZXIubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9waWNrZXItdmlldy9waWNrZXItdmlldy5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3BpY2tlci12aWV3L3BpY2tlci12aWV3Lm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvaW1hZ2UtcGlja2VyL2ltYWdlLXBpY2tlci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2ltYWdlLXBpY2tlci9pbWFnZS1waWNrZXIubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9yZXN1bHQvcmVzdWx0LmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcmVzdWx0L3Jlc3VsdC5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3JhbmdlL3JhbmdlLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc2xpZGVyL3NsaWRlci5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3NsaWRlci9zbGlkZXItaGFuZGxlL3NsaWRlci1oYW5kbGUuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zbGlkZXIvc2xpZGVyLW1hcmtzL3NsaWRlci1tYXJrcy5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3NsaWRlci9zbGlkZXItc3RlcHMvc2xpZGVyLXN0ZXBzLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvc2xpZGVyL3NsaWRlci10cmFjay9zbGlkZXItdHJhY2suY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zbGlkZXIvc2xpZGVyLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcmFuZ2UvcmFuZ2UubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90YWcvdGFnLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvdGFnL3RhZy5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL21lbnUvbWVudS5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL21lbnUvc3ViLW1lbnUvc3ViLW1lbnUuY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9tZW51L21lbnUubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9kcmF3ZXIvZHJhd2VyLmNvbXBvbmVudC50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvZHJhd2VyL2RyYXdlci5tb2R1bGUudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3N3aXBlLWFjdGlvbi9zd2lwZS1hY3Rpb24uY29tcG9uZW50LnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9zd2lwZS1hY3Rpb24vc3dpcGUtYWN0aW9uLm1vZHVsZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcHVsbC10by1yZWZyZXNoL3B1bGwtdG8tcmVmcmVzaC5jb21wb25lbnQudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL3B1bGwtdG8tcmVmcmVzaC9wdWxsLXRvLXJlZnJlc2gubW9kdWxlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90b2FzdC90b2FzdC1vcHRpb25zLnByb3ZpZGVyLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS90b2FzdC90b2FzdC5zZXJ2aWNlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9tb2RhbC9tb2RhbC5zZXJ2aWNlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9hY3Rpb24tc2hlZXQvYWN0aW9uLXNoZWV0LW9wdGlvbnMucHJvdmlkZXIudHMiLCJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlL2FjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQuc2VydmljZS50cyIsIm5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvcGlja2VyL3BpY2tlci5zZXJ2aWNlLnRzIiwibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS9uZy16b3Jyby1hbnRkLW1vYmlsZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdBY3Rpdml0eUluZGljYXRvciAsIG56bS1jdGl2aXR5LWluZGljYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpdml0eS1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5SW5kaWNhdG9yIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tYWN0aXZpdHktaW5kaWNhdG9yJztcbiAgc3Bpbm5lckNsYXNzOiBvYmplY3QgPSB7fTtcblxuICBwcml2YXRlIF90ZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgX3NpemU6IHN0cmluZyA9ICdzbWFsbCc7XG4gIHByaXZhdGUgX3RvYXN0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2FuaW1hdGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZ2V0IGFuaW1hdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW5nO1xuICB9XG4gIHNldCBhbmltYXRpbmcodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2FuaW1hdGluZyA9IHY7XG4gICAgdGhpcy5zZXRDbGFzcygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzaXplKHY6IHN0cmluZykge1xuICAgIHRoaXMuX3NpemUgPSB2O1xuICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdG9hc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RvYXN0O1xuICB9XG4gIHNldCB0b2FzdCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fdG9hc3QgPSB2O1xuICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICB9XG4gIHNldCB0ZXh0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX3RleHQgPSB2O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1hY3Rpdml0eS1pbmRpY2F0b3InKVxuICBjbHNBY3RJbmRpY2F0b3I6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWFjdGl2aXR5LWluZGljYXRvci10b2FzdCcpXG4gIGNsc0FjdEluZGljYXRvclRvYXN0O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWFjdGl2aXR5LWluZGljYXRvci1sZycpXG4gIGNsc0FjdEluZGljYXRvckxnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWFjdGl2aXR5LWluZGljYXRvci1zbScpXG4gIGNsc0FjdEluZGljYXRvclNtO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBzZXRDbGFzcygpIHtcbiAgICBpZiAodGhpcy5fYW5pbWF0aW5nKSB7XG4gICAgICB0aGlzLmNsc0FjdEluZGljYXRvciA9IHRydWU7XG4gICAgICB0aGlzLmNsc0FjdEluZGljYXRvclRvYXN0ID0gISF0aGlzLl90b2FzdDtcbiAgICAgIHRoaXMuY2xzQWN0SW5kaWNhdG9yTGcgPSB0aGlzLl9zaXplID09PSAnbGFyZ2UnO1xuICAgICAgdGhpcy5jbHNBY3RJbmRpY2F0b3JTbSA9IHRoaXMuX3NpemUgPT09ICdzbWFsbCc7XG4gICAgICB0aGlzLnNwaW5uZXJDbGFzcyA9IHtcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1zcGlubmVyYF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tc3Bpbm5lci1sZ2BdOiAhIXRoaXMuX3RvYXN0IHx8IHRoaXMuX3NpemUgPT09ICdsYXJnZSdcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xzQWN0SW5kaWNhdG9yID0gZmFsc2U7XG4gICAgICB0aGlzLmNsc0FjdEluZGljYXRvckxnID0gZmFsc2U7XG4gICAgICB0aGlzLmNsc0FjdEluZGljYXRvclNtID0gZmFsc2U7XG4gICAgICB0aGlzLmNsc0FjdEluZGljYXRvclRvYXN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRDbGFzcygpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuL2FjdGl2aXR5LWluZGljYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbQWN0aXZpdHlJbmRpY2F0b3JdLFxuICBkZWNsYXJhdGlvbnM6IFtBY3Rpdml0eUluZGljYXRvcl0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpdml0eUluZGljYXRvck1vZHVsZSB7fVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0NhcmQsIG56bS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhcmQge1xuICBASW5wdXQoKVxuICBmdWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1jYXJkJylcbiAgY2FyZFdyYXBwZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWNhcmQtZnVsbCcpXG4gIGdldCBjYXJkRnVsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIEhvc3RCaW5kaW5nLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYXJkSGVhZGVyLCBuem0tY2FyZC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhcmRIZWFkZXIge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1jYXJkLWhlYWRlcic7XG5cbiAgQElucHV0KClcbiAgdGh1bWI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+ID0gbnVsbDtcbiAgQElucHV0KClcbiAgdGh1bWJTdHlsZTogb2JqZWN0ID0gbnVsbDtcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+ID0gbnVsbDtcbiAgQElucHV0KClcbiAgZXh0cmE6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+ID0gbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWNhcmQtaGVhZGVyJylcbiAgY2FyZEJvZHlXcmFwcGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgaXNUZW1wbGF0ZVJlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0NhcmRCb2R5LCBuem0tY2FyZC1ib2R5JyxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYXJkQm9keSB7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1jYXJkLWJvZHknKSBjYXJkQm9keVdyYXBwZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIEhvc3RCaW5kaW5nLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYXJkRm9vdGVyLCBuem0tY2FyZC1mb290ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhcmRGb290ZXIge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1jYXJkLWZvb3Rlcic7XG5cbiAgQElucHV0KClcbiAgY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4gPSBudWxsO1xuICBASW5wdXQoKVxuICBleHRyYTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4gPSBudWxsO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tY2FyZC1mb290ZXInKVxuICBjYXJkRm9vdGVyV3JhcHBlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGlzVGVtcGxhdGVSZWYodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSAnLi9jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJkSGVhZGVyIH0gZnJvbSAnLi9jYXJkLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZEJvZHkgfSBmcm9tICcuL2NhcmQtYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZEZvb3RlciB9IGZyb20gJy4vY2FyZC1mb290ZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW0NhcmQsIENhcmRIZWFkZXIsIENhcmRCb2R5LCBDYXJkRm9vdGVyXSxcbiAgZXhwb3J0czogW0NhcmQsIENhcmRIZWFkZXIsIENhcmRCb2R5LCBDYXJkRm9vdGVyXVxufSlcbmV4cG9ydCBjbGFzcyBDYXJkTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBPbkNoYW5nZXMsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdCYWRnZSwgbnptLWJhZGdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JhZGdlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBCYWRnZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tYmFkZ2UnO1xuICBzY3JvbGxOdW1iZXJDbHM6IG9iamVjdCA9IHt9O1xuICBzdHlsZTogb2JqZWN0ID0ge307XG5cbiAgcHJpdmF0ZSBfdGV4dDogc3RyaW5nO1xuICBwcml2YXRlIF9zZXRDbGFzczogc3RyaW5nO1xuICBwcml2YXRlIF9zaXplOiBzdHJpbmcgPSAnc21hbGwnO1xuICBwcml2YXRlIF9kb3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaG90OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nvcm5lcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9vdmVyZmxvd0NvdW50OiBudW1iZXIgPSA5OTtcblxuICBASW5wdXQoKVxuICBzZXQgc2l6ZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaXplID0gdjtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gIH1cbiAgc2V0IHRleHQodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGV4dCA9IHY7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY29ybmVyKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jb3JuZXIgPSB2O1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRvdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZG90O1xuICB9XG4gIHNldCBkb3QodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2RvdCA9IHY7XG4gICAgaWYgKHRoaXMuX2RvdCkge1xuICAgICAgdGhpcy5fdGV4dCA9ICcnO1xuICAgIH1cbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvdmVyZmxvd0NvdW50KHY6IG51bWJlcikge1xuICAgIHRoaXMuX292ZXJmbG93Q291bnQgPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBob3QodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2hvdCA9IHY7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc2V0U3R5bGUodjogb2JqZWN0KSB7XG4gICAgdGhpcy5zdHlsZSA9IHY7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNsYXNzTmFtZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXRDbGFzcyA9IHY7XG4gICAgY29uc3QgY2xzQXJyID0gdGhpcy5fc2V0Q2xhc3Muc3BsaXQoJyAnKTtcbiAgICBjbHNBcnIuZm9yRWFjaChjbHMgPT4ge1xuICAgICAgdGhpcy5yZW5kZXIuYWRkQ2xhc3ModGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsIGNscyk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWJhZGdlJylcbiAgY2xzQmFkZ2U6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWJhZGdlLW5vdC1hLXdyYXBwZXInKVxuICBjbHNCYWRnZVdycDogYm9vbGVhbiA9ICF0aGlzLl9jaGlsZHJlbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1iYWRnZS1jb3JuZXItd3JhcHBlcicpXG4gIGNsc0JhZGdlQ29ybmVyV3JwOiBib29sZWFuID0gdGhpcy5fY29ybmVyO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWJhZGdlLWhvdCcpXG4gIGNsc0JhZGdlSG90OiBib29sZWFuID0gISF0aGlzLl9ob3Q7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tYmFkZ2UtY29ybmVyLXdyYXBwZXItbGFyZ2UnKVxuICBjbHNCYWRnZUNvcm5lcldycExnOiBib29sZWFuID0gdGhpcy5fY29ybmVyICYmIHRoaXMuX3NpemUgPT09ICdsYXJnZSc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcjogUmVuZGVyZXIyKSB7fVxuXG4gIHNldENscygpIHtcbiAgICB0aGlzLnNjcm9sbE51bWJlckNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZG90YF06IHRoaXMuX2RvdCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZG90LWxhcmdlYF06IHRoaXMuX2RvdCAmJiB0aGlzLl9zaXplID09PSAnbGFyZ2UnLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS10ZXh0YF06ICF0aGlzLl9kb3QgJiYgIXRoaXMuX2Nvcm5lcixcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY29ybmVyYF06IHRoaXMuX2Nvcm5lcixcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY29ybmVyLWxhcmdlYF06IHRoaXMuX2Nvcm5lciAmJiB0aGlzLl9zaXplID09PSAnbGFyZ2UnXG4gICAgfTtcbiAgICB0aGlzLmNsc0JhZGdlV3JwID0gIXRoaXMuX2NoaWxkcmVuO1xuICAgIHRoaXMuY2xzQmFkZ2VDb3JuZXJXcnAgPSB0aGlzLl9jb3JuZXI7XG4gICAgdGhpcy5jbHNCYWRnZUhvdCA9ICEhdGhpcy5faG90O1xuICAgIHRoaXMuY2xzQmFkZ2VDb3JuZXJXcnBMZyA9IHRoaXMuX2Nvcm5lciAmJiB0aGlzLl9zaXplID09PSAnbGFyZ2UnO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl90ZXh0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl90ZXh0ID4gdGhpcy5fb3ZlcmZsb3dDb3VudCkge1xuICAgICAgdGhpcy5fdGV4dCA9IHRoaXMuX292ZXJmbG93Q291bnQgKyAnKyc7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYWRnZSB9IGZyb20gJy4vYmFkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW0JhZGdlXSxcbiAgZGVjbGFyYXRpb25zOiBbQmFkZ2VdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQmFkZ2VNb2R1bGUge31cbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdJbnB1dEl0ZW0sIG56bS1pbnB1dC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0SXRlbSksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRJdGVtIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0taW5wdXQnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIGxhYmVsQ2xzOiBvYmplY3Q7XG4gIGNvbnRyb2xDbHM6IG9iamVjdDtcbiAgc2V0Rm9jdXM6IG9iamVjdCA9IHt9O1xuICBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIGlucHV0VHlwZTogc3RyaW5nID0gJ3RleHQnO1xuXG4gIHByaXZhdGUgX2VsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2VkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWF4TGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgX2Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2V4dHJhOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfbGFiZWxOdW1iZXI6IG51bWJlciA9IDU7XG4gIHByaXZhdGUgX3VwZGF0ZVBsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3ByZWZpeExpc3RDbHM6IHN0cmluZyA9ICdhbS1saXN0JztcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9tb25leUtleWJvYXJkQWxpZ246IHN0cmluZyA9ICdyaWdodCc7XG4gIHByaXZhdGUgX2xvY2FsZTtcbiAgcHJpdmF0ZSBfZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhYmxlQ29udGVudCcpXG4gIGxhYmxlUmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICBpbnB1dEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaW5wdXRUeXBlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUgPT09ICdiYW5rQ2FyZCcgfHwgdmFsdWUgPT09ICdwaG9uZScpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICd0ZWwnO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICB0aGlzLl90eXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdkaWdpdCcpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICdudW1iZXInO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gJ3RleHQnICYmIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRoaXMucGF0dGVybiA9ICdbMC05XSonO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgfVxuICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2xzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY2xlYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIHNldCBjbGVhcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhMZW5ndGg7XG4gIH1cbiAgc2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgfVxuICBzZXQgZXJyb3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lcnJvciA9IHZhbHVlO1xuICAgIHRoaXMuY2xzRXJyb3IgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXh0cmEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmE7XG4gIH1cbiAgc2V0IGV4dHJhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9leHRyYSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cGRhdGVQbGFjZWhvbGRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbScpO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbS1taWRkbGUnKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1vbmV5S2V5Ym9hcmRBbGlnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tb25leUtleWJvYXJkQWxpZ247XG4gIH1cbiAgc2V0IG1vbmV5S2V5Ym9hcmRBbGlnbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsZSh2YWx1ZSkge1xuICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb2N1cyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mb2N1cykge1xuICAgICAgdGhpcy5hdXRvRm9jdXMgPSB2YWx1ZS5mb2N1cztcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSAnbW9uZXknKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fZm9jdXMgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cygnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXh0cmFDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWl0ZW0nKVxuICBjbHNJdGVtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1kaXNhYmxlZCcpXG4gIGNsc0Rpc2FibGVkOiBib29sZWFuID0gdGhpcy5fZGlzYWJsZWQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbiA9IHRoaXMuX2Vycm9yO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWZvY3VzJylcbiAgY2xzRm9jdXM6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1hbmRyb2lkLCcpXG4gIGNsc0FuZHJvaWQ6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHNldENscygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCB8fFxuICAgICAgKHRoaXMubGFibGVSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ICE9PSAnJylcbiAgICApIHtcbiAgICAgIHRoaXMubGFiZWxDbHMgPSB7XG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWxgXTogdHJ1ZSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0yYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAyLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTNgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDMsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNGBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNCxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC01YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA1LFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTZgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDYsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtN2BdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gN1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sQ2xzID0geyBbYCR7dGhpcy5wcmVmaXhDbHN9LWNvbnRyb2xgXTogdHJ1ZSB9O1xuICB9XG5cbiAgaW5wdXRDaGFuZ2UoZSkge1xuICAgIGxldCB2YWx1ZSA9IGU7XG4gICAgc3dpdGNoICh0aGlzLmlucHV0VHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmFua0NhcmQnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJykucmVwbGFjZSgvKC4uLi4pKD89LikvZywgJyQxICcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpLnN1YnN0cmluZygwLCAxMSk7XG4gICAgICAgIGNvbnN0IHZhbHVlTGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWVMZW4gPiAzICYmIHZhbHVlTGVuIDwgOCkge1xuICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWUuc3Vic3RyKDAsIDMpfSAke3ZhbHVlLnN1YnN0cigzKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlTGVuID49IDgpIHtcbiAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cigwLCAzKX0gJHt2YWx1ZS5zdWJzdHIoMywgNCl9ICR7dmFsdWUuc3Vic3RyKDcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09ICdtb25leScpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Rm9jdXModmFsdWUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xzRm9jdXMgPSB0cnVlO1xuICAgICAgdGhpcy5jbHNBbmRyb2lkID0gdHJ1ZTtcbiAgICB9LCAxMDApO1xuICAgIHRoaXMub25Gb2N1cy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Qmx1cih2YWx1ZSwgZXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNDbGVhcikge1xuICAgICAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsc0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xzQW5kcm9pZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzQ2xlYXIgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoJycpO1xuICAgIHRoaXMuX2lzQ2xlYXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLl90eXBlICE9PSAnbW9uZXknKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaW5wdXRGb2N1cyh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBlcnJvckNsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5vbkVycm9yQ2xpY2spIHtcbiAgICAgIHRoaXMub25FcnJvckNsaWNrLmVtaXQoZSk7XG4gICAgfVxuICB9XG5cbiAgZXh0cmFDbGljayhlKSB7XG4gICAgaWYgKHRoaXMub25FeHRyYUNsaWNrKSB7XG4gICAgICB0aGlzLm9uRXh0cmFDbGljay5lbWl0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHt9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50UmVmICYmIHRoaXMuX3R5cGUgIT09ICdtb25leScgJiYgdGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWwsIHRoaXMuX3ByZWZpeExpc3RDbHMgKyAnLWl0ZW0nKTtcbiAgICB0aGlzLnJlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdGhpcy5fcHJlZml4TGlzdENscyArICctaXRlbS1taWRkbGUnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IExPQ0FMX1BST1ZJREVSX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2xvY2FsZS1wcm92aWRlci10b2tlbicpO1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBva1RleHQ6ICfDp8Khwq7DpcKuwponLFxuICBkaXNtaXNzVGV4dDogJ8Olwo/ClsOmwrbCiCcsXG4gIGV4dHJhOiAnw6jCr8K3w6nCgMKJw6bCi8KpJyxcbn07XG4iLCIvLyBpbXBvcnQgRGF0ZVBpY2tlckxvY2FsZSBmcm9tICdybWMtZGF0ZS1waWNrZXIvbGliL2xvY2FsZS96aF9DTic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb2tUZXh0OiAnw6fCocKuw6XCrsKaJyxcbiAgZGlzbWlzc1RleHQ6ICfDpcKPwpbDpsK2wognLFxuICBleHRyYTogJ8Oowq/Ct8OpwoDCicOmwovCqScsXG4gIC8vIERhdGVQaWNrZXJMb2NhbGUsXG4gIHllYXI6ICfDpcK5wrQnLFxuICBtb250aDogJ8OmwpzCiCcsXG4gIGRheTogJ8OmwpfCpScsXG4gIGhvdXI6ICfDpsKXwrYnLFxuICBtaW51dGU6ICfDpcKIwoYnLFxuICBhbTogJ8OkwrjCisOlwo3CiCcsXG4gIHBtOiAnw6TCuMKLw6XCjcKIJ1xufTtcbiIsIi8vIGltcG9ydCBEYXRlUGlja2VyTG9jYWxlIGZyb20gJ3JtYy1kYXRlLXBpY2tlci9saWIvbG9jYWxlL3poX0NOJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBva1RleHQ6ICfDp8Khwq7DpcKuwponLFxuICBkaXNtaXNzVGV4dDogJ8Olwo/ClsOmwrbCiCcsXG4gIGV4dHJhOiAnw6jCr8K3w6nCgMKJw6bCi8KpJyxcbiAgLy8gRGF0ZVBpY2tlckxvY2FsZSxcbiAgeWVhcjogJ8OlwrnCtCcsXG4gIG1vbnRoOiAnw6bCnMKIJyxcbiAgZGF5OiAnw6bCl8KlJyxcbiAgaG91cjogJ8OmwpfCticsXG4gIG1pbnV0ZTogJ8OlwojChicsXG4gIGFtOiAnw6TCuMKKw6XCjcKIJyxcbiAgcG06ICfDpMK4wovDpcKNwognXG59OyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgb2tUZXh0OiAnw6fCocKuw6XCrsKaJyxcbiAgY2FuY2VsVGV4dDogJ8Olwo/ClsOmwrbCiCcsXG59O1xuIiwiLy8gw6XCkMKMw6bCrcKlw6jCh8KqICdybWMtY2FsZW5kYXIvbGliL2xvY2FsZS96aF9DTic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICfDpsKXwqXDpsKcwp/DqcKAwonDpsKLwqknLFxuICB0b2RheTogJ8OkwrvCisOlwqTCqScsXG4gIG1vbnRoOiAnw6bCnMKIJyxcbiAgeWVhcjogJ8OlwrnCtCcsXG4gIGFtOiAnw6TCuMKKw6XCjcKIJyxcbiAgcG06ICfDpMK4wovDpcKNwognLFxuICBkYXRlVGltZUZvcm1hdDogJ3l5eXnDpcK5wrRNTcOmwpzCiGRkw6bCl8KlIMOmwpjCn8OmwpzCn3cgaGg6bW0nLFxuICBkYXRlRm9ybWF0OiAneXl5ecOlwrnCtE1Nw6bCnMKIZGTDpsKXwqUgw6bCmMKfw6bCnMKfdycsXG4gIG5vQ2hvb3NlOiAnw6bCnMKqw6nCgMKJw6bCi8KpJyxcbiAgd2VlazogWyfDpsKXwqUnLCAnw6TCuMKAJywgJ8OkwrrCjCcsICfDpMK4woknLCAnw6XCm8KbJywgJ8OkwrrClCcsICfDpcKFwq0nXSxcbiAgY2xlYXI6ICfDpsK4woXDqcKZwqQnLFxuICBzZWxlY3RUaW1lOiAnw6nCgMKJw6bCi8Kpw6bCl8K2w6nCl8K0JyxcbiAgc2VsZWN0U3RhcnRUaW1lOiAnw6nCgMKJw6bCi8Kpw6XCvMKAw6XCp8KLw6bCl8K2w6nCl8K0JyxcbiAgc2VsZWN0RW5kVGltZTogJ8OpwoDCicOmwovCqcOnwrvCk8Omwp3Cn8OmwpfCtsOpwpfCtCcsXG4gIHN0YXJ0OiAnw6XCvMKAw6XCp8KLJyxcbiAgZW5kOiAnw6fCu8KTw6bCncKfJyxcbiAgYmVnaW46ICfDqMK1wrcnLFxuICBvdmVyOiAnw6bCrcKiJyxcbiAgYmVnaW5fb3ZlcjogJ8OowrXCty/DpsKtwqInLFxuICBjb25maXJtOiAnw6fCocKuw6jCrsKkJyxcbiAgbW9udGhUaXRsZTogJ3l5eXnDpcK5wrRNTcOmwpzCiCcsXG4gIGxvYWRQcmV2TW9udGg6ICfDpcKKwqDDqMK9wr3DpMK4worDpMK4woDDpMK4wqrDpsKcwognLFxuICB5ZXN0ZXJkYXk6ICfDpsKYwqjDpcKkwqknLFxuICBsYXN0V2VlazogJ8Oowr/CkcOkwrjCgMOlwpHCqCcsXG4gIGxhc3RNb250aDogJ8Oowr/CkcOkwrjCgMOkwrjCqsOmwpzCiCdcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGNhbmNlbFRleHQ6ICfDpcKPwpbDpsK2wognLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlybUxhYmVsOiAnw6fCocKuw6XCrsKaJyxcbiAgYmFja3NwYWNlTGFiZWw6ICfDqcKAwoDDpsKgwrwnLFxuICBjYW5jZWxLZXlib2FyZExhYmVsOiAnw6bClMK2w6jCtcK3w6nClMKuw6fCm8KYJyxcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIHByZXZUZXh0OiAnw6TCuMKKw6TCuMKAw6nCocK1JyxcbiAgbmV4dFRleHQ6ICfDpMK4wovDpMK4woDDqcKhwrUnLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgYWN0aXZhdGVUZXh0OiAnw6bCncK+w6XCvMKAw6fCq8KLw6XCjcKzw6XCiMK3w6bClsKwJyxcbiAgZGVhY3RpdmF0ZVRleHQ6ICfDpMK4wovDpsKLwonDpcKPwq/DpMK7wqXDpcKIwrfDpsKWwrAnLFxuICBmaW5pc2hUZXh0OiAnw6XCrsKMw6bCiMKQw6XCiMK3w6bClsKwJyxcbn07XG4iLCJpbXBvcnQgUGlja2VyIGZyb20gJy4uLy4uL3BpY2tlci9sb2NhbGUvemhfQ04nO1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIvbG9jYWxlL3poX0NOJztcbmltcG9ydCBEYXRlUGlja2VyVmlldyBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci12aWV3L2xvY2FsZS96aF9DTic7XG5pbXBvcnQgTWVudSBmcm9tICcuLi8uLi9tZW51L2xvY2FsZS96aF9DTic7XG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi4vLi4vY2FsZW5kYXIvbG9jYWxlL3poX0NOJztcbmltcG9ydCBTZWFyY2hCYXIgZnJvbSAnLi4vLi4vc2VhcmNoLWJhci9sb2NhbGUvemhfQ04nO1xuaW1wb3J0IElucHV0SXRlbSBmcm9tICcuLi8uLi9pbnB1dC1pdGVtL2xvY2FsZS96aF9DTic7XG5pbXBvcnQgUGFnaW5hdGlvbiBmcm9tICcuLi8uLi9wYWdpbmF0aW9uL2xvY2FsZS96aF9DTic7XG5pbXBvcnQgUHVsbFRvUmVmcmVzaCBmcm9tICcuLi8uLi9wdWxsLXRvLXJlZnJlc2gvbG9jYWxlL3poX0NOJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBsb2NhbGU6ICd6aF9DTicsXG4gIFBpY2tlcixcbiAgRGF0ZVBpY2tlcixcbiAgRGF0ZVBpY2tlclZpZXcsXG4gIE1lbnUsXG4gIENhbGVuZGFyLFxuICBTZWFyY2hCYXIsXG4gIElucHV0SXRlbSxcbiAgUGFnaW5hdGlvbixcbiAgUHVsbFRvUmVmcmVzaFxufTsiLCJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFByb3ZpZGVyLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExPQ0FMX1BST1ZJREVSX1RPS0VOIH0gZnJvbSAnLi9sb2NhbGUtcHJvdmlkZXIudG9rZW4nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgemhfQ04gZnJvbSAnLi9sYW5ndWFnZXMvemhfQ04nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9jYWxlUHJvdmlkZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9jYWxlOiBhbnk7XG4gIHByaXZhdGUgX2NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih0aGlzLl9sb2NhbGUpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTE9DQUxfUFJPVklERVJfVE9LRU4pIGxvY2FsZTogYW55KSB7XG4gICAgdGhpcy5zZXRMb2NhbGUobG9jYWxlIHx8IHpoX0NOKTtcbiAgfVxuXG4gIGdldCBsb2NhbGVDaGFuZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0TG9jYWxlVmFsdWUoa2V5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fZ2V0T2JqZWN0UGF0aCh0aGlzLl9sb2NhbGUsIGtleVBhdGgpIGFzIHN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0TG9jYWxlU3ViT2JqKGtleVBhdGg6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuX2dldE9iamVjdFBhdGgodGhpcy5fbG9jYWxlLCBrZXlQYXRoKSBhcyBvYmplY3Q7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0TG9jYWxlKGxvY2FsZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFsb2NhbGUgfHwgKHRoaXMuX2xvY2FsZSAmJiB0aGlzLl9sb2NhbGUubG9jYWxlID09PSBsb2NhbGUubG9jYWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgdGhpcy5fY2hhbmdlLm5leHQobG9jYWxlKTtcbiAgfVxuXG4gIGdldExvY2FsZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZSAmJiB0aGlzLl9sb2NhbGUubG9jYWxlID8gdGhpcy5fbG9jYWxlLmxvY2FsZSA6ICcnO1xuICB9XG5cbiAgZ2V0TG9jYWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE9iamVjdFBhdGgob2JqOiBvYmplY3QsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IG9iamVjdCB8IGFueSB7XG4gICAgbGV0IHJlcyA9IG9iajtcbiAgICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBkZXB0aCA9IHBhdGhzLmxlbmd0aDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHdoaWxlIChyZXMgJiYgaW5kZXggPCBkZXB0aCkge1xuICAgICAgcmVzID0gcmVzW3BhdGhzW2luZGV4KytdXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4ID09PSBkZXB0aCA/IHJlcyA6IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExPQ0FMRV9QUk9WSURFUl9TRVJWSUNFX0ZBQ1RPUlkoZXhpc3Q6IExvY2FsZVByb3ZpZGVyU2VydmljZSwgbG9jYWxlOiBhbnkpOiBMb2NhbGVQcm92aWRlclNlcnZpY2Uge1xuICByZXR1cm4gZXhpc3QgfHwgbmV3IExvY2FsZVByb3ZpZGVyU2VydmljZShsb2NhbGUpO1xufVxuXG5leHBvcnQgY29uc3QgTE9DQUxFX1BST1ZJREVSX1NFUlZJQ0VfUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlICAgOiBMb2NhbGVQcm92aWRlclNlcnZpY2UsXG4gIHVzZUZhY3Rvcnk6IExPQ0FMRV9QUk9WSURFUl9TRVJWSUNFX0ZBQ1RPUlksXG4gIGRlcHMgICAgICA6IFsgWyBuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIExvY2FsZVByb3ZpZGVyU2VydmljZSBdLCBMT0NBTF9QUk9WSURFUl9UT0tFTl1cbn07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDdXN0b21LZXlib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20ta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtMb2NhbGVQcm92aWRlclNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUtleWJvYXJkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1udW1iZXIta2V5Ym9hcmQnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIG9rVGV4dDogc3RyaW5nID0gJyc7XG4gIHdyYXBwZXJDbHM6IG9iamVjdDtcblxuICBwcml2YXRlIF9sb2NhbGU6IGFueSA9IHt9O1xuICBwcml2YXRlIF91bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9jYWxlUHJvdmlkZXI6IExvY2FsZVByb3ZpZGVyU2VydmljZSkge31cblxuICB0ZENsaWNrKGUpIHtcbiAgICB0aGlzLm9uQ2xpY2suZW1pdChlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMud3JhcENscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taXRlbWBdOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLndyYXBwZXJDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXdyYXBwZXJgXTogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5fbG9jYWxlUHJvdmlkZXIubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZVByb3ZpZGVyLmdldExvY2FsZVN1Yk9iaignSW5wdXRJdGVtJyk7XG4gICAgICB0aGlzLm9rVGV4dCA9IHRoaXMuX2xvY2FsZS5jb25maXJtTGFiZWw7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21LZXlib2FyZCB9IGZyb20gJy4uL2N1c3RvbS1rZXlib2FyZC9jdXN0b20ta2V5Ym9hcmQuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEN1c3RvbUlucHV0U2VydmljZSB7XG4gIHN0YXRpYyBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiA9IG51bGw7XG4gIHN0YXRpYyBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmID0gbnVsbDtcbiAgc3RhdGljIGlzU2hvdyA9IGZhbHNlO1xuICBzdGF0aWMgY2xpY2tWYWx1ZSA9IG51bGw7XG4gIHN0YXRpYyBfaW5wdXRDb21wRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxDdXN0b21LZXlib2FyZD4gPSBudWxsO1xuICBzdGF0aWMgX2tleWJvYXJkUHJlZml4Q2xzID0gJ2FtLW51bWJlci1rZXlib2FyZCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZiwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICBDdXN0b21JbnB1dFNlcnZpY2UuYXBwUmVmID0gdGhpcy5fYXBwUmVmO1xuICAgIEN1c3RvbUlucHV0U2VydmljZS5faW5wdXRDb21wRmFjdG9yeSA9IHRoaXMuX2Nmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShDdXN0b21LZXlib2FyZCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U2hvd1N0YXR1cygpIHtcbiAgICByZXR1cm4gQ3VzdG9tSW5wdXRTZXJ2aWNlLmlzU2hvdztcbiAgfVxuXG4gIHN0YXRpYyBzaG93S2V5Ym9hcmQoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvdykge1xuICAgICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgICB0aGlzLmNvbXBSZWYuaW5zdGFuY2Uud3JhcHBlckNscyA9IHtcbiAgICAgICAgICBbYGFtLW51bWJlci1rZXlib2FyZC13cmFwcGVyYF06IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLl9rZXlib2FyZFByZWZpeENsc30tY29udGFpbmVyYCk7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCBgJHt0aGlzLl9rZXlib2FyZFByZWZpeENsc30tY29udGFpbmVyYCk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KEN1c3RvbUlucHV0U2VydmljZS5faW5wdXRDb21wRmFjdG9yeS5zZWxlY3RvcikpO1xuICAgICAgICAgIHRoaXMuY29tcFJlZiA9IHRoaXMuYXBwUmVmLmJvb3RzdHJhcChDdXN0b21JbnB1dFNlcnZpY2UuX2lucHV0Q29tcEZhY3RvcnkpO1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5pbnN0YW5jZS5vbkNsaWNrLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tWYWx1ZSA9IGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaGlkZUtleWJvYXJkKCkge1xuICAgIGlmICh0aGlzLmNvbXBSZWYgJiYgdGhpcy5pc1Nob3cpIHtcbiAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbXBSZWYuaW5zdGFuY2Uud3JhcHBlckNscyA9IHtcbiAgICAgICAgW2BhbS1udW1iZXIta2V5Ym9hcmQtd3JhcHBlcmBdOiB0cnVlLFxuICAgICAgICBbYGFtLW51bWJlci1rZXlib2FyZC13cmFwcGVyLWhpZGVgXTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEhvc3RCaW5kaW5nLFxuICBOZ1pvbmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21JbnB1dFNlcnZpY2UgfSBmcm9tICcuL2N1c3RvbS1pbnB1dC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQ3VzdG9tSW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbQ3VzdG9tSW5wdXRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21JbnB1dCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAga2V5Ym9hcmRQcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1udW1iZXIta2V5Ym9hcmQnO1xuICBmYWtlSW5wdXRDbHM6IG9iamVjdDtcbiAgZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfbWF4TGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgX2VkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2V0Rm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcHJldmVudEtleWJvYXJkOiBib29sZWFuO1xuICBwcml2YXRlIF9tb25leUtleWJvYXJkQWxpZ246IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9tYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9tYXhMZW5ndGggPj0gMCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2LnN1YnN0cigwLCB0aGlzLl9tYXhMZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXhMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heExlbmd0aCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGVkaXRhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZWRpdGFibGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtb25leUtleWJvYXJkQWxpZ24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX21vbmV5S2V5Ym9hcmRBbGlnbiA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q29udGFpbmVyQ2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHNldEZvY3VzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRGb2N1cyA9IHZhbHVlLmZvY3VzO1xuICAgICAgaWYgKHRoaXMuX3NldEZvY3VzKSB7XG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmFrZS1pbnB1dC1jb250YWluZXInKVxuICBjbHNGYWtlQ29udGFpbmVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWtlLWlucHV0LWNvbnRhaW5lci1sZWZ0JylcbiAgY2xzRmFrZUNvbnRhaW5lckxlZnQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIF9jdXN0b21JbnB1dFNlcnZpY2U6IEN1c3RvbUlucHV0U2VydmljZSwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHt9XG5cbiAgb25GYWtlSW5wdXRDbGljaygpIHtcbiAgICBpZiAodGhpcy5fcHJldmVudEtleWJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5wdXRGb2N1cygpO1xuICB9XG5cbiAgaW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnJlbW92ZUJsdXJMaXN0ZW5lcigpO1xuICAgIGNvbnN0IGZvY3VzID0gdGhpcy5mb2N1cztcbiAgICBpZiAoIWZvY3VzIHx8IHRoaXMuX3NldEZvY3VzKSB7XG4gICAgICB0aGlzLm9uSW5wdXRGb2N1cygpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYWRkQmx1ckxpc3RlbmVyKCk7XG4gICAgfSwgNTApO1xuICB9O1xuXG4gIGRvQmx1ciA9IGV2ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIC8vIMOnwoLCucOlwofCu8OmwpjCr8OlwpDCpsOmwpjCr8OnwrvChMOkwrvCtsOmwpzCrMOowrrCq1xuICAgIGxldCBwYXJlbnRGb3VuZCA9IGZhbHNlO1xuICAgIC8vIMOnwoLCucOlwofCu8OnwpvCrsOmwqDCh8OmwpjCr8OlwpDCpsOmwpjCr2N1c3RvbS1pbnB1dFxuICAgIGxldCBpc0lucHV0ID0gZmFsc2U7XG4gICAgLy8gw6fCgsK5w6XCh8K7w6fCm8Kuw6bCoMKHw6bCmMKvw6XCkMKmw6bCmMKvY3VzdG9tLWtleWJvYXJkXG4gICAgbGV0IGlzS2V5Ym9hcmQgPSBmYWxzZTtcbiAgICBsZXQgaXNDbGVhciA9IGZhbHNlO1xuICAgIGxldCB0YXJnZXQgPSBldi50YXJnZXQ7XG4gICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT09IG51bGwgJiYgIXBhcmVudEZvdW5kKSB7XG4gICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLl9yZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBwYXJlbnRGb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LmxvY2FsTmFtZSA9PT0gJ2N1c3RvbWlucHV0Jykge1xuICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnY3VzdG9ta2V5Ym9hcmQnKSB7XG4gICAgICAgIGlzS2V5Ym9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignYW0taW5wdXQtY2xlYXInKSA+PSAwKSB7XG4gICAgICAgIGlzQ2xlYXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIC8vIMOlwr3Ck8OnwoLCucOlwofCu8OnwpvCrsOmwqDCh8OmwpjCr8OmwpzCrMOowrrCq8OnwprChMOmwpfCtsOlwoDCmcOvwrzCjMOowo7Ct8Olwo/ClsOnwoTCpsOnwoLCucOjwoDCgcOkwrjCjcOpwprCkMOowpfCj2tleWJvYXJkXG4gICAgLy8gw6XCvcKTw6fCgsK5w6XCh8K7w6fCm8Kuw6bCoMKHw6TCuMKNw6bCmMKvw6bCnMKsw6jCusKrw6TCvcKGw6bCmMKvw6XChcK2w6TCu8KWw6fCmsKEY3VzdG9tLWlucHV0w6bCl8K2w6/CvMKMw6XCpMKxw6XCjsK7w6fChMKmw6fCgsK5w6PCgMKBw6TCuMKNw6nCmsKQw6jCl8KPa2V5Ym9hcmRcbiAgICAvLyDDpcK9wpPDp8KCwrnDpcKHwrvDp8Kbwq7DpsKgwofDpsKYwq9rZXlib2FyZMOmwpfCtsOvwrzCjMOkwrjCjcOlwqTCscOlwo7Cu8OnwoTCpsOnwoLCucOvwrzCjMOkwrjCjcOpwprCkMOowpfCj2tleWJvYXJkXG4gICAgaWYgKHBhcmVudEZvdW5kKSB7XG4gICAgICB0aGlzLmZvY3VzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGlzSW5wdXQpIHtcbiAgICAgIHRoaXMuX3NldEZvY3VzID0gZmFsc2U7XG4gICAgICB0aGlzLmZvY3VzID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQmx1ci5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9jdXMgJiYgaXNLZXlib2FyZCkge1xuICAgICAgdGhpcy5mb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLm9uS2V5Ym9hcmRDbGljayhDdXN0b21JbnB1dFNlcnZpY2UuY2xpY2tWYWx1ZSk7XG4gICAgfVxuICAgIGlmICghcGFyZW50Rm91bmQgJiYgIWlzSW5wdXQgJiYgIWlzS2V5Ym9hcmQgJiYgIWlzQ2xlYXIgJiYgIXRoaXMuX3NldEZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZXRGb2N1cyA9IGZhbHNlO1xuICAgICAgdGhpcy5vbkJsdXIuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICBDdXN0b21JbnB1dFNlcnZpY2UuaGlkZUtleWJvYXJkKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0RmFrZUlucHV0Q2xzKCk7XG4gIH07XG5cbiAgcmVtb3ZlQmx1ckxpc3RlbmVyID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb0JsdXIsIGZhbHNlKTtcbiAgfTtcblxuICBhZGRCbHVyTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvQmx1ciwgZmFsc2UpO1xuICB9O1xuXG4gIG9uSW5wdXRCbHVyID0gdmFsdWUgPT4ge1xuICAgIHRoaXMuZm9jdXMgPSBmYWxzZTtcbiAgICB0aGlzLnNldEZha2VJbnB1dENscygpO1xuICAgIHRoaXMub25CbHVyLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgIEN1c3RvbUlucHV0U2VydmljZS5oaWRlS2V5Ym9hcmQoKTtcbiAgfTtcblxuICBvbklucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5vbkZvY3VzLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMuZm9jdXMgPSB0cnVlO1xuICAgIHRoaXMuX3NldEZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5zZXRGYWtlSW5wdXRDbHMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIEN1c3RvbUlucHV0U2VydmljZS5zaG93S2V5Ym9hcmQoKTtcbiAgICB9LCAxMDApO1xuICB9O1xuXG4gIHNldEZha2VJbnB1dENscyA9ICgpID0+IHtcbiAgICB0aGlzLmZha2VJbnB1dENscyA9IHtcbiAgICAgIFtgZmFrZS1pbnB1dGBdOiB0cnVlLFxuICAgICAgWydmYWtlLWlucHV0LWRpc2FibGVkJ106IHRoaXMuX2Rpc2FibGVkLFxuICAgICAgWydmb2N1cyddOiB0aGlzLmZvY3VzXG4gICAgfTtcbiAgfTtcblxuICBzZXRDb250YWluZXJDbHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jbHNGYWtlQ29udGFpbmVyTGVmdCA9IHRoaXMuX21vbmV5S2V5Ym9hcmRBbGlnbiA9PT0gJ2xlZnQnO1xuICB9O1xuXG4gIG9uS2V5Ym9hcmRDbGljayA9IGtleWJvYXJkSXRlbVZhbHVlID0+IHtcbiAgICBsZXQgdmFsdWVBZnRlckNoYW5nZTtcbiAgICAvLyDDpcKIwqDDqcKZwqTDqcKUwq5cbiAgICBpZiAoa2V5Ym9hcmRJdGVtVmFsdWUgPT09ICdkZWxldGUnKSB7XG4gICAgICB2YWx1ZUFmdGVyQ2hhbmdlID0gdGhpcy5fdmFsdWUuc3Vic3RyaW5nKDAsIHRoaXMuX3ZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlQWZ0ZXJDaGFuZ2UpO1xuICAgICAgLy8gw6fCocKuw6jCrsKkw6nClMKuXG4gICAgfSBlbHNlIGlmIChrZXlib2FyZEl0ZW1WYWx1ZSA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgICB2YWx1ZUFmdGVyQ2hhbmdlID0gdGhpcy5fdmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWVBZnRlckNoYW5nZSk7XG4gICAgICB0aGlzLm9uSW5wdXRCbHVyKHRoaXMuX3ZhbHVlKTtcbiAgICAgIC8vIMOmwpTCtsOowrXCt8OpwpTCrlxuICAgIH0gZWxzZSBpZiAoa2V5Ym9hcmRJdGVtVmFsdWUgPT09ICdoaWRlJykge1xuICAgICAgdmFsdWVBZnRlckNoYW5nZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgdGhpcy5vbklucHV0Qmx1cih2YWx1ZUFmdGVyQ2hhbmdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9tYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICArdGhpcy5fbWF4TGVuZ3RoID49IDAgJiZcbiAgICAgICAgKHRoaXMuX3ZhbHVlICsga2V5Ym9hcmRJdGVtVmFsdWUpLmxlbmd0aCA+IHRoaXMuX21heExlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHZhbHVlQWZ0ZXJDaGFuZ2UgPSAodGhpcy5fdmFsdWUgKyBrZXlib2FyZEl0ZW1WYWx1ZSkuc3Vic3RyKDAsIHRoaXMuX21heExlbmd0aCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZUFmdGVyQ2hhbmdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlQWZ0ZXJDaGFuZ2UgPSB0aGlzLl92YWx1ZSArIGtleWJvYXJkSXRlbVZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWVBZnRlckNoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZUFmdGVyQ2hhbmdlO1xuICAgIH0pO1xuICB9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3ByZXZlbnRLZXlib2FyZCA9IHRoaXMuX2Rpc2FibGVkIHx8ICF0aGlzLl9lZGl0YWJsZTtcbiAgICB0aGlzLnNldEZha2VJbnB1dENscygpO1xuICAgIHRoaXMuc2V0Q29udGFpbmVyQ2xzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUJsdXJMaXN0ZW5lcigpO1xuICAgIGlmIChDdXN0b21JbnB1dFNlcnZpY2UpIHtcbiAgICAgIEN1c3RvbUlucHV0U2VydmljZS5oaWRlS2V5Ym9hcmQoKTtcbiAgICAgIEN1c3RvbUlucHV0U2VydmljZS5jb21wUmVmID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5rZXlib2FyZFByZWZpeENsc30tY29udGFpbmVyYCk7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0SXRlbSB9IGZyb20gJy4vaW5wdXQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tS2V5Ym9hcmQgfSBmcm9tICcuL2N1c3RvbS1rZXlib2FyZC9jdXN0b20ta2V5Ym9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbUlucHV0IH0gZnJvbSAnLi9jdXN0b20taW5wdXQvY3VzdG9tLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtJbnB1dEl0ZW0sIEN1c3RvbUtleWJvYXJkLCBDdXN0b21JbnB1dF0sXG4gIGRlY2xhcmF0aW9uczogW0lucHV0SXRlbSwgQ3VzdG9tS2V5Ym9hcmQsIEN1c3RvbUlucHV0XSxcbiAgZW50cnlDb21wb25lbnRzOiBbQ3VzdG9tS2V5Ym9hcmRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRJdGVtTW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEV2ZW50RW1pdHRlcixcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW0J1dHRvbl0sIG56bS1idXR0b24nLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogJy4vYnV0dG9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBCdXR0b24gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tYnV0dG9uJztcbiAgbmdUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpY29uVHlwZTogYW55O1xuXG4gIHByaXZhdGUgX2VsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lID0gJyc7XG4gIHByaXZhdGUgX2NsYXNzTGlzdDogYW55ID0gW107XG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2l6ZSA9ICdsYXJnZSc7XG4gIHByaXZhdGUgX2xvYWRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2U7XG4gIHByaXZhdGUgX2lubGluZSA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9pY29uOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyc7XG4gIHByaXZhdGUgX3VzZXJBZ2VudCA9ICg8YW55Pm5hdmlnYXRvcikudXNlckFnZW50IHx8ICg8YW55Pm5hdmlnYXRvcikudmVuZG9yIHx8ICg8YW55PndpbmRvdykub3BlcmE7XG5cbiAgQElucHV0KClcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc2l6ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGlubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5saW5lO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpY29uKCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9pY29uO1xuICB9XG4gIHNldCBpY29uKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMubmdUZW1wbGF0ZSA9IHRydWU7XG4gICAgICB0aGlzLl9pY29uID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmdUZW1wbGF0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5faWNvbiA9IDxzdHJpbmc+dmFsdWU7XG4gICAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBjbGFzc05hbWUodikge1xuICAgIHRoaXMuX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZSArICcgJyArIHY7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgdG91Y2hTdGFydChldmVudCkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCBbJyRldmVudCddKVxuICB0b3VjaEVuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25DbGljay5lbWl0KCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIF9yZW5kZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuX2VsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuX3JlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdGhpcy5wcmVmaXhDbHMpO1xuICAgIHRoaXMuX2NsYXNzTmFtZSA9IHRoaXMuX2VsLmNsYXNzTmFtZTtcbiAgfVxuXG4gIGlzVGVtcGxhdGVSZWYodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5fZWwucXVlcnlTZWxlY3RvcignaWNvbicpKSB7XG4gICAgICAgIHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3IoJ2ljb24nKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3IoJ2ljb24nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuXG4gIHNldCBzaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaXplID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgc2V0IGlubGluZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lubGluZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5fZWwucXVlcnlTZWxlY3RvcignaW1nJykpIHtcbiAgICAgIGNvbnN0IGFtU2l6ZSA9IHRoaXMuX3NpemUgPT09ICdzbWFsbCcgPyAnYW0taWNvbi14eHMnIDogJ2FtLWljb24tbWQnO1xuICAgICAgdGhpcy5fZWwucXVlcnlTZWxlY3RvcignaW1nJykuc2V0QXR0cmlidXRlKCdjbGFzcycsIGBhbS1pY29uICR7dGhpcy5wcmVmaXhDbHN9LWljb24gJHthbVNpemV9YCk7XG4gICAgICB0aGlzLl9yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWwsIGAke3RoaXMucHJlZml4Q2xzfS1pY29uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGFzc01hcCgpOiB2b2lkIHtcbiAgICB0aGlzLmljb25UeXBlID0gdGhpcy5fbG9hZGluZyA/ICdsb2FkaW5nJyA6IHRoaXMuX2ljb247XG4gICAgdGhpcy5fY2xhc3NMaXN0ID0gW1xuICAgICAgdGhpcy5fdHlwZSAmJiBgJHt0aGlzLnByZWZpeENsc30tJHt0aGlzLl90eXBlfWAsXG4gICAgICB0aGlzLl9zaXplID09PSAnc21hbGwnICYmIGAke3RoaXMucHJlZml4Q2xzfS0ke3RoaXMuX3NpemV9YCxcbiAgICAgIHRoaXMuX2Rpc2FibGVkICYmIGAke3RoaXMucHJlZml4Q2xzfS1kaXNhYmxlZGAsXG4gICAgICB0aGlzLl9sb2FkaW5nICYmIGAke3RoaXMucHJlZml4Q2xzfS1sb2FkaW5nYCxcbiAgICAgIHRoaXMuaWNvblR5cGUgJiYgYCR7dGhpcy5wcmVmaXhDbHN9LWljb25gLFxuICAgICAgdGhpcy5fYWN0aXZlICYmIGAke3RoaXMucHJlZml4Q2xzfS1hY3RpdmVgLFxuICAgICAgdGhpcy5faW5saW5lICYmIGAke3RoaXMucHJlZml4Q2xzfS1pbmxpbmVgXG4gICAgXS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gISFpdGVtO1xuICAgIH0pO1xuICAgIHRoaXMuX2VsLmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZSArICcgJyArIHRoaXMuX2NsYXNzTGlzdC5qb2luKCcgJyk7XG4gIH1cbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLy8gaW5zcHJpZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2tpc2Vua2Evc3ZnLXNwcml0ZS1sb2FkZXIvYmxvYi9tYXN0ZXIvcnVudGltZS9icm93c2VyLXNwcml0ZS5qc1xuLy8gTXVjaCBzaW1wbGlmaWVkLCBkbyBtYWtlIHN1cmUgcnVuIHRoaXMgYWZ0ZXIgZG9jdW1lbnQgcmVhZHlcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3Qgc3ZnU3ByaXRlID0gY29udGVudHMgPT4gYFxuPHN2Z1xuICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgaWQ9XCJfX0FOVERfTU9CSUxFX1NWR19TUFJJVEVfTk9ERV9fXCJcbiAgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowXCJcbj5cbiAgPGRlZnM+XG4gICAgJHtjb250ZW50c31cbiAgPC9kZWZzPlxuPC9zdmc+XG5gO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWNvbkhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIGNvbnRlbnRzID0gW107XG4gIC8vIGJvdGggbWluaWZpZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL3N2Zy9zdmdvXG4gIGljb25zID0ge1xuICAgIGNoZWNrOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA0NCA0NFwiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTM0LjUzOCA4TDM4IDExLjUxOCAxNy44MDggMzIgOCAyMi4wMzNsMy40NjItMy41MTggNi4zNDYgNi40NXpcIi8+PC9zdmc+JyxcbiAgICAnY2hlY2stY2lyY2xlJzpcbiAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgNDggNDhcIj48cGF0aCBkPVwiTTI0IDQ4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFMzNy4yNTUgMCAyNCAwIDAgMTAuNzQ1IDAgMjRzMTAuNzQ1IDI0IDI0IDI0ek0xMy4xIDIzLjJsLTIuMiAyLjEgMTAgOS45TDM4LjEgMTVsLTIuMi0yLTE1LjIgMTcuOC03LjYtNy42elwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnY2hlY2stY2lyY2xlLW8nOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA0OCA0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTI0IDQ4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFMzNy4yNTUgMCAyNCAwIDAgMTAuNzQ1IDAgMjRzMTAuNzQ1IDI0IDI0IDI0em0wLTNjMTEuNTk4IDAgMjEtOS40MDIgMjEtMjFTMzUuNTk4IDMgMjQgMyAzIDEyLjQwMiAzIDI0czkuNDAyIDIxIDIxIDIxelwiLz48cGF0aCBkPVwiTTEyLjIgMjMuMkwxMCAyNS4zbDEwIDkuOUwzNy4yIDE1IDM1IDEzIDE5LjggMzAuOHpcIi8+PC9nPjwvc3ZnPicsXG5cbiAgICBjcm9zczpcbiAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgNDQgNDRcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0yNC4wMDggMjEuODUybDguOTctOC45NjhMMzEuMDkyIDExbC04Ljk3IDguOTY4TDEzLjE1NyAxMWwtMS44ODQgMS44ODQgOC45NjggOC45NjgtOS4yNCA5LjI0IDEuODg0IDEuODg1IDkuMjQtOS4yNCA5LjI0IDkuMjQgMS44ODUtMS44ODQtOS4yNC05LjI0elwiLz48L3N2Zz4nLFxuICAgICdjcm9zcy1jaXJjbGUnOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA0OCA0OFwiPjxnIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTI0IDQ4YzEzLjI1NSAwIDI0LTEwLjc0NSAyNC0yNFMzNy4yNTUgMCAyNCAwIDAgMTAuNzQ1IDAgMjRzMTAuNzQ1IDI0IDI0IDI0em0wLTNjMTEuNTk4IDAgMjEtOS40MDIgMjEtMjFTMzUuNTk4IDMgMjQgMyAzIDEyLjQwMiAzIDI0czkuNDAyIDIxIDIxIDIxelwiLz48cGF0aCBkPVwiTTI0LjM0IDIyLjIybC03Ljc3NS03Ljc3NWExLjUgMS41IDAgMSAwLTIuMTIgMi4xMmw3Ljc3MyA3Ljc3NS03Ljc3NCA3Ljc3NWExLjUgMS41IDAgMSAwIDIuMTIgMi4xMmw3Ljc3NS03Ljc3MyA3Ljc3NCA3Ljc3NGExLjUgMS41IDAgMSAwIDIuMTItMi4xMkwyNi40NiAyNC4zNGw3Ljc3NC03Ljc3NGExLjUgMS41IDAgMSAwLTIuMTItMi4xMmwtNy43NzYgNy43NzN6XCIvPjwvZz48L3N2Zz4nLFxuICAgICdjcm9zcy1jaXJjbGUtbyc6XG4gICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCI+PHBhdGggZD1cIk0yNCA0OGMxMy4yNTUgMCAyNC0xMC43NDUgMjQtMjRTMzcuMjU1IDAgMjQgMCAwIDEwLjc0NSAwIDI0czEwLjc0NSAyNCAyNCAyNHptLjM1My0yNS43N2wtNy41OTMtNy41OTNjLS43OTctLjgtMS41MzgtLjgyMi0yLjI2My0uMjA3LS43MjQuNjE0LS41NiAxLjYxNy0uMTI0IDIuMDY3bDcuODUyIDcuODQ3LTcuNzIgNy43MjNjLS43MjcuNzI4LS41NiAxLjY0Ni0uMDY2IDIuMTc3LjQ5My41MzIgMS41NTMuNjgzIDIuMzEtLjE3NGw3LjU4OC03LjU4NCA3LjY0NCA3LjYyM2MuNzk2Ljc5OCAxLjYwOC43MjQgMi4yMS4xNDUuNjA1LS41OC43Mi0xLjQ0Mi0uMDc0LTIuMjRsLTcuNjU3LTcuNjcgNy41NDUtNy41MmMuODEtLjY5Ny45LTEuNzYuMjk3LTIuMzQtLjkyLS44ODUtMS44NS0uMzM4LTIuMjY0LjA3OGwtNy42ODUgNy42Njd6XCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiLz48L3N2Zz4nLFxuXG4gICAgLy8gVG9kbzogc2ltcGxpZnkgZGlyZWN0aW9uIHRvIDIsIHVzZSBjc3MgdHJhbnNmb3JtXG4gICAgbGVmdDpcbiAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgNDQgNDRcIj48ZGVmcz48cGF0aCBpZD1cImFcIiBkPVwiTS0xMjktODQ1aDI0djI0aC0yNHpcIi8+PC9kZWZzPjxjbGlwUGF0aCBpZD1cImJcIj48dXNlIHhsaW5rOmhyZWY9XCIjYVwiIG92ZXJmbG93PVwidmlzaWJsZVwiLz48L2NsaXBQYXRoPjxnIGNsaXAtcGF0aD1cInVybCgjYilcIj48ZGVmcz48cGF0aCBpZD1cImNcIiBkPVwiTS05MDMtOTQ5SDk0N1Y5OTZILTkwM3pcIi8+PC9kZWZzPjwvZz48cGF0aCBkPVwiTTE2LjI0NyAyMS40TDI4LjQ4IDkuMTY1bDIuMTIgMi4xMi0xMC4xMTcgMTAuMTJMMzAuNiAzMS41MjRsLTIuMTIgMi4xMi0xMi4yMzMtMTIuMjMyLjAwNy0uMDA2elwiLz48L3N2Zz4nLFxuICAgIHJpZ2h0OlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA0NCA0NFwiPjxkZWZzPjxwYXRoIGlkPVwiYVwiIGQ9XCJNLTEyOS04NDVoMjR2MjRoLTI0elwiLz48L2RlZnM+PGNsaXBQYXRoIGlkPVwiYlwiPjx1c2UgeGxpbms6aHJlZj1cIiNhXCIgb3ZlcmZsb3c9XCJ2aXNpYmxlXCIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPVwidXJsKCNiKVwiPjxkZWZzPjxwYXRoIGlkPVwiY1wiIGQ9XCJNLTkwMy05NDlIOTQ3Vjk5NkgtOTAzelwiLz48L2RlZnM+PC9nPjxwYXRoIGQ9XCJNMzAuNiAyMS40TDE4LjM3IDkuMTY1bC0yLjEyIDIuMTIgMTAuMTE3IDEwLjEyLTEwLjExOCAxMC4xMTggMi4xMiAyLjEyIDEyLjIzNC0xMi4yMzItLjAwNS0uMDA2elwiLz48L3N2Zz4nLFxuICAgIGRvd246XG4gICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCI+PHBhdGggZD1cIk0yMi4zNTUgMjguMjM3bC0xMS40ODMtMTAuOWMtLjYwNy0uNTc2LTEuNzE0LS4zOTYtMi40OC40MWwuNjc0LS43MWMtLjc2My44MDItLjczIDIuMDctLjI4MiAyLjQ5NmwxMS4zNyAxMC43OTMtLjA0LjA0IDIuMDg4IDIuMTk1TDIzLjMgMzEuNTJsMTIuMzA4LTExLjY4MmMuNDQ3LS40MjUuNDgtMS42OTQtLjI4Mi0yLjQ5NmwuNjc0LjcxYy0uNzY2LS44MDYtMS44NzMtLjk4Ni0yLjQ4LS40MUwyMi4zNTUgMjguMjM3elwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICB1cDpcbiAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgNDQgNDRcIj48cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNLTEtMWg0NnY0NkgtMXpcIi8+PGRlZnM+PHBhdGggaWQ9XCJhXCIgZD1cIk0tMTI5LTg0NWgyNHYyNGgtMjR6XCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9XCJiXCI+PHVzZSB4bGluazpocmVmPVwiI2FcIi8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9XCJ1cmwoI2IpXCI+PGRlZnM+PHBhdGggaWQ9XCJjXCIgZD1cIk0tOTAzLTk0OUg5NDdWOTk2SC05MDN6XCIvPjwvZGVmcz48L2c+PHBhdGggZD1cIk0yMy40MTcgMTQuMjNMMTEuMTg0IDI2LjQ2bDIuMTIgMi4xMiAxMC4xMi0xMC4xMTcgMTAuMTE4IDEwLjExOCAyLjEyLTIuMTJMMjMuNDMgMTQuMjI4bC0uMDA2LjAwNXpcIi8+PC9zdmc+JyxcblxuICAgIGxvYWRpbmc6XG4gICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAtMiA1OS43NSA2MC4yNVwiPjxwYXRoIGZpbGw9XCIjY2NjXCIgZD1cIk0yOS42OS0uNTI3QzE0LjA0NC0uNTI3IDEuMzYgMTIuMTU4IDEuMzYgMjcuODA2UzE0LjA0MyA1Ni4xNCAyOS42OSA1Ni4xNGMxNS42NSAwIDI4LjMzNC0xMi42ODYgMjguMzM0LTI4LjMzNFM0NS4zNC0uNTI3IDI5LjY5LS41Mjd6bS4xODUgNTMuNzVjLTE0LjAzNyAwLTI1LjQxNy0xMS4zOC0yNS40MTctMjUuNDE3UzE1LjgzOCAyLjM5IDI5Ljg3NSAyLjM5czI1LjQxNyAxMS4zOCAyNS40MTcgMjUuNDE3LTExLjM4IDI1LjQxNi0yNS40MTcgMjUuNDE2elwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMxMDhlZTlcIiBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIiBkPVwiTTU2LjU4NyAyOS43NjZjLjM3LTcuNDM4LTEuNjU4LTE0LjctNi4zOTMtMTkuNTUyXCIvPjwvc3ZnPicsXG4gICAgc2VhcmNoOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA0NCA0NFwiPjxwYXRoIGQ9XCJNMzIuOTggMjkuMjU1bDguOTE1IDguMjkzTDM5LjYwMyA0MGwtOC44Ni04LjI0MmExNS45NTIgMTUuOTUyIDAgMCAxLTEwLjc1MyA0LjE0N0MxMS4xNiAzNS45MDUgNCAyOC43NjMgNCAxOS45NTIgNCAxMS4xNDIgMTEuMTYgNCAxOS45OSA0czE1Ljk5IDcuMTQyIDE1Ljk5IDE1Ljk1MmMwIDMuNDcyLTEuMTEyIDYuNjg1LTMgOS4zMDN6bS4wNS05LjIxYzAgNy4xMjMtNS43IDEyLjkxOC0xMi44OCAxMi45MTgtNy4xNzYgMC0xMy4wMTUtNS43OTUtMTMuMDE1LTEyLjkxOCAwLTcuMTIgNS44NC0xMi45MTcgMTMuMDE3LTEyLjkxNyA3LjE3OCAwIDEyLjg4IDUuNzk3IDEyLjg4IDEyLjkxN3pcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG5cbiAgICBlbGxpcHNpczpcbiAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgNDQgNDRcIj48Y2lyY2xlIGN4PVwiMjEuODg4XCIgY3k9XCIyMlwiIHI9XCI0LjA0NVwiLz48Y2lyY2xlIGN4PVwiNS45MTNcIiBjeT1cIjIyXCIgcj1cIjQuMDQ1XCIvPjxjaXJjbGUgY3g9XCIzNy44NjNcIiBjeT1cIjIyXCIgcj1cIjQuMDQ1XCIvPjwvc3ZnPicsXG4gICAgJ2VsbGlwc2lzLWNpcmNsZSc6XG4gICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMjIuMTMuMTFDMTAuMDUuMTEuMjU1IDkuOTAyLjI1NSAyMS45ODNTMTAuMDUgNDMuODYgMjIuMTMgNDMuODZzMjEuODc1LTkuNzk1IDIxLjg3NS0yMS44NzZTMzQuMjEuMTEgMjIuMTMuMTF6bTAgNDAuN2MtMTAuMzk2IDAtMTguODI1LTguNDMtMTguODI1LTE4LjgyNlMxMS43MzUgMy4xNiAyMi4xMyAzLjE2YzEwLjM5NiAwIDE4LjgyNSA4LjQyOCAxOC44MjUgMTguODI0UzMyLjUyNSA0MC44MSAyMi4xMyA0MC44MXpcIi8+PGNpcmNsZSBjeD1cIjIxLjg4OFwiIGN5PVwiMjIuNzAxXCIgcj1cIjIuNDQ1XCIvPjxjaXJjbGUgY3g9XCIxMi4yM1wiIGN5PVwiMjIuNzAxXCIgcj1cIjIuNDQ1XCIvPjxjaXJjbGUgY3g9XCIzMS41NDZcIiBjeT1cIjIyLjcwMVwiIHI9XCIyLjQ0NVwiLz48L2c+PC9zdmc+JyxcblxuICAgICdleGNsYW1hdGlvbi1jaXJjbGUnOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA2NCA2NFwiPjxwYXRoIGQ9XCJNNTkuNTggNDAuODlMNDEuMTkzIDkuMTFDMzkuMTM1IDUuMzgyIDM1LjcyMyAzIDMxLjM4NyAzYy0zLjExIDAtNi41MiAyLjM4Mi04LjU4IDYuMTFMNC40MiA0MC44OWMtMi43ODggNC42MzUtMy4xMjYgOC44MS0xLjIyNSAxMi4yMkM1LjAxNSA1Ni4yMDggNy41NzIgNTggMTMgNThoMzYuNzczYzUuNDI4IDAgOS4yMS0xLjc5MiAxMS4wMy00Ljg5IDEuOS0zLjQxIDEuNTY1LTcuNTgzLTEuMjI0LTEyLjIyem0tMi40NTIgMTFjLS42MzUgMS42OTQtMy44MDIgMi40NDMtNy4zNTQgMi40NDNIMTNjLTMuNTkgMC01LjQ5My0uNzUtNi4xMy0yLjQ0NC0xLjcxLTIuNDEtMS4zNzQtNS4yNjMgMC04LjU1N2wxOC4zODctMzEuNzc3YzIuMTE2LTMuMTY4IDQuMzk0LTQuODkgNi4xMy00Ljg5IDIuOTYgMCA1LjIzOCAxLjcyMiA3LjM1NCA0Ljg5bDE4LjM4NyAzMS43NzdjMS4zNzQgMy4yOTQgMS43MTMgNi4xNDYgMCA4LjU1NnptLTI1Ljc0LTMzYy0uNDA1IDAtMS4yMjcuODM1LTEuMjI3IDIuNDQzdjE1Ljg5YzAgMS42MDguODIzIDIuNDQ0IDEuMjI3IDIuNDQ0IDEuNjI4IDAgMi40NTItLjgzNiAyLjQ1Mi0yLjQ0NXYtMTUuODljMC0xLjYwNy0uODI1LTIuNDQzLTIuNDUzLTIuNDQzem0wIDIzLjIyYy0uNDA1IDAtMS4yMjcuNzktMS4yMjcgMS4yMjN2Mi40NDVjMCAuNDM0LjgyMyAxLjIyMiAxLjIyNyAxLjIyMiAxLjYyOCAwIDIuNDUyLS43ODggMi40NTItMS4yMjJ2LTIuNDQ1YzAtLjQzNC0uODI1LTEuMjIyLTIuNDUzLTEuMjIyelwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi8+PC9zdmc+JyxcbiAgICAnaW5mby1jaXJjbGUnOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA0NCA0NFwiPjxjaXJjbGUgY3g9XCIxMy44MjhcIiBjeT1cIjE5LjYzXCIgcj1cIjEuOTM4XCIvPjxjaXJjbGUgY3g9XCIyMS43NjdcIiBjeT1cIjE5LjYzXCIgcj1cIjEuOTM4XCIvPjxjaXJjbGUgY3g9XCIyOS43NjdcIiBjeT1cIjE5LjYzXCIgcj1cIjEuOTM4XCIvPjxwYXRoIGQ9XCJNMjIuMTAyIDQuMTZjLTkuOTE4IDAtMTcuOTU4IDcuMTQ3LTE3Ljk1OCAxNS45NjIgMCA0LjkzNSAyLjUyMiA5LjM0NSA2LjQ4IDEyLjI3M3Y1LjY2N2wuMDQuMDEyYTIuNjI3IDIuNjI3IDAgMSAwIDQuNSAxLjQ1NWguMDAybDUuMDI2LTMuNTRjLjYyOC4wNiAxLjI2NS4wOTQgMS45MS4wOTQgOS45MiAwIDE3Ljk2LTcuMTQ2IDE3Ljk2LTE1Ljk2QzQwLjA2IDExLjMwNiAzMi4wMiA0LjE2IDIyLjEgNC4xNnptLS4wNCAyOS45MDJjLS45MDIgMC0xLjc4LS4wOC0yLjY0Mi0uMjA3bC01Ljg4MiA0LjIzNGMtLjAyNC4wMjQtLjA1NS4wNC0uMDgzLjA2bC0uMDA4LjAwNWEuNTEuNTEgMCAwIDEtLjI4NC4wOTUuNTI1LjUyNSAwIDAgMS0uNTI1LS41MjVsLjAwNS02LjM3NWMtMy45MS0yLjUxNi02LjQ1Ni02LjU0NC02LjQ1Ni0xMS4xIDAtNy42MjggNy4xMDctMTMuODEyIDE1Ljg3NS0xMy44MTJzMTUuODc1IDYuMTg0IDE1Ljg3NSAxMy44MTItNy4xMDcgMTMuODEyLTE1Ljg3NSAxMy44MTJ6XCIvPjwvc3ZnPicsXG4gICAgJ3F1ZXN0aW9uLWNpcmNsZSc6XG4gICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCI+PGcgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMjEuMTg2IDNjLTEwLjg1MyAwLTE5LjM2IDguNTA2LTE5LjM2IDE5LjM1OEMxLjgyNyAzMi40OTQgMTAuMzM0IDQxIDIxLjE4NyA0MWMxMC4xMzMgMCAxOC42NC04LjUwNiAxOC42NC0xOC42NDJDMzkuODI3IDExLjUwNiAzMS4zMiAzIDIxLjE4NyAzbTE1LjY0IDE5YzAgOC44MjMtNy4xNzggMTYtMTYgMTZzLTE2LTcuMTc3LTE2LTE2IDcuMTc4LTE2IDE2LTE2IDE2IDcuMTc3IDE2IDE2elwiLz48cGF0aCBkPVwiTTIyLjgyNyAzMS41YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwbTQtMTUuNDhjMCAuOTU3LS4yMDMgMS44MjItLjYxIDIuNTkzLS40MjcuNzkyLTEuMTE3IDEuNjEyLTIuMDczIDIuNDU3LS44NjcuNzM0LTEuNDUzIDEuNDM1LTEuNzU0IDIuMDk2LS4zMDIuNy0uNDUzIDEuNjkzLS40NTMgMi45OGEuODI4LjgyOCAwIDAgMS0uODIzLjg1NC44MjguODI4IDAgMCAxLS41ODQtLjIyLjg3Ny44NzcgMCAwIDEtLjI0LS42MzVjMC0xLjMwNS4xNjgtMi4zOC41MDYtMy4yMjcuMzM2LS44ODMuOTMtMS42ODIgMS43OC0yLjQgMS4wMS0uODgzIDEuNzEtMS42OTIgMi4xLTIuNDI4LjMzNi0uNjQ1LjUwMy0xLjM4LjUwMy0yLjIxLS4wMi0uOTM1LS4zLTEuNy0uODUtMi4yODgtLjY1NS0uNzE3LTEuNjItMS4wNzUtMi44OTctMS4wNzUtMS41MDYgMC0yLjU5Ni41MzUtMy4yNyAxLjYtLjQ2Ljc1NC0uNjg4IDEuNjQ1LS42ODggMi42NzdhLjkyLjkyIDAgMCAxLS4yNjYuNjYuNzQ3Ljc0NyAwIDAgMS0uNTYuMjUuNzMuNzMgMCAwIDEtLjU4NC0uMTk0Yy0uMTYtLjE2NC0uMjQtLjM5My0uMjQtLjY5IDAtMS44Mi41ODUtMy4yNzIgMS43NTUtNC4zNTdDMTguNjQ1IDExLjQ4NiAxOS45MjggMTEgMjEuNDM0IDExaC4yOTNjMS40NTIgMCAyLjYzOC40MTQgMy41NiAxLjI0IDEuMDI4LjkwMyAxLjU0IDIuMTYzIDEuNTQgMy43OHpcIi8+PC9nPjwvc3ZnPicsXG5cbiAgICB2b2ljZTpcbiAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgMzggMzNcIj48ZyBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk0xNy44MzggMjguOGMtLjU2NC0uNDY4LTEuMTkyLS45ODMtMS44MzYtMS40OTYtNC4yNDQtMy4zODUtNS4yOTQtMy42Ny02LjAwNi0zLjY3LS4wMTQgMC0uMDI3LjAwNS0uMDQuMDA1LS4wMTUgMC0uMDI4LS4wMDYtLjA0Mi0uMDA2SDMuNTYyYy0uNzM0IDAtLjkwMy0uMjAzLS45MDMtLjkyOHYtMTIuNjJjMC0uNDkuMDU3LS44LjY2LS44SDkuMWMuNjk0IDAgMS43Ni0uMjggNi40LTMuNjMuODMtLjU5NiAxLjYzOC0xLjE5NiAyLjMzNy0xLjcyMlYyOC44ek0xOS42ODIuMTljLS40NjMtLjIyLTEuMDE0LS4xNTgtMS40MTcuMTU3LS4wMi4wMTYtMS45ODMgMS41NTItNC4xNTIgMy4xMjVDMTAuMzQgNi4yMSA5LjI0MyA2LjY2NCA5LjAyIDYuNzM3SDMuNjc2Yy0uMDI3IDAtLjA1My4wMDMtLjA4LjAwNEgxLjE4M2MtLjYwOCAwLTEuMS40ODctMS4xIDEuMDg2VjI1LjE0YzAgLjU5OC40OTIgMS4wODQgMS4xIDEuMDg0aDguNzFjLjIyLjA4IDEuMjU3LjU1IDQuNjA1IDMuMjQgMS45NDcgMS41NjIgMy42OTQgMy4wODggMy43MTIgMy4xMDMuMjUuMjIuNTY4LjMzMy44OS4zMzMuMTg2IDAgLjM3My0uMDM4LjU1LS4xMTYuNDgtLjIxMy43OS0uNjg0Ljc5LTEuMjA0VjEuMzhjMC0uNTA2LS4yOTQtLjk2OC0uNzU4LTEuMTl6XCIgbWFzaz1cInVybCgjbWFzay0yKVwiLz48cGF0aCBkPVwiTTMxLjQyIDE2LjQ3NWMwLTMuMzYzLTEuODU0LTYuMjk3LTQuNjA2LTcuODc2LS4xMjUtLjA2Ny0uNDItLjE5My0uNjI1LS4xOTMtLjYxMyAwLTEuMTEuNDg4LTEuMTEgMS4wOSAwIC40MDQuMjIuNzY0LjU1Ljk1MiAyLjEzIDEuMTkgMy41NjYgMy40NCAzLjU2NiA2LjAyNCAwIDIuNjI3LTEuNDg2IDQuOTEzLTMuNjc3IDYuMDg3LS4zMi4xOS0uNTMuNTQtLjUzLjkzNSAwIC42MDIuNDk1IDEuMDkgMS4xMDYgMS4wOS4yNi4wMDIuNTY4LS4xNS41NjgtLjE1IDIuODM1LTEuNTU2IDQuNzU0LTQuNTM4IDQuNzU0LTcuOTZcIiBtYXNrPVwidXJsKCNtYXNrLTQpXCIvPjxwYXRoIGQ9XCJNMzAuMTQgMy4wNTdjLS4yMDUtLjEyMi0uNDEtLjIyLS42NTgtLjIyLS42MDggMC0xLjEuNDg1LTEuMSAxLjA4NCAwIC40MzQuMjYuNzguNjI3Ljk3OCA0LjA0MiAyLjMyMyA2Ljc2IDYuNjM2IDYuNzYgMTEuNTc4IDAgNC45MzgtMi43MTUgOS4yNDgtNi43NTQgMTEuNTcyLS4zNTQuMTktLjY2LjU1LS42Ni45OTMgMCAuNi40OTQgMS4wODUgMS4xMDIgMS4wODUuMjQzIDAgLjQzOC0uMDkyLjY1LS4yMTMgNC42OTItMi42OTUgNy44NDgtNy43IDcuODQ4LTEzLjQzNSAwLTUuNzIzLTMuMTQyLTEwLjcxOC03LjgxNy0xMy40MThcIiBtYXNrPVwidXJsKCNtYXNrLTYpXCIvPjwvZz48L3N2Zz4nLFxuXG4gICAgcGx1czogJzxzdmcgdmlld0JveD1cIjAgMCAzMCAzMFwiPjxwYXRoIGQ9XCJNMTQgMTRIMHYyaDE0djE0aDJWMTZoMTR2LTJIMTZWMGgtMnYxNHpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG4gICAgbWludXM6ICc8c3ZnIHZpZXdCb3g9XCIwIDAgMzAgMlwiPjxwYXRoIGQ9XCJNMCAwaDMwdjJIMHpcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIvPjwvc3ZnPicsXG5cbiAgICBkaXNsaWtlOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA3MiA3MlwiPjxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMzYgNzJjMTkuODgyIDAgMzYtMTYuMTE4IDM2LTM2UzU1Ljg4MiAwIDM2IDAgMCAxNi4xMTggMCAzNnMxNi4xMTggMzYgMzYgMzZ6bTAtMmMxOC43NzggMCAzNC0xNS4yMjIgMzQtMzRTNTQuNzc4IDIgMzYgMiAyIDE3LjIyMiAyIDM2czE1LjIyMiAzNCAzNCAzNHpcIiBmaWxsPVwiI0ZGRlwiLz48cGF0aCBmaWxsPVwiI0ZGRlwiIGQ9XCJNNDcgMjJoMnY2aC0yem0tMjQgMGgydjZoLTJ6XCIvPjxwYXRoIGQ9XCJNMjEgNTFzNC42LTcgMTUtNyAxNSA3IDE1IDdcIiBzdHJva2U9XCIjRkZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz48L2c+PC9zdmc+JyxcbiAgICBmYWlsOlxuICAgICAgJzxzdmcgdmlld0JveD1cIjAgMCA3MiA3MlwiPjxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMzYgNzJjMTkuODgyIDAgMzYtMTYuMTE4IDM2LTM2UzU1Ljg4MiAwIDM2IDAgMCAxNi4xMTggMCAzNnMxNi4xMTggMzYgMzYgMzZ6bTAtMmMxOC43NzggMCAzNC0xNS4yMjIgMzQtMzRTNTQuNzc4IDIgMzYgMiAyIDE3LjIyMiAyIDM2czE1LjIyMiAzNCAzNCAzNHpcIiBmaWxsPVwiI0ZGRlwiLz48cGF0aCBkPVwiTTIyIDIybDI4LjMwNCAyOC4zMDRtLTI4LjMwNCAwTDUwLjMwNCAyMlwiIHN0cm9rZT1cIiNGRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPjwvZz48L3N2Zz4nLFxuICAgIHN1Y2Nlc3M6XG4gICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDcyIDcyXCI+PGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PHBhdGggZD1cIk0zNiA3MmMxOS44ODIgMCAzNi0xNi4xMTggMzYtMzZTNTUuODgyIDAgMzYgMCAwIDE2LjExOCAwIDM2czE2LjExOCAzNiAzNiAzNnptMC0yYzE4Ljc3OCAwIDM0LTE1LjIyMiAzNC0zNFM1NC43NzggMiAzNiAyIDIgMTcuMjIyIDIgMzZzMTUuMjIyIDM0IDM0IDM0elwiIGZpbGw9XCIjRkZGXCIvPjxwYXRoIHN0cm9rZT1cIiNGRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk0xOSAzNC41NGwxMS41NDUgMTEuOTIzTDUyLjgxNSAyNFwiLz48L2c+PC9zdmc+J1xuICB9O1xuXG4gIHJlbmRlclN2Z1Nwcml0ZSgpIHtcbiAgICBjb25zdCBzeW1ib2xzID0gT2JqZWN0LmtleXModGhpcy5pY29ucylcbiAgICAgIC5tYXAoaWNvbk5hbWUgPT4ge1xuICAgICAgICBjb25zdCBzdmdDb250ZW50ID0gdGhpcy5pY29uc1tpY29uTmFtZV0uc3BsaXQoJ3N2ZycpWzFdO1xuICAgICAgICByZXR1cm4gYDxzeW1ib2wgaWQ9JHtpY29uTmFtZX0ke3N2Z0NvbnRlbnR9c3ltYm9sPmA7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJycpO1xuICAgIHJldHVybiBzdmdTcHJpdGUoc3ltYm9scyk7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIGlmICghZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX19BTlREX01PQklMRV9TVkdfU1BSSVRFX05PREVfXycpO1xuICAgIGNvbnN0IG1vdW50Tm9kZSA9IGRvY3VtZW50LmJvZHk7XG5cbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICBtb3VudE5vZGUuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmJlZ2luJywgdGhpcy5yZW5kZXJTdmdTcHJpdGUoKSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkhhbmRsZXIgfSBmcm9tICcuLi9jb3JlL3V0aWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0ljb24sIG56bS1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ljb24uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtJY29uSGFuZGxlcl1cbn0pXG5leHBvcnQgY2xhc3MgSWNvbkNvbXBvbmVudCB7XG4gIGNsc01hcDogb2JqZWN0ID0ge307XG5cbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3NpemU6IHN0cmluZyA9ICdtZCc7XG4gIHByaXZhdGUgX3NyYzogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgY29sb3I6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG4gIHNldCB0eXBlKHZhbHVlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHNyYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zcmM7XG4gIH1cbiAgc2V0IHNyYyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3JjID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc2l6ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG4gIHNldCBzaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaXplID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ljb25IYW5kbGVyOiBJY29uSGFuZGxlcikge1xuICAgIHRoaXMuX2ljb25IYW5kbGVyLmxvYWQoKTtcbiAgfVxuXG4gIHNldENsc01hcCgpIHtcbiAgICB0aGlzLmNsc01hcCA9IHtcbiAgICAgIFtgYW0taWNvbi0ke3RoaXMuX3R5cGV9YF06IHRydWUsXG4gICAgICBbYGFtLWljb24tJHt0aGlzLl9zaXplfWBdOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9pY29uLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbSWNvbkNvbXBvbmVudF0sXG4gIGRlY2xhcmF0aW9uczogW0ljb25Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEljb25Nb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBzaXplVHlwZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnV2luZ0JsYW5rLCBuem0td2luZ2JsYW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpbmctYmxhbmsuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFdpbmdCbGFuayB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXdpbmdibGFuayc7XG5cbiAgQElucHV0KClcbiAgc2l6ZTogc2l6ZVR5cGUgPSAnbGcnO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0td2luZ2JsYW5rJylcbiAgYW1XaW5nQmxhbms6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXdpbmdibGFuay1zbScpXG4gIGdldCBhbVdpbmdCbG5rU20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ3NtJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXdpbmdibGFuay1tZCcpXG4gIGdldCBhbVdpbmdCbG5rTWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ21kJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXdpbmdibGFuay1sZycpXG4gIGdldCBhbVdpbmdCbG5rTGcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ2xnJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5nQmxhbmsgfSBmcm9tICcuL3dpbmctYmxhbmsuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1dpbmdCbGFua10sXG4gIGV4cG9ydHM6IFtXaW5nQmxhbmtdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBXaW5nQmxhbmtNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIHNpemVUeXBlID0gJ3hzJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1doaXRlU3BhY2UsIG56bS13aGl0ZXNwYWNlJyxcbiAgdGVtcGxhdGU6IGBgXG59KVxuZXhwb3J0IGNsYXNzIFdoaXRlU3BhY2Uge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS13aGl0ZXNwYWNlJztcblxuICBASW5wdXQoKVxuICBzaXplOiBzaXplVHlwZSA9ICdtZCc7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS13aGl0ZXNwYWNlJylcbiAgYW1XaGl0ZVNwYWNlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS13aGl0ZXNwYWNlLXhzJylcbiAgZ2V0IGFtV2hpdGVzcGFjZVhzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICd4cyc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS13aGl0ZXNwYWNlLXNtJylcbiAgZ2V0IGFtV2hpdGVzcGFjZVNtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdzbSc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS13aGl0ZXNwYWNlLW1kJylcbiAgZ2V0IGFtV2hpdGVzcGFjZU1kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdtZCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS13aGl0ZXNwYWNlLWxnJylcbiAgZ2V0IGFtV2hpdGVzcGFjZUxnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdsZyc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS13aGl0ZXNwYWNlLXhsJylcbiAgZ2V0IGFtV2hpdGVzcGFjZVhsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICd4bCc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2hpdGVTcGFjZSB9IGZyb20gJy4vd2hpdGUtc3BhY2UuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1doaXRlU3BhY2VdLFxuICBleHBvcnRzOiBbV2hpdGVTcGFjZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFdoaXRlU3BhY2VNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdMaXN0LCBuem0tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0IHtcbiAgZGVmYXVsdFByb3BzOiBhbnkgPSB7XG4gICAgcHJlZml4Q2xzOiAnYW0tbGlzdCdcbiAgfTtcblxuICBwcml2YXRlIF9yZW5kZXJIZWFkZXI6IGFueSA9ICcnO1xuICBwcml2YXRlIF9yZW5kZXJGb290ZXI6IGFueSA9ICcnO1xuICBwcml2YXRlIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjbGFzc05hbWUodmFsdWUpIHtcbiAgICB0aGlzLl9jbGFzc05hbWUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcmVuZGVySGVhZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJIZWFkZXI7XG4gIH1cbiAgc2V0IHJlbmRlckhlYWRlcih2YWx1ZSkge1xuICAgIHRoaXMuX3JlbmRlckhlYWRlciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByZW5kZXJGb290ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlckZvb3RlcjtcbiAgfVxuICBzZXQgcmVuZGVyRm9vdGVyKHZhbHVlKSB7XG4gICAgdGhpcy5fcmVuZGVyRm9vdGVyID0gdmFsdWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGhvc3RDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2FtLWxpc3QgJyArIHRoaXMuX2NsYXNzTmFtZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgT25EZXN0cm95LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdMaXN0SXRlbSwgbnptLWxpc3QtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcHJlZml4Q2xzOiAnYW0tbGlzdCcsXG4gICAgYWxpZ246ICdtaWRkbGUnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBtdWx0aXBsZUxpbmU6IGZhbHNlLFxuICAgIHdyYXA6IGZhbHNlLFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICByaXBwbGVTdHlsZToge31cbiAgfTtcbiAgYXJyb3dDbHM6IGFueSA9IHt9O1xuICBsaW5lQ2xzOiBhbnkgPSB7fTtcbiAgd3JhcENsczogc3RyaW5nID0gJyc7XG4gIHJpcHBsZUNsczogYW55ID0ge307XG4gIHJpcHBsZUNsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGVib3VuY2VUaW1lb3V0OiBhbnk7XG5cbiAgcHJpdmF0ZSBfdGh1bWJfY29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3RodW1iOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF90aHVtYl9zcmM6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9leHRyYV9jb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZXh0cmE6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX2V4dHJhX3RpdGxlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfYXJyb3c6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgZXh0cmEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhO1xuICB9XG4gIGdldCBleHRyYV9jb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhX2NvbXBvbmVudDtcbiAgfVxuICBnZXQgZXh0cmFfdGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhX3RpdGxlO1xuICB9XG4gIHNldCBleHRyYSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl9leHRyYV9jb21wb25lbnQgPSB0cnVlO1xuICAgICAgdGhpcy5fZXh0cmEgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXh0cmFfY29tcG9uZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLl9leHRyYV90aXRsZSA9IDxzdHJpbmc+dmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBjbGFzc05hbWUodmFsdWUpIHtcbiAgICB0aGlzLl9jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBhcnJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyb3c7XG4gIH1cbiAgc2V0IGFycm93KHZhbHVlKSB7XG4gICAgdGhpcy5fYXJyb3cgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtdWx0aXBsZUxpbmUodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5tdWx0aXBsZUxpbmUgPSB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZXJyb3IodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5lcnJvciA9IHZhbHVlID09PSAnJyA/IHRydWUgOiB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB3cmFwKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMud3JhcCA9IHZhbHVlID09PSAnJyA/IHRydWUgOiB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhbGlnbih2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGxhdGZvcm0odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5wbGF0Zm9ybSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdGh1bWIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RodW1iO1xuICB9XG4gIGdldCB0aHVtYl9jb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RodW1iX2NvbXBvbmVudDtcbiAgfVxuICBnZXQgdGh1bWJfc3JjKCkge1xuICAgIHJldHVybiB0aGlzLl90aHVtYl9zcmM7XG4gIH1cbiAgc2V0IHRodW1iKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuX3RodW1iX2NvbXBvbmVudCA9IHRydWU7XG4gICAgICB0aGlzLl90aHVtYiA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90aHVtYl9jb21wb25lbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3RodW1iX3NyYyA9IDxzdHJpbmc+dmFsdWU7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgYmluZ0NsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndyYXBDbHM7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBjbGljayhldmVudCkge1xuICAgIHRoaXMub25JdGVtQ2xpY2soZXZlbnQpO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnKVxuICBzdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNobW92ZScpXG4gIG1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnKVxuICBlbmQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJylcbiAgbW91c2Vfc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJylcbiAgbW91c2VfZW5kKCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHNldENsc01hcCgpIHtcbiAgICBjb25zdCBjbGFzc05hbWVMaXN0ID0gdGhpcy5fY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgbGV0IGNsYXNzTmFtZU9iaiA9IHt9O1xuICAgIHRoaXMud3JhcENscyA9ICcnO1xuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBjbGFzc05hbWVMaXN0KSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY2xhc3NOYW1lT2JqID0ge1xuICAgICAgICAgIC4uLmNsYXNzTmFtZU9iaixcbiAgICAgICAgICAuLi57IFtgJHt2YWx1ZX1gXTogdHJ1ZSB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcENsc09iaiA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW1gXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tZGlzYWJsZWRgXTogdGhpcy5fZGlzYWJsZWQsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWFjdGl2ZWBdOiB0aGlzLl9hY3RpdmUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWVycm9yYF06IHRoaXMuZGVmYXVsdFByb3BzLmVycm9yLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS10b3BgXTogdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICd0b3AnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1taWRkbGVgXTogdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdtaWRkbGUnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1ib3R0b21gXTogdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdib3R0b20nLFxuICAgICAgLi4uY2xhc3NOYW1lT2JqXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHdyYXBDbHNPYmopIHtcbiAgICAgIGlmICh3cmFwQ2xzT2JqW2tleV0pIHtcbiAgICAgICAgdGhpcy53cmFwQ2xzICs9IGAgJHtrZXl9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJpcHBsZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXJpcHBsZWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tcmlwcGxlLWFuaW1hdGVgXTogdGhpcy5yaXBwbGVDbGlja2VkXG4gICAgfTtcblxuICAgIHRoaXMubGluZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWxpbmVgXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWxpbmUtbXVsdGlwbGVgXTogdGhpcy5kZWZhdWx0UHJvcHMubXVsdGlwbGVMaW5lLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tbGluZS13cmFwYF06IHRoaXMuZGVmYXVsdFByb3BzLndyYXBcbiAgICB9O1xuXG4gICAgdGhpcy5hcnJvd0NscyA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFycm93YF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvdy1ob3Jpem9udGFsYF06IHRoaXMuX2Fycm93ID09PSAnaG9yaXpvbnRhbCcsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvdy12ZXJ0aWNhbGBdOiB0aGlzLl9hcnJvdyA9PT0gJ2Rvd24nIHx8IHRoaXMuX2Fycm93ID09PSAndXAnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3ctdmVydGljYWwtdXBgXTogdGhpcy5fYXJyb3cgPT09ICd1cCdcbiAgICB9O1xuICB9XG5cbiAgb25JdGVtQ2xpY2soZXYpIHtcbiAgICBjb25zdCBpc0FuZHJvaWQgPSB0aGlzLmRlZmF1bHRQcm9wcy5wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnO1xuICAgIGlmIChpc0FuZHJvaWQpIHtcbiAgICAgIGlmICh0aGlzLmRlYm91bmNlVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xuICAgICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBJdGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgIGNvbnN0IFJpcHBsZVdpZHRoID0gTWF0aC5tYXgoSXRlbS5vZmZzZXRIZWlnaHQsIEl0ZW0ub2Zmc2V0V2lkdGgpO1xuICAgICAgY29uc3QgQ2xpZW50UmVjdCA9IGV2LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBwb2ludFggPSBldi5jbGllbnRYIC0gQ2xpZW50UmVjdC5sZWZ0IC0gSXRlbS5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICBjb25zdCBwb2ludFkgPSBldi5jbGllbnRZIC0gQ2xpZW50UmVjdC50b3AgLSBJdGVtLm9mZnNldFdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGNvdmVyUmlwcGxlU3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiBgJHtSaXBwbGVXaWR0aH1weGAsXG4gICAgICAgIGhlaWdodDogYCR7UmlwcGxlV2lkdGh9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtwb2ludFh9cHhgLFxuICAgICAgICB0b3A6IGAke3BvaW50WX1weGBcbiAgICAgIH07XG4gICAgICB0aGlzLmRlZmF1bHRQcm9wcy5yaXBwbGVTdHlsZSA9IGNvdmVyUmlwcGxlU3R5bGU7XG4gICAgICB0aGlzLnJpcHBsZUNsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmlwcGxlQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcm9wcy5yaXBwbGVTdHlsZSA9IHsgZGlzcGxheTogJ25vbmUnIH07XG4gICAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZXYpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucmlwcGxlU3R5bGUgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWJvdW5jZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0JyaWVmLCBuem0tYnJpZWYnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJpZWYuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEJyaWVmIHtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIHByZWZpeENsczogJ2FtLWxpc3QnXG4gIH07XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4vbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuL2xpc3QtaXRlbS9saXN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IEJyaWVmIH0gZnJvbSAnLi9icmllZi9icmllZi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIGV4cG9ydHM6IFtMaXN0LCBMaXN0SXRlbSwgQnJpZWZdLFxuICBkZWNsYXJhdGlvbnM6IFtMaXN0LCBMaXN0SXRlbSwgQnJpZWZdXG59KVxuZXhwb3J0IGNsYXNzIExpc3RNb2R1bGUge31cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEljb25Nb2R1bGUgfSBmcm9tICcuLi9pY29uL2ljb24ubW9kdWxlJztcbmltcG9ydCB7IFdpbmdCbGFua01vZHVsZSB9IGZyb20gJy4uL3dpbmctYmxhbmsvd2luZy1ibGFuay5tb2R1bGUnO1xuaW1wb3J0IHsgV2hpdGVTcGFjZU1vZHVsZSB9IGZyb20gJy4uL3doaXRlLXNwYWNlL3doaXRlLXNwYWNlLm1vZHVsZSc7XG5pbXBvcnQgeyBMaXN0TW9kdWxlIH0gZnJvbSAnLi4vbGlzdC9saXN0Lm1vZHVsZSc7XG5leHBvcnQgY29uc3QgTlpfQlVUVE9OX0RJUkVDVElWRVM6IEFycmF5PGFueT4gPSBbQnV0dG9uXTtcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBOWl9CVVRUT05fRElSRUNUSVZFUyxcbiAgZXhwb3J0czogTlpfQlVUVE9OX0RJUkVDVElWRVMsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEljb25Nb2R1bGUsIFdpbmdCbGFua01vZHVsZSwgV2hpdGVTcGFjZU1vZHVsZSwgTGlzdE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uTW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N3aXRjaCwgbnptLXN3aXRjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN3aXRjaCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTd2l0Y2gge1xuICBwcmVmaXhDbHMgPSAnYW0tc3dpdGNoJztcbiAgd3JhcENscyA9ICdhbS1zd2l0Y2gnO1xuICBjaGVja2JveENscyA9IHtcbiAgICAnY2hlY2tib3gtZGlzYWJsZWQnOiBmYWxzZVxuICB9O1xuICBjb2xvclN0eWxlID0ge307XG4gIHN3aXRjaENoZWNrZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfY29sb3I6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9wbGF0Zm9ybTogc3RyaW5nID0gJ2lvcyc7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbG9yKHZhbHVlKSB7XG4gICAgdGhpcy5fY29sb3IgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbG9yU3R5bGUgPSB7IGJhY2tncm91bmQ6IHRoaXMuX2NvbG9yIH07XG4gIH1cblxuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IHBsYXRmb3JtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGF0Zm9ybSA9IHZhbHVlO1xuICAgIHRoaXMud3JhcENscyA9IHZhbHVlID09PSAnYW5kcm9pZCcgPyBgJHt0aGlzLnByZWZpeENsc30tYW5kcm9pZGAgOiB0aGlzLnByZWZpeENscztcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc3dpdGNoQ2hlY2tlZCA9IHZhbHVlO1xuICAgIHRoaXMuY29sb3JTdHlsZSA9IHsgYmFja2dyb3VuZDogdmFsdWUgPyB0aGlzLl9jb2xvciA6ICcnIH07XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2hlY2tib3hDbHMgPSB7XG4gICAgICAnY2hlY2tib3gtZGlzYWJsZWQnOiB2YWx1ZVxuICAgIH07XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KClcbiAgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICBkaXNwYWx5OiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgY2hhbmdlU3dpdGNoKGNoZWNrZWRWYWx1ZSkge1xuICAgIHRoaXMuc3dpdGNoQ2hlY2tlZCA9IGNoZWNrZWRWYWx1ZTtcbiAgICB0aGlzLmNvbG9yU3R5bGUgPSB7IGJhY2tncm91bmQ6IGNoZWNrZWRWYWx1ZSA/IHRoaXMuX2NvbG9yIDogJycgfTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoY2hlY2tlZFZhbHVlKTtcbiAgfVxuXG4gIGNsaWNrKCkge1xuICAgIHRoaXMub25DbGljay5lbWl0KHRoaXMuc3dpdGNoQ2hlY2tlZCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTd2l0Y2ggfSBmcm9tICcuL3N3aXRjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFdpbmdCbGFua01vZHVsZSB9IGZyb20gJy4uL3dpbmctYmxhbmsvd2luZy1ibGFuay5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU3dpdGNoXSxcbiAgZGVjbGFyYXRpb25zOiBbU3dpdGNoXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV2luZ0JsYW5rTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBTd2l0Y2hNb2R1bGUge31cbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBBZnRlclZpZXdDaGVja2VkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgZm9yd2FyZFJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBhbmltYXRlLCB0cmFuc2l0aW9uLCBzdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbG9jYWxlLXByb3ZpZGVyL2xvY2FsZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdTZWFyY2hCYXIsIG56bS1zZWFyY2gtYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlYXJjaEJhciksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2NhbmNlbEJ1dHRvblN0YXRlJywgW1xuICAgICAgc3RhdGUoJ3Zpc2libGUnLCBzdHlsZSh7IHdpZHRoOiAnKicgfSkpLFxuICAgICAgc3RhdGUoJ2hpZGRlbicsIHN0eWxlKHsgd2lkdGg6ICcxMDAlJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+aGlkZGVuJywgW2FuaW1hdGUoMzAwLCBzdHlsZSh7IHdpZHRoOiAnMTAwJScgfSkpXSksXG4gICAgICB0cmFuc2l0aW9uKCdoaWRkZW4gPT4gdmlzaWJsZScsIFthbmltYXRlKDMwMCwgc3R5bGUoeyB3aWR0aDogJyonIH0pKV0pXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hCYXIgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXNlYXJjaCc7XG4gIGNsZWFyQ2xzOiBvYmplY3Q7XG4gIHdyYXBDbHM6IG9iamVjdDtcbiAgY2FuY2VsQ2xzOiBvYmplY3QgPSB7XG4gICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jYW5jZWxgXTogdHJ1ZVxuICB9O1xuXG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9zaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NhbmNlbFRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWF4TGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzU3VibWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzQ3VzdG9tVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsZWFyQ2xpY2tpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3ludGhldGljUGhDb250YWluZXJSZWY6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9zeW50aGV0aWNQaFJlZjogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3JpZ2h0QnRuUmVmOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaW5wdXRDb250YWluZXJSZWY6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9yaWdodEJ0bkluaXRNYXJnaW5MZWZ0OiBzdHJpbmc7XG4gIHByaXZhdGUgX2JsdXJGcm9tT25DbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxvY2FsZTogYW55ID0ge307XG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoJylcbiAgaW5wdXRFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2IHx8ICcnO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc2hvd0NhbmNlbEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0NhbmNlbEJ1dHRvbjtcbiAgfVxuICBzZXQgc2hvd0NhbmNlbEJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dDYW5jZWxCdXR0b24gPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNhbmNlbFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsVGV4dDtcbiAgfVxuICBzZXQgY2FuY2VsVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NhbmNlbFRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX2lzQ3VzdG9tVGV4dCA9IHRydWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgfVxuICBzZXQgbWF4TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhMZW5ndGggPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc2V0Rm9jdXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZS5mb2N1c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLl9ibHVyRnJvbU9uQ2xlYXIgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uU2VhcmNoYmFyRm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2JsdXJGcm9tT25DbGVhciA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uU2VhcmNoYmFyQmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBfbG9jYWxlUHJvdmlkZXI6IExvY2FsZVByb3ZpZGVyU2VydmljZSkge31cblxuICBzZXRDbGFzcygpIHtcbiAgICB0aGlzLndyYXBDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9YF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXN0YXJ0YF06ICEhKHRoaXMuX2ZvY3VzIHx8ICh0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSkgJiYgIXRoaXMuX2Rpc2FibGVkXG4gICAgfTtcbiAgICB0aGlzLmNhbmNlbENscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2FuY2VsYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWNhbmNlbC1zaG93YF06XG4gICAgICAgIHRoaXMuX3Nob3dDYW5jZWxCdXR0b24gfHwgdGhpcy5fZm9jdXMgfHwgKHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jYW5jZWwtYW5pbWBdOiB0aGlzLl9mb2N1c1xuICAgIH07XG4gICAgdGhpcy5jbGVhckNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2xlYXJgXTogdGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2xlYXItc2hvd2BdOiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwICYmICF0aGlzLl9pc1N1Ym1pdCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2xlYXItYWN0aXZlYF06IHRoaXMuX2lzQ2xlYXJDbGlja2luZ1xuICAgIH07XG4gIH1cblxuICBzZXRTdHlsZSgpIHtcbiAgICBpZiAodGhpcy5faW5wdXRDb250YWluZXJSZWYuY2xhc3NOYW1lLmluZGV4T2YoYCR7dGhpcy5wcmVmaXhDbHN9LXN0YXJ0YCkgPiAtMSkge1xuICAgICAgY29uc3QgcmVhbFdpZHRoID0gdGhpcy5fc3ludGhldGljUGhDb250YWluZXJSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICB0aGlzLl9zeW50aGV0aWNQaFJlZi5zdHlsZS53aWR0aCA9IE1hdGguY2VpbChyZWFsV2lkdGgpICsgJ3B4JztcbiAgICAgIGlmICghdGhpcy5fc2hvd0NhbmNlbEJ1dHRvbikge1xuICAgICAgICB0aGlzLl9yaWdodEJ0blJlZi5zdHlsZS5tYXJnaW5SaWdodCA9ICcwJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3ludGhldGljUGhSZWYuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICBpZiAoIXRoaXMuX3Nob3dDYW5jZWxCdXR0b24pIHtcbiAgICAgICAgdGhpcy5fcmlnaHRCdG5Jbml0TWFyZ2luTGVmdCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3JpZ2h0QnRuUmVmKVsnbWFyZ2luLWxlZnQnXTtcbiAgICAgICAgY29uc3QgYnRuTWFyZ2luUmlnaHQgPSB0aGlzLl9yaWdodEJ0blJlZi5vZmZzZXRXaWR0aCArIHBhcnNlSW50KHRoaXMuX3JpZ2h0QnRuSW5pdE1hcmdpbkxlZnQsIDEwKTtcbiAgICAgICAgdGhpcy5fcmlnaHRCdG5SZWYuc3R5bGUubWFyZ2luUmlnaHQgPSAnLScgKyBidG5NYXJnaW5SaWdodCArICdweCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hiYXJCbHVyKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFzZWxmLl9ibHVyRnJvbU9uQ2xlYXIgJiYgc2VsZi5fdmFsdWUgPT09ICcnICYmIHNlbGYuX2ZvY3VzKSB7XG4gICAgICAgIHNlbGYuX2ZvY3VzID0gZmFsc2U7XG4gICAgICAgIHNlbGYuX3ZhbHVlID0gJyc7XG4gICAgICAgIHNlbGYub25CbHVyLmVtaXQoKTtcbiAgICAgICAgc2VsZi5zZXRDbGFzcygpO1xuICAgICAgfVxuICAgICAgc2VsZi5fYmx1ckZyb21PbkNsZWFyID0gZmFsc2U7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgb25TZWFyY2hiYXJGb2N1cygpIHtcbiAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgdGhpcy5faXNTdWJtaXQgPSBmYWxzZTtcbiAgICB0aGlzLm9uRm9jdXMuZW1pdCgpO1xuICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgfVxuXG4gIG9uU2VhcmNoYmFyQ2hhbmdlKGUpIHtcbiAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KGUpO1xuICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgfVxuXG4gIG9uU2VhcmNoU3VibWl0KGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5fdmFsdWUgPSBlLnRhcmdldFswXS52YWx1ZTtcbiAgICB0aGlzLl9pc1N1Ym1pdCA9IHRydWU7XG4gICAgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLnNldENsYXNzKCk7XG4gICAgdGhpcy5fYmx1ckZyb21PbkNsZWFyID0gdHJ1ZTtcbiAgfVxuXG4gIG9uU2VhcmNoYmFyQ2FuY2VsKCkge1xuICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgICB0aGlzLnNldENsYXNzKCk7XG4gIH1cblxuICBvblNlYXJjaGJhckNsZWFyKCkge1xuICAgIHRoaXMuX2JsdXJGcm9tT25DbGVhciA9IHRydWU7XG4gICAgdGhpcy5faXNDbGVhckNsaWNraW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uU2VhcmNoYmFyQ2hhbmdlKCcnKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5vbkNsZWFyLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgICB0aGlzLl9pc0NsZWFyQ2xpY2tpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2JsdXJGcm9tT25DbGVhciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbGFzcygpO1xuICAgIH0sIDEwMCk7XG4gICAgdGhpcy5vblNlYXJjaGJhckZvY3VzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENsYXNzKCk7XG4gICAgdGhpcy5fbG9jYWxlUHJvdmlkZXIubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5fbG9jYWxlUHJvdmlkZXIuZ2V0TG9jYWxlU3ViT2JqKCdTZWFyY2hCYXInKTtcbiAgICAgIHRoaXMuX2NhbmNlbFRleHQgPSB0aGlzLl9pc0N1c3RvbVRleHQgPyB0aGlzLl9jYW5jZWxUZXh0IDogdGhpcy5sb2NhbGUuY2FuY2VsVGV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9zeW50aGV0aWNQaENvbnRhaW5lclJlZiA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgYCR7dGhpcy5wcmVmaXhDbHN9LXN5bnRoZXRpYy1waC1jb250YWluZXJgXG4gICAgKVswXTtcbiAgICB0aGlzLl9zeW50aGV0aWNQaFJlZiA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGAke3RoaXMucHJlZml4Q2xzfS1zeW50aGV0aWMtcGhgKVswXTtcbiAgICB0aGlzLl9yaWdodEJ0blJlZiA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYW5jZWwnKVswXTtcbiAgICB0aGlzLl9pbnB1dENvbnRhaW5lclJlZiA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGAke3RoaXMucHJlZml4Q2xzfWApWzBdO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuc2V0U3R5bGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hCYXIgfSBmcm9tICcuL3NlYXJjaC1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW1NlYXJjaEJhcl0sXG4gIGRlY2xhcmF0aW9uczogW1NlYXJjaEJhcl0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hCYXJNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N0ZXBwZXIgLCBuem0tc3RlcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwcGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTdGVwcGVyIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tc3RlcHBlcic7XG4gIHVwRGlzYWJsZUNsczogb2JqZWN0O1xuICBkb3duRGlzYWJsZUNsczogb2JqZWN0O1xuICBzdGVwcGVyQ2xzOiBvYmplY3Q7XG5cbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSBJbmZpbml0eTtcbiAgcHJpdmF0ZSBfbWluOiBudW1iZXIgPSAtSW5maW5pdHk7XG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0ZXA6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zaG93TnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3VwRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZG93bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzVXBDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0Rvd25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG4gIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gIH1cbiAgc2V0IHN0ZXAodmFsdWUpIHtcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fZG93bkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3VwRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmNsc1N0cERpc2FibGVkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seTtcbiAgfVxuICBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkT25seSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzaG93TnVtYmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd051bWJlciA9IHZhbHVlO1xuICAgIHRoaXMuY2xzU2hvd051bSA9IHZhbHVlO1xuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tc3RlcHBlcicpXG4gIGNsc1N0ZXBwZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXN0ZXBwZXItZGlzYWJsZWQnKVxuICBjbHNTdHBEaXNhYmxlZDogYm9vbGVhbiA9IHRoaXMuX2Rpc2FibGVkO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNob3dOdW1iZXInKVxuICBjbHNTaG93TnVtOiBib29sZWFuID0gdGhpcy5fc2hvd051bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgb25JbmNyZWFzZSgpIHtcbiAgICBpZiAoIXRoaXMuX3VwRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fdmFsdWUgKyB0aGlzLl9zdGVwO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl92YWx1ZSArIHRoaXMuX3N0ZXAgPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgdGhpcy5fdXBEaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdmFsdWUgLSB0aGlzLl9zdGVwID49IHRoaXMuX21pbikge1xuICAgICAgICB0aGlzLl9kb3duRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVXBDbGljayA9IHRydWU7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2lzVXBDbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldENscygpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBvbkRlY3JlYXNlKCkge1xuICAgIGlmICghdGhpcy5fZG93bkRpc2FibGVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3ZhbHVlIC0gdGhpcy5fc3RlcDtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICBpZiAodGhpcy5fdmFsdWUgLSB0aGlzLl9zdGVwIDwgdGhpcy5fbWluKSB7XG4gICAgICAgIHRoaXMuX2Rvd25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdmFsdWUgKyB0aGlzLl9zdGVwIDw9IHRoaXMuX21heCkge1xuICAgICAgICB0aGlzLl91cERpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0Rvd25DbGljayA9IHRydWU7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2lzRG93bkNsaWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/IHBhcnNlSW50KHZhbHVlLCBudWxsKSA6IDA7XG4gICAgaWYgKHZhbHVlIDwgdGhpcy5fbWluKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX21pbjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID4gdGhpcy5fbWF4KSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX21heDtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIHNldENscygpIHtcbiAgICB0aGlzLnVwRGlzYWJsZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taGFuZGxlci11cC1kaXNhYmxlZGBdOiB0aGlzLl91cERpc2FibGVkLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1oYW5kbGVyLWFjdGl2ZWBdOiB0aGlzLl9pc1VwQ2xpY2tcbiAgICB9O1xuICAgIHRoaXMuZG93bkRpc2FibGVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhbmRsZXItZG93bi1kaXNhYmxlZGBdOiB0aGlzLl9kb3duRGlzYWJsZWQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhbmRsZXItYWN0aXZlYF06IHRoaXMuX2lzRG93bkNsaWNrXG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLl92YWx1ZSArIHRoaXMuX3N0ZXAgPiB0aGlzLl9tYXgpIHtcbiAgICAgIHRoaXMuX3VwRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdmFsdWUgLSB0aGlzLl9zdGVwIDwgdGhpcy5fbWluKSB7XG4gICAgICB0aGlzLl9kb3duRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNldENscygpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RlcHBlciB9IGZyb20gJy4vc3RlcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU3RlcHBlcl0sXG4gIGRlY2xhcmF0aW9uczogW1N0ZXBwZXJdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgSWNvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcHBlck1vZHVsZSB7fVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N0ZXAsIG56bS1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN0ZXApLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByZWZpeENscyA9ICdhbS1zdGVwcyc7XG4gIHN0ZXBJdGVtQ2xzID0ge307XG4gIGljb25DbHM6IG9iamVjdDtcbiAgdGFpbENvbnRlbnQ6IHN0cmluZztcbiAgc3RlcE51bWJlcjogbnVtYmVyO1xuICBpc0ljb25TdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHByaXZhdGUgX3N0YXR1czogU3RhdHVzRW51bTtcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVzY3JpcHRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfaWNvbjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBnZXQgc3RhdHVzKCk6IFN0YXR1c0VudW0ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cbiAgc2V0IHN0YXR1cyh2YWx1ZTogU3RhdHVzRW51bSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XG4gICAgICB0aGlzLnNldENsYXNzKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgfVxuICBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uO1xuICB9XG4gIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaWNvbigpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5faWNvbjtcbiAgfVxuICBzZXQgaWNvbih2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5pc0ljb25TdHJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ljb24gPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0Q2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXN0ZXBzLWl0ZW0nKVxuICBjbHNTdGVwSXRlbTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgc2V0Q2xhc3MoKSB7XG4gICAgdGhpcy5pY29uQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1pY29uYF06IHRydWVcbiAgICB9O1xuICAgIHRoaXMuc3RlcEl0ZW1DbHMgPSBPYmplY3QuYXNzaWduKHRoaXMuc3RlcEl0ZW1DbHMsXG4gICAgICB7XG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taXRlbS0ke3RoaXMuc3RhdHVzfWBdOiB0cnVlLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWl0ZW0tY3VzdG9tYF06IHRoaXMuaWNvblxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBTdGF0dXNFbnVtIHtcbiAgV0FJVCA9ICd3YWl0JyxcbiAgUFJPQ0VTUyA9ICdwcm9jZXNzJyxcbiAgRklOSVNIID0gJ2ZpbmlzaCcsXG4gIEVSUk9SID0gJ2Vycm9yJ1xufVxuZXhwb3J0IGVudW0gRGlyZWN0aW9uRW51bSB7XG4gIFZFUlRJQ0FMID0gJ3ZlcnRpY2FsJyxcbiAgSE9SSVpPTlRBTCA9ICdob3Jpem9udGFsJ1xufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgSG9zdEJpbmRpbmcsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0YXR1c0VudW0sIERpcmVjdGlvbkVudW0gfSBmcm9tICcuL3N0ZXAvc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RlcCB9IGZyb20gJy4vc3RlcC9zdGVwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N0ZXBzLG56bS1zdGVwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3RlcHMgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1zdGVwcyc7XG5cbiAgcHJpdmF0ZSBfY3VycmVudDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfc2l6ZTogc3RyaW5nO1xuICBwcml2YXRlIF9zdGF0dXM6IFN0YXR1c0VudW0gPSBTdGF0dXNFbnVtLlBST0NFU1M7XG4gIHByaXZhdGUgX2RpcmVjdGlvbjogRGlyZWN0aW9uRW51bSA9IERpcmVjdGlvbkVudW0uVkVSVElDQUw7XG4gIHByaXZhdGUgX3N0ZXBzQ2xzOiBvYmplY3Q7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTdGVwKVxuICBzdGVwSXRlbXM6IFF1ZXJ5TGlzdDxTdGVwPjtcblxuICBASW5wdXQoKVxuICBzZXQgY3VycmVudCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICB0aGlzLl9jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzaXplKHZhbHVlKSB7XG4gICAgdGhpcy5fc2l6ZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHN0YXR1cyh2YWx1ZTogU3RhdHVzRW51bSkge1xuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnN0ZXBJdGVtcykge1xuICAgICAgdGhpcy5zZXRTdGVwU3R5bGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRpcmVjdGlvbih2YWx1ZTogRGlyZWN0aW9uRW51bSkge1xuICAgIHRoaXMuX2RpcmVjdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXN0ZXBzJylcbiAgY2xzU3RlcHM6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXN0ZXBzLXNtYWxsJylcbiAgY2xzU3RlcHNTbWFsbDogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1zdGVwcy1sYWJlbC12ZXJ0aWNhbCcpXG4gIGNsc1N0ZXBzTGFiZWxWdGw6IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tc3RlcHMtdmVydGljYWwnKVxuICBjbHNTdGVwc1Z0bDogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1zdGVwcy1ob3Jpem9udGFsJylcbiAgY2xzU3RlcHNIenRsOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBfcmVuZGVyOiBSZW5kZXJlcjIpIHt9XG5cbiAgc2V0U3RlcFN0eWxlKCkge1xuICAgIGNvbnN0IGl0ZW1Db3VudCA9IHRoaXMuc3RlcEl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCBpdGVtQXJyID0gdGhpcy5zdGVwSXRlbXNbJ19yZXN1bHRzJ107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1Db3VudDsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgc3RlcCA9IGl0ZW1BcnJbaW5kZXhdO1xuICAgICAgc3RlcC5zdGVwTnVtYmVyID0gaW5kZXggKyAxO1xuICAgICAgaWYgKGluZGV4IDwgaXRlbUNvdW50IC0gMSAmJiBpdGVtQXJyW2luZGV4ICsgMV0uc3RhdHVzID09PSBTdGF0dXNFbnVtLkVSUk9SKSB7XG4gICAgICAgIHN0ZXAuc3RlcEl0ZW1DbHMgPSBzdGVwLnN0ZXBJdGVtQ2xzXG4gICAgICAgICAgPyBPYmplY3QuYXNzaWduKHN0ZXAuc3RlcEl0ZW1DbHMsIHsgJ2Vycm9yLXRhaWwnOiB0cnVlIH0pXG4gICAgICAgICAgOiB7ICdlcnJvci10YWlsJzogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgbGV0IGljb24gPSBzdGVwLmljb247XG4gICAgICBpZiAoIXN0ZXAuc3RhdHVzKSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fY3VycmVudCkge1xuICAgICAgICAgIHN0ZXAuc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgdGhpcy5fY3VycmVudCkge1xuICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU3RhdHVzRW51bS5GSU5JU0g7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RlcC5zdGF0dXMgPSBTdGF0dXNFbnVtLldBSVQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaWNvbikge1xuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLl9jdXJyZW50KSB7XG4gICAgICAgICAgaWNvbiA9ICdjaGVjay1jaXJjbGUtbyc7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiB0aGlzLl9jdXJyZW50KSB7XG4gICAgICAgICAgaWNvbiA9ICdlbGxpcHNpcyc7XG4gICAgICAgICAgc3RlcC5zdGVwSXRlbUNscyA9IHN0ZXAuc3RlcEl0ZW1DbHNcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihzdGVwLnN0ZXBJdGVtQ2xzLCB7ICdlbGxpcHNpcy1pdGVtJzogdHJ1ZSB9KVxuICAgICAgICAgICAgOiB7ICdlbGxpcHNpcy1pdGVtJzogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICgodGhpcy5fc3RhdHVzID09PSBTdGF0dXNFbnVtLkVSUk9SICYmIGluZGV4ID09PSB0aGlzLl9jdXJyZW50KSB8fCBzdGVwLnN0YXR1cyA9PT0gU3RhdHVzRW51bS5FUlJPUikge1xuICAgICAgICAgIGljb24gPSAnY3Jvc3MtY2lyY2xlLW8nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGVwLmljb24gPSBpY29uO1xuICAgICAgc3RlcC5pY29uU2l6ZSA9IHRoaXMuX3NpemUgPT09ICdzbWFsbCcgPyAodGhpcy5fc3RhdHVzID09PSBTdGF0dXNFbnVtLldBSVQgPyAneHhzJyA6ICd4cycpIDogJ21kJztcbiAgICAgIHN0ZXAuc2V0Q2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDbHMoKSB7XG4gICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gRGlyZWN0aW9uRW51bS5IT1JJWk9OVEFMKSB7XG4gICAgICB0aGlzLmNsc1N0ZXBzTGFiZWxWdGwgPSB0cnVlO1xuICAgICAgdGhpcy5jbHNTdGVwc0h6dGwgPSB0cnVlO1xuICAgICAgdGhpcy5jbHNTdGVwc1Z0bCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBEaXJlY3Rpb25FbnVtLlZFUlRJQ0FMKSB7XG4gICAgICB0aGlzLmNsc1N0ZXBzVnRsID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xzU3RlcHNIenRsID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zaXplID09PSAnc21hbGwnKSB7XG4gICAgICB0aGlzLmNsc1N0ZXBzU21hbGwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsc1N0ZXBzU21hbGwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGVwU3R5bGUoKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0ZXBzIH0gZnJvbSAnLi9zdGVwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuaW1wb3J0IHsgU3RlcCB9IGZyb20gJy4vc3RlcC9zdGVwLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtTdGVwcywgU3RlcF0sXG4gIGRlY2xhcmF0aW9uczogW1N0ZXBzLCBTdGVwXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIEljb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBzTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYXJvdXNlbFNsaWRlLCBuem0tY2Fyb3VzZWwtc2xpZGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwtc2xpZGUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhcm91c2VsU2xpZGVDb21wb25lbnQge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNhcm91c2VsLWNvbnRhaW5lcicpXG4gIGNvbnRhaW5lciA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgucHgnKVxuICB3aWR0aDtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICBoZWlnaHQgPSAnYXV0byc7XG4gIEBIb3N0QmluZGluZygnc3R5bGUubGVmdC5weCcpXG4gIGxlZnQ7XG4gIEBIb3N0QmluZGluZygnc3R5bGUudG9wLnB4JylcbiAgdG9wO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1hcmdpbicpXG4gIG1hcmdpbjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2Vkb3duJyB8fCBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJyB8fCBldmVudC50eXBlID09PSAnbW91c2V1cCcgfHwgZXZlbnQudHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSkge1xuICAgICAgICByZXR1cm4gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgUXVlcnlMaXN0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXJvdXNlbFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC1zbGlkZS9jYXJvdXNlbC1zbGlkZS5jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgdG91Y2hFdmVudCBmcm9tICcuLi9jb3JlL3V0aWwvdG91Y2gtZXZlbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYXJvdXNlbCwgbnptLWNhcm91c2VsJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHNsaWRlSGVpZ2h0OiBudW1iZXI7XG4gIHRvdWNoT2JqZWN0O1xuICBzdHlsZSA9IHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpJyxcbiAgICBtYXJnaW46ICcnXG4gIH07XG5cbiAgcHJpdmF0ZSBfdGltZXI6IGFueTtcbiAgcHJpdmF0ZSBfbm9kZUFycjogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9sYXN0SW5kZXg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2lzTW91c2VEb3duOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JhdGlvbldpZHRoOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50U2xpZGVXaWR0aDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudFNsaWRlSGVpZ2h0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF90cmFuc2l0aW9uOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfc3BhY2VXaWR0aDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBAQ29udGVudENoaWxkcmVuKENhcm91c2VsU2xpZGVDb21wb25lbnQpXG4gIGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxTbGlkZUNvbXBvbmVudD47XG5cbiAgQElucHV0KClcbiAgc3BlZWQ6IG51bWJlciA9IDUwMDtcbiAgQElucHV0KClcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyID0gMDtcbiAgQElucHV0KClcbiAgZG90czogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHZlcnRpY2FsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGF1dG9wbGF5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGF1dG9wbGF5SW50ZXJ2YWw6IGFueSA9IDMwMDA7XG4gIEBJbnB1dCgpXG4gIGluZmluaXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRvdFN0eWxlOiBvYmplY3QgPSB7fTtcbiAgQElucHV0KClcbiAgZG90QWN0aXZlU3R5bGU6IG9iamVjdCA9IHt9O1xuICBASW5wdXQoKVxuICBmcmFtZU92ZXJmbG93OiBzdHJpbmcgPSAnaGlkZGVuJztcbiAgQElucHV0KClcbiAgY2VsbFNwYWNpbmc6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpXG4gIHNsaWRlV2lkdGg6IG51bWJlciA9IDE7XG4gIEBJbnB1dCgpXG4gIHN3aXBlU3BlZWQ6IG51bWJlciA9IDEyO1xuICBASW5wdXQoKVxuICBkcmFnZ2luZzogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKVxuICBhZnRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBiZWZvcmVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tY2Fyb3VzZWwnKVxuICBjYXJvdXNlbFdyYXBwZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNhcm91c2VsJylcbiAgY2Fyb3VzZWx3cmFwOiBib29sZWFuID0gdHJ1ZTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgcGFuc3RhcnQoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB0aGlzLl9pc01vdXNlRG93biA9IHRydWU7XG4gICAgdGhpcy50b3VjaE9iamVjdCA9IHtcbiAgICAgIHN0YXJ0WDogdG91Y2hFdmVudC5nZXRFdmVudFRhcmdldChldmVudCkucGFnZVgsXG4gICAgICBzdGFydFk6IHRvdWNoRXZlbnQuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpLnBhZ2VZLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnRvdWNoT2JqZWN0LmRpcmVjdGlvblxuICAgIH07XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnLCBbJyRldmVudCddKVxuICBwYW5tb3ZlKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nICYmICF0aGlzLl9pc01vdXNlRG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5zd2lwZURpcmVjdGlvbihcbiAgICAgIHRoaXMudG91Y2hPYmplY3Quc3RhcnRYLFxuICAgICAgdG91Y2hFdmVudC5nZXRFdmVudFRhcmdldChldmVudCkucGFnZVgsXG4gICAgICB0aGlzLnRvdWNoT2JqZWN0LnN0YXJ0WSxcbiAgICAgIHRvdWNoRXZlbnQuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpLnBhZ2VZXG4gICAgKTtcblxuICAgIGlmIChkaXJlY3Rpb24gIT09IDApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy52ZXJ0aWNhbFxuICAgICAgPyBNYXRoLmFicyh0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS5wYWdlWSAtIHRoaXMudG91Y2hPYmplY3Quc3RhcnRZKVxuICAgICAgOiBNYXRoLmFicyh0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS5wYWdlWCAtIHRoaXMudG91Y2hPYmplY3Quc3RhcnRYKTtcbiAgICBjb25zdCBvZmZzZXQgPSAtdGhpcy50b3VjaE9iamVjdC5kaXJlY3Rpb24gKiBsZW5ndGggLSB0aGlzLnNlbGVjdGVkSW5kZXggKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICB0aGlzLnRvdWNoT2JqZWN0ID0ge1xuICAgICAgc3RhcnRYOiB0aGlzLnRvdWNoT2JqZWN0LnN0YXJ0WCxcbiAgICAgIHN0YXJ0WTogdGhpcy50b3VjaE9iamVjdC5zdGFydFksXG4gICAgICBlbmRYOiB0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS5wYWdlWCxcbiAgICAgIGVuZFk6IHRvdWNoRXZlbnQuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpLnBhZ2VZLFxuICAgICAgbGVuZ3RoLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2Zmc2V0XG4gICAgfTtcbiAgICBpZiAoZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB0aGlzLnNldFNsaWRlU3R5bGVzKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy50b3VjaE9iamVjdC5kaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0TGlzdFN0eWxlcyhvZmZzZXQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcsIFsnJGV2ZW50J10pXG4gIHBhbmVuZChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5kcmFnZ2luZyAmJiAhdGhpcy5faXNNb3VzZURvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b3VjaE9iamVjdC5sZW5ndGggPiB0aGlzLnN3aXBlU3BlZWQpIHtcbiAgICAgIHRoaXMuY2Fyb3VzZWwodGhpcy50b3VjaE9iamVjdC5kaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldExpc3RTdHlsZXModGhpcy50b3VjaE9iamVjdC5kaXJlY3Rpb24gKiB0aGlzLnRvdWNoT2JqZWN0Lmxlbmd0aCArIHRoaXMudG91Y2hPYmplY3Qub2Zmc2V0KTtcbiAgICAgIHRoaXMuc3R5bGVbJ3RyYW5zaXRpb24nXSA9IHRoaXMuX3RyYW5zaXRpb247XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfSwgdGhpcy5zcGVlZCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIFsnJGV2ZW50J10pXG4gIGNhbmNlbCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIH0sIHRoaXMuc3BlZWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlOiBFbGVtZW50UmVmKSB7fVxuXG4gIGluaXRDYXJvdXNlbFNpemUoKSB7XG4gICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuX2VsZS5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuc2xpZGVIZWlnaHQgPSBuYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Nhcm91c2Vsc2xpZGUnKS5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy5fY3VycmVudFNsaWRlSGVpZ2h0ID0gdGhpcy5zbGlkZUhlaWdodCAqIHRoaXMuc2xpZGVXaWR0aDtcbiAgICB0aGlzLl9jdXJyZW50U2xpZGVXaWR0aCA9IG5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgdGhpcy5fcmF0aW9uV2lkdGggPSB0aGlzLnZlcnRpY2FsID8gdGhpcy5fY3VycmVudFNsaWRlV2lkdGggOiB0aGlzLl9jdXJyZW50U2xpZGVXaWR0aCAqIHRoaXMuc2xpZGVXaWR0aDtcbiAgICB0aGlzLl9zcGFjZVdpZHRoID0gKCh0aGlzLnZlcnRpY2FsID8gdGhpcy5zbGlkZUhlaWdodCA6IHRoaXMuX2N1cnJlbnRTbGlkZVdpZHRoKSAtIHRoaXMuX3JhdGlvbldpZHRoKSAvIDI7XG4gIH1cblxuICBjYXJvdXNlbEluaXQoaXRlbXMpIHtcbiAgICB0aGlzLmluZmluaXRlID0gdGhpcy5pbmZpbml0ZSB8fCB0cnVlO1xuICAgIHRoaXMuX25vZGVBcnIgPSBpdGVtc1snX3Jlc3VsdHMnXTtcbiAgICB0aGlzLmRyYWdnaW5nID0gdGhpcy5kcmFnZ2luZyA/IHRoaXMuZHJhZ2dpbmcgOiBmYWxzZTtcbiAgICBpZiAodGhpcy5fbm9kZUFyci5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLl9sYXN0SW5kZXggPSB0aGlzLl9ub2RlQXJyLmxlbmd0aCAtIDE7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fbm9kZUFyci5mb3JFYWNoKCh2LCBpbmRleCkgPT4ge1xuICAgICAgICAgIHYud2lkdGggPSB0aGlzLnZlcnRpY2FsID8gJ2F1dG8nIDogdGhpcy5fcmF0aW9uV2lkdGggLSB0aGlzLmNlbGxTcGFjaW5nO1xuICAgICAgICAgIHYubGVmdCA9IHRoaXMudmVydGljYWwgPyAwIDogaW5kZXggPT09IHRoaXMuX2xhc3RJbmRleCA/IC10aGlzLl9yYXRpb25XaWR0aCA6IGluZGV4ICogdGhpcy5fcmF0aW9uV2lkdGg7XG4gICAgICAgICAgdi50b3AgPSB0aGlzLnZlcnRpY2FsID8gKGluZGV4ID09PSB0aGlzLl9sYXN0SW5kZXggPyAtdGhpcy5fcmF0aW9uV2lkdGggOiBpbmRleCAqIHRoaXMuX3JhdGlvbldpZHRoKSA6IDA7XG4gICAgICAgICAgdi5tYXJnaW4gPSB0aGlzLnZlcnRpY2FsID8gYCR7dGhpcy5jZWxsU3BhY2luZyAvIDJ9cHggYXV0b2AgOiBgYXV0byAke3RoaXMuY2VsbFNwYWNpbmcgLyAyfXB4YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9ub2RlQXJyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX25vZGVBcnIuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgIHYud2lkdGggPSB0aGlzLl9yYXRpb25XaWR0aCAtIHRoaXMuY2VsbFNwYWNpbmc7XG4gICAgICAgICAgdi5sZWZ0ID0gMDtcbiAgICAgICAgICB2LnRvcCA9IDA7XG4gICAgICAgICAgdi5tYXJnaW4gPSBgYXV0byAke3RoaXMuY2VsbFNwYWNpbmcgLyAyfXB4YDtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFRpbWVyKCkge1xuICAgIGlmICghdGhpcy5hdXRvcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIHRoaXMuX3RpbWVyID0gdGhpcy5hdXRvcGxheUludGVydmFsXG4gICAgICA/IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdGhpcy5jYXJvdXNlbCgxKTtcbiAgICAgIH0sIHRoaXMuYXV0b3BsYXlJbnRlcnZhbClcbiAgICAgIDogMDtcbiAgfVxuXG4gIHN0b3BUaW1lcigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX3RpbWVyKTtcbiAgfVxuXG4gIGNhcm91c2VsKG1vdmVEaXJlY3Rpb24pIHtcbiAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgdGhpcy5tb3ZlVXAoKTtcbiAgICAgIH0gZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb3ZlRG93bigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW92ZURpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICB0aGlzLm1vdmVMZWZ0KCk7XG4gICAgICB9IGVsc2UgaWYgKG1vdmVEaXJlY3Rpb24gPT09IC0xKSB7XG4gICAgICAgIHRoaXMubW92ZVJpZ2h0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3R5bGVbJ3RyYW5zaXRpb24nXSA9IHRoaXMuX3RyYW5zaXRpb247XG4gIH1cblxuICBtb3ZlVXAoKSB7XG4gICAgdGhpcy5nb3RvQ2Fyb3VzZWwodGhpcy5nZXRBZnRlck5vZGUoZmFsc2UpKTtcbiAgfVxuXG4gIG1vdmVEb3duKCkge1xuICAgIHRoaXMuZ290b0Nhcm91c2VsKHRoaXMuZ2V0QWZ0ZXJOb2RlKHRydWUpKTtcbiAgfVxuXG4gIG1vdmVMZWZ0KCkge1xuICAgIHRoaXMuZ290b0Nhcm91c2VsKHRoaXMuZ2V0QWZ0ZXJOb2RlKGZhbHNlKSk7XG4gIH1cblxuICBtb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy5nb3RvQ2Fyb3VzZWwodGhpcy5nZXRBZnRlck5vZGUodHJ1ZSkpO1xuICB9XG5cbiAgZ2V0QWZ0ZXJOb2RlKHByZSkge1xuICAgIGxldCBuZXh0SW5kZXg7XG4gICAgaWYgKHByZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA8PSAwKSB7XG4gICAgICAgIHRoaXMuZ2V0TGlzdFN0eWxlcyh0aGlzLl9yYXRpb25XaWR0aCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX25vZGVBcnIuZm9yRWFjaCgodiwgdGVtcEluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGVtcEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIHYubGVmdCA9IHRoaXMudmVydGljYWwgPyAwIDogdGhpcy5fbm9kZUFyci5sZW5ndGggKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICAgICAgdi50b3AgPSB0aGlzLnZlcnRpY2FsID8gdGhpcy5fbm9kZUFyci5sZW5ndGggKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2LmxlZnQgPSB0aGlzLnZlcnRpY2FsID8gMCA6IHRlbXBJbmRleCAqIHRoaXMuX3JhdGlvbldpZHRoO1xuICAgICAgICAgICAgICB2LnRvcCA9IHRoaXMudmVydGljYWwgPyB0ZW1wSW5kZXggKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5nZXRMaXN0U3R5bGVzKC10aGlzLl9yYXRpb25XaWR0aCAqICh0aGlzLml0ZW1zLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgfSwgdGhpcy5zcGVlZCk7XG4gICAgICAgIG5leHRJbmRleCA9ICF0aGlzLmluZmluaXRlID8gbnVsbCA6IHRoaXMuX2xhc3RJbmRleDtcbiAgICAgICAgdGhpcy5iZWZvcmVDaGFuZ2UuZW1pdCh7IGZyb206IHRoaXMuc2VsZWN0ZWRJbmRleCwgdG86IG5leHRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5leHRJbmRleDtcbiAgICAgIH1cbiAgICAgIG5leHRJbmRleCA9IHRoaXMuc2VsZWN0ZWRJbmRleCAtIDE7XG4gICAgICB0aGlzLmdldExpc3RTdHlsZXMobmV4dEluZGV4ICogdGhpcy5fcmF0aW9uV2lkdGggKiB0aGlzLnRvdWNoT2JqZWN0LmRpcmVjdGlvbik7XG4gICAgICB0aGlzLl9ub2RlQXJyLmZvckVhY2goKHYsIHRlbXBJbmRleCkgPT4ge1xuICAgICAgICBpZiAoMCA9PT0gdGVtcEluZGV4ICYmIG5leHRJbmRleCA9PT0gdGhpcy5fbm9kZUFyci5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgdi5sZWZ0ID0gMDtcbiAgICAgICAgICB2LnRvcCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5iZWZvcmVDaGFuZ2UuZW1pdCh7IGZyb206IHRoaXMuc2VsZWN0ZWRJbmRleCwgdG86IG5leHRJbmRleCB9KTtcbiAgICAgIHJldHVybiBuZXh0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPj0gdGhpcy5fbGFzdEluZGV4KSB7XG4gICAgICAgIHRoaXMuc2V0U2xpZGVTdHlsZXModGhpcy5zZWxlY3RlZEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5nZXRMaXN0U3R5bGVzKC0odGhpcy5fbGFzdEluZGV4ICsgMSkgKiB0aGlzLl9yYXRpb25XaWR0aCk7XG4gICAgICAgIG5leHRJbmRleCA9ICF0aGlzLmluZmluaXRlID8gbnVsbCA6IDA7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2hhbmdlLmVtaXQoeyBmcm9tOiB0aGlzLnNlbGVjdGVkSW5kZXgsIHRvOiBuZXh0SW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuZXh0SW5kZXg7XG4gICAgICB9XG4gICAgICBuZXh0SW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggKyAxO1xuICAgICAgdGhpcy5zZXRTbGlkZVN0eWxlcyh0aGlzLnNlbGVjdGVkSW5kZXgsIDEpO1xuICAgICAgdGhpcy5nZXRMaXN0U3R5bGVzKC1uZXh0SW5kZXggKiB0aGlzLl9yYXRpb25XaWR0aCk7XG4gICAgICB0aGlzLmJlZm9yZUNoYW5nZS5lbWl0KHsgZnJvbTogdGhpcy5zZWxlY3RlZEluZGV4LCB0bzogbmV4dEluZGV4IH0pO1xuICAgICAgcmV0dXJuIG5leHRJbmRleDtcbiAgICB9XG4gIH1cblxuICBjYWN1bGF0ZURpcmVjdGlvbkxlZnRDdXJyZW50SW5kZXgoKSB7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IHRoaXMuc2VsZWN0ZWRJbmRleDtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAocHJldmlvdXNJbmRleCArIDEpICUgdGhpcy5pdGVtcy5sZW5ndGg7XG4gIH1cblxuICBjYWN1bGF0ZURpcmVjdGlvblJpZ2h0Q3VycmVudEluZGV4KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4O1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IChwcmV2aW91c0luZGV4IC0gMSkgJSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgfVxuXG4gIGdvdG9DYXJvdXNlbChhZnRlckluZGV4KSB7XG4gICAgaWYgKGFmdGVySW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5nZXRDdXJyZW50SW5kZXgoKTtcblxuICAgIGlmIChhZnRlckluZGV4ID09PSAwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fbm9kZUFyci5mb3JFYWNoKCh2LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fbm9kZUFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB2LmxlZnQgPSB0aGlzLnZlcnRpY2FsID8gMCA6IC10aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICAgIHYudG9wID0gdGhpcy52ZXJ0aWNhbCA/IC10aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHYubGVmdCA9IHRoaXMudmVydGljYWwgPyAwIDogaW5kZXggKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICAgIHYudG9wID0gdGhpcy52ZXJ0aWNhbCA/IGluZGV4ICogdGhpcy5fcmF0aW9uV2lkdGggOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgICAgICB0aGlzLmdldExpc3RTdHlsZXMoMCk7XG4gICAgICB9LCB0aGlzLnNwZWVkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gYWZ0ZXJJbmRleDtcbiAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgfVxuXG4gIGdldEN1cnJlbnRJbmRleCgpIHtcbiAgICBpZiAodGhpcy50b3VjaE9iamVjdC5kaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgIHRoaXMuY2FjdWxhdGVEaXJlY3Rpb25MZWZ0Q3VycmVudEluZGV4KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FjdWxhdGVEaXJlY3Rpb25SaWdodEN1cnJlbnRJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNsaWRlU3R5bGVzKGluZGV4LCBkaXJlY3Rpb24sIHhEaXN0OiBudW1iZXIgPSAwKSB7XG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgdGhpcy5fbm9kZUFyci5mb3JFYWNoKCh2LCB0ZW1wSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5fbm9kZUFyci5sZW5ndGggJiYgaW5kZXggLSAxID09PSB0ZW1wSW5kZXgpIHtcbiAgICAgICAgICBpZiAoeERpc3QgPT09IDAgfHwgeERpc3QgPiB0aGlzLl9zcGFjZVdpZHRoKSB7XG4gICAgICAgICAgICB2LmxlZnQgPSB0aGlzLnZlcnRpY2FsID8gMCA6ICh0aGlzLl9ub2RlQXJyLmxlbmd0aCArIHRlbXBJbmRleCkgKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICAgIHYudG9wID0gdGhpcy52ZXJ0aWNhbCA/ICh0aGlzLl9ub2RlQXJyLmxlbmd0aCArIHRlbXBJbmRleCkgKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25vZGVBcnIubGVuZ3RoIC0gMSA9PT0gdGVtcEluZGV4ICYmIGluZGV4ICE9PSAyKSB7XG4gICAgICAgICAgaWYgKHhEaXN0ID09PSAwIHx8IHhEaXN0ID4gdGhpcy5fc3BhY2VXaWR0aCkge1xuICAgICAgICAgICAgdi5sZWZ0ID0gdGhpcy52ZXJ0aWNhbCA/IDAgOiAodGhpcy5fbm9kZUFyci5sZW5ndGggLSAxKSAqIHRoaXMuX3JhdGlvbldpZHRoO1xuICAgICAgICAgICAgdi50b3AgPSB0aGlzLnZlcnRpY2FsID8gKHRoaXMuX25vZGVBcnIubGVuZ3RoIC0gMSkgKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSB0aGlzLl9ub2RlQXJyLmxlbmd0aCAtIDEgJiYgdGVtcEluZGV4ID09PSAxICYmIHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgICAgICB2LmxlZnQgPSB0aGlzLnZlcnRpY2FsID8gMCA6ICh0aGlzLl9ub2RlQXJyLmxlbmd0aCArIHRlbXBJbmRleCkgKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICB2LnRvcCA9IHRoaXMudmVydGljYWwgPyB0ZW1wSW5kZXggKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuX25vZGVBcnIubGVuZ3RoIC0gMSAmJiB0ZW1wSW5kZXggPT09IDAgJiYgIXRoaXMuYXV0b3BsYXkpIHtcbiAgICAgICAgICB2LmxlZnQgPSB0aGlzLnZlcnRpY2FsID8gMCA6ICh0aGlzLl9ub2RlQXJyLmxlbmd0aCArIHRlbXBJbmRleCkgKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICB2LnRvcCA9IHRoaXMudmVydGljYWwgPyB0ZW1wSW5kZXggKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgdGhpcy5fbm9kZUFyci5mb3JFYWNoKCh2LCB0ZW1wSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMuX25vZGVBcnIubGVuZ3RoIC0gMSA9PT0gdGVtcEluZGV4KSB7XG4gICAgICAgICAgdi5sZWZ0ID0gdGhpcy52ZXJ0aWNhbCA/IDAgOiBkaXJlY3Rpb24gKiB0aGlzLl9yYXRpb25XaWR0aDtcbiAgICAgICAgICB2LnRvcCA9IHRoaXMudmVydGljYWwgPyBkaXJlY3Rpb24gKiB0aGlzLl9yYXRpb25XaWR0aCA6IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuX25vZGVBcnIubGVuZ3RoIC0gMiAmJiBpbmRleCArIDEgPT09IHRlbXBJbmRleCkge1xuICAgICAgICAgIHYubGVmdCA9IHRoaXMudmVydGljYWwgPyAwIDogZGlyZWN0aW9uICogdGhpcy5fcmF0aW9uV2lkdGg7XG4gICAgICAgICAgdi50b3AgPSB0aGlzLnZlcnRpY2FsID8gZGlyZWN0aW9uICogdGhpcy5fcmF0aW9uV2lkdGggOiAwO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAxICYmIDAgPT09IHRlbXBJbmRleCkge1xuICAgICAgICAgIHYubGVmdCA9IHRoaXMudmVydGljYWwgPyAwIDogZGlyZWN0aW9uICogdGhpcy5fcmF0aW9uV2lkdGggKiB0ZW1wSW5kZXg7XG4gICAgICAgICAgdi50b3AgPSB0aGlzLnZlcnRpY2FsID8gZGlyZWN0aW9uICogdGhpcy5fcmF0aW9uV2lkdGggOiAwO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMSkge1xuICAgICAgICAgIHYubGVmdCA9IHRoaXMudmVydGljYWwgPyAwIDogdGVtcEluZGV4ICogdGhpcy5fcmF0aW9uV2lkdGg7XG4gICAgICAgICAgdi50b3AgPSB0aGlzLnZlcnRpY2FsID8gdGVtcEluZGV4ICogdGhpcy5fcmF0aW9uV2lkdGggOiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRMaXN0U3R5bGVzKG9mZnNldDogbnVtYmVyID0gMCkge1xuICAgIGNvbnN0IHBvc2l0aW9uT2Zmc2V0ID1cbiAgICAgIG9mZnNldCArXG4gICAgICAodGhpcy52ZXJ0aWNhbFxuICAgICAgICA/ICh0aGlzLnNsaWRlSGVpZ2h0IC0gdGhpcy5fY3VycmVudFNsaWRlSGVpZ2h0KSAvIDJcbiAgICAgICAgOiAodGhpcy5fY3VycmVudFNsaWRlV2lkdGggLSB0aGlzLl9yYXRpb25XaWR0aCkgLyAyKSAtXG4gICAgICB0aGlzLmNlbGxTcGFjaW5nO1xuICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMuX2N1cnJlbnRTbGlkZUhlaWdodCArICdweCcsXG4gICAgICB3aWR0aDogdGhpcy5pdGVtcy5sZW5ndGggKiB0aGlzLl9yYXRpb25XaWR0aCArICdweCcsXG4gICAgICB0cmFuc2Zvcm06IHRoaXMudmVydGljYWxcbiAgICAgICAgPyBgdHJhbnNsYXRlM2QoMHB4LCAke3Bvc2l0aW9uT2Zmc2V0fXB4LCAwcHgpYFxuICAgICAgICA6IGB0cmFuc2xhdGUzZCgke3Bvc2l0aW9uT2Zmc2V0fXB4LCAwcHgsIDBweClgLFxuICAgICAgbWFyZ2luOiB0aGlzLnZlcnRpY2FsID8gYCR7KHRoaXMuY2VsbFNwYWNpbmcgLyAyKSAqIC0xfXB4IDBweGAgOiBgMHB4ICR7KHRoaXMuY2VsbFNwYWNpbmcgLyAyKSAqIC0xfXB4YFxuICAgIH07XG4gIH1cblxuICBzd2lwZURpcmVjdGlvbih4MSwgeDIsIHkxLCB5Mikge1xuICAgIGNvbnN0IHhEaXN0ID0geDEgLSB4MjtcbiAgICBjb25zdCB5RGlzdCA9IHkxIC0geTI7XG5cbiAgICBjb25zdCByID0gTWF0aC5hdGFuMih5RGlzdCwgeERpc3QpO1xuICAgIGxldCBzd2lwZUFuZ2xlID0gTWF0aC5yb3VuZCgociAqIDE4MCkgLyBNYXRoLlBJKTtcbiAgICBpZiAoc3dpcGVBbmdsZSA8IDApIHtcbiAgICAgIHN3aXBlQW5nbGUgPSAzNjAgLSBNYXRoLmFicyhzd2lwZUFuZ2xlKTtcbiAgICB9XG4gICAgaWYgKHN3aXBlQW5nbGUgPD0gNDUgJiYgc3dpcGVBbmdsZSA+PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICAgIHhEaXN0OiB4RGlzdFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHN3aXBlQW5nbGUgPD0gMzYwICYmIHN3aXBlQW5nbGUgPj0gMzE1KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICAgIHhEaXN0OiB4RGlzdFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHN3aXBlQW5nbGUgPj0gMTM1ICYmIHN3aXBlQW5nbGUgPD0gMjI1KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB4RGlzdDogeERpc3RcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnZlcnRpY2FsID09PSB0cnVlKSB7XG4gICAgICBpZiAoc3dpcGVBbmdsZSA+PSAzNSArIDMzICYmIHN3aXBlQW5nbGUgPD0gMTM1KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICAgIHhEaXN0OiB4RGlzdFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICAgIHhEaXN0OiB4RGlzdFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlyZWN0aW9uOiAwLFxuICAgICAgeERpc3Q6IHhEaXN0XG4gICAgfTtcbiAgfVxuXG4gIGdldCBwYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmRvdHMgPyB0aGlzLnNlbGVjdGVkSW5kZXggOiAwO1xuICB9XG5cbiAgZ2V0IHBhZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb3RzID8gdGhpcy5pdGVtcy5sZW5ndGggOiAwO1xuICB9XG5cbiAgZ2V0IGRvdGluZGljYXRvclN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy5kb3RzID8gKHRoaXMuaXRlbXMubGVuZ3RoID4gMSkgOiB0aGlzLmRvdHM7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy50b3VjaE9iamVjdCA9IHsgZGlyZWN0aW9uOiAxIH07XG4gICAgdGhpcy5fdHJhbnNpdGlvbiA9IGB0cmFuc2Zvcm0gJHt0aGlzLnNwZWVkIC8gMTAwMH1zYDtcbiAgICB0aGlzLml0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgIHRoaXMuY2Fyb3VzZWxJbml0KGl0ZW1zKTtcbiAgICB9KTtcbiAgICB0aGlzLmluaXRDYXJvdXNlbFNpemUoKTtcbiAgICB0aGlzLmdldExpc3RTdHlsZXMoKTtcbiAgICB0aGlzLmNhcm91c2VsSW5pdCh0aGlzLml0ZW1zKTtcbiAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5fZWxlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IG5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignY2Fyb3VzZWxzbGlkZScpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XG4gICAgY29uc3QgY2FsbGJhY2sgPSAobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgIGlmICh0aGlzLnNsaWRlSGVpZ2h0ICE9PSBuYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Nhcm91c2Vsc2xpZGUnKS5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VsU2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5nZXRMaXN0U3R5bGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRhcmdldE5vZGUsIGNvbmZpZyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnRG90SW5kaWNhdG9yLCBuem0tZG90LWluZGljYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3RpbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERvdEluZGljYXRvckNvbXBvbmVudCB7XG4gIGl0ZW1zOiB7IGFjdGl2ZTogYm9vbGVhbiB9W10gPSBbXTtcblxuICBwcml2YXRlIF9wYWdlID0gMDtcbiAgcHJpdmF0ZSBfcGFnZUNvdW50ID0gMDtcblxuICBASW5wdXQoKVxuICBzZXQgcGFnZShwOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gcDtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBhZ2VDb3VudChwOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlQ291bnQgPSBwIHx8IDA7XG4gICAgdGhpcy51cGRhdGVJdGVtcygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGRvdFN0eWxlOiBvYmplY3QgPSB7fTtcbiAgQElucHV0KClcbiAgZG90QWN0aXZlU3R5bGU6IG9iamVjdCA9IHt9O1xuICBASW5wdXQoKVxuICBkb3RDb2xvciA9ICd3aGl0ZSc7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kb3QtaW5kaWNhdG9yJylcbiAgZG90SW5kaWNhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcml2YXRlIHVwZGF0ZUl0ZW1zKCkge1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgQXJyYXkodGhpcy5fcGFnZUNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3BhZ2VDb3VudDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldID0geyBhY3RpdmU6IGkgPT0gdGhpcy5fcGFnZSB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWQoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoICE9IHRoaXMuX3BhZ2VDb3VudCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlSXRlbXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9wYWdlQ291bnQ7IGkrKykge1xuICAgICAgdGhpcy5pdGVtc1tpXS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1t0aGlzLl9wYWdlXS5hY3RpdmUgPSB0cnVlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENhcm91c2VsQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxTbGlkZUNvbXBvbmVudCB9IGZyb20gJy4vY2Fyb3VzZWwtc2xpZGUvY2Fyb3VzZWwtc2xpZGUuY29tcG9uZW50JztcbmltcG9ydCB7IERvdEluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJy4vZG90aW5kaWNhdG9yL2RvdGluZGljYXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbQ2Fyb3VzZWxDb21wb25lbnQsIENhcm91c2VsU2xpZGVDb21wb25lbnQsIERvdEluZGljYXRvckNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtDYXJvdXNlbENvbXBvbmVudCwgQ2Fyb3VzZWxTbGlkZUNvbXBvbmVudCwgRG90SW5kaWNhdG9yQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbE1vZHVsZSB7fVxuIiwiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VDc3NQaXhlbFZhbHVlLCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBGdW5jdGlvblByb3AgfSBmcm9tICcuLi90eXBlcy9jb21tb24td3JhcCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Jvb2xlYW4odmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQge1xuICByZXR1cm4gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIGZhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQ3NzUGl4ZWwodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb2VyY2VDc3NQaXhlbFZhbHVlKHZhbHVlKTtcbn1cblxuLy8gR2V0IHRoZSBmdW5jaXRvbi1wcm9wZXJ0eSB0eXBlJ3MgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZ1bmN0aW9uUHJvcDxUPihwcm9wOiBGdW5jdGlvblByb3A8VD4sIC4uLmFyZ3M6IGFueVtdKTogVCB7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6IG5vLWFueVxuICByZXR1cm4gdHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicgPyBwcm9wKC4uLmFyZ3MpIDogcHJvcDtcbn1cblxuLyoqXG4gKiBJbnB1dCBkZWNvcmF0b3IgdGhhdCBoYW5kbGUgYSBwcm9wIHRvIGRvIGdldC9zZXQgYXV0b21hdGljYWxseSB3aXRoIHRvQm9vbGVhblxuICpcbiAqIFdoeSBub3QgdXNpbmcgQElucHV0Qm9vbGVhbiBhbG9uZSB3aXRob3V0IEBJbnB1dD8gQU9UIG5lZWRzIEBJbnB1dCB0byBiZSB2aXNpYmxlXG4gKlxuICogQGhvd1RvVXNlXG4gKiBgYGBcbiAqIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gKlxuICogLy8gQWN0IGFzIGJlbG93OlxuICogLy8gQElucHV0KClcbiAqIC8vIGdldCB2aXNpYmxlKCkgeyByZXR1cm4gdGhpcy5fX3Zpc2liaWxlOyB9XG4gKiAvLyBzZXQgdmlzaWJsZSh2YWx1ZSkgeyB0aGlzLl9fdmlzaWJsZSA9IHZhbHVlOyB9XG4gKiAvLyBfX3Zpc2libGUgPSBmYWxzZTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gSW5wdXRCb29sZWFuKCk6IGFueSB7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tYW55XG4gIHJldHVybiBmdW5jdGlvbiBJbnB1dEJvb2xlYW5Qcm9wRGVjb3JhdG9yICh0YXJnZXQ6IG9iamVjdCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQWRkIG91ciBvd24gcHJpdmF0ZSBwcm9wXG4gICAgY29uc3QgcHJpdmF0ZVByb3BOYW1lID0gYCQkX18ke25hbWV9YDtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFRoZSBwcm9wIFwiJHtwcml2YXRlUHJvcE5hbWV9XCIgaXMgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBiZSBvdmVycmlkZWQgYnkgSW5wdXRCb29sZWFuIGRlY29yYXRvci5gKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICBnZXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzWyBwcml2YXRlUHJvcE5hbWUgXTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1pbnZhbGlkLXRoaXNcbiAgICAgIH0sXG4gICAgICBzZXQodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpc1sgcHJpdmF0ZVByb3BOYW1lIF0gPSB0b0Jvb2xlYW4odmFsdWUpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWludmFsaWQtdGhpc1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gLy8gRG8gcmVzdCB0aGluZ3MgZm9yIGlucHV0IGRlY29yYXRvclxuICAgIC8vIGNvbnN0IGlucHV0RGVjb3JhdG9yID0gSW5wdXQoKTtcbiAgICAvLyBpbnB1dERlY29yYXRvcih0YXJnZXQsIG5hbWUpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvQm9vbGVhbiB9IGZyb20gJy4uL2NvcmUvdXRpbC9jb252ZXJ0JztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBPbkNoYW5nZUV2ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjaGVja2VkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbQ2hlY2tib3hdLCBbbnptLWNoZWNrYm94XScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoZWNrYm94KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrYm94IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tY2hlY2tib3gnO1xuICBjbGFzc01hcDogb2JqZWN0ID0ge1xuICAgIFt0aGlzLnByZWZpeENsc106IHRydWUsXG4gICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jaGVja2VkYF06IHRoaXMuY2hlY2tlZCxcbiAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRpc2FibGVkYF06IHRoaXMuZGlzYWJsZWRcbiAgfTtcbiAgcHJpdmF0ZSBfY2hlY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9uZ01vZGVsT25DaGFuZ2U6IGFueSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbiAgcHJpdmF0ZSBfbmdNb2RlbE9uVG91Y2hlZDogYW55ID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIEBJbnB1dCgpXG4gIG5hbWU6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IHN0cmluZztcbiAgQElucHV0KClcbiAgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gIH1cbiAgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUNsYXNzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB0b0Jvb2xlYW4odmFsdWUpO1xuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T25DaGFuZ2VFdmVudD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWNoZWNrYm94LXdyYXBwZXInKVxuICBjaGVja0JveFdyYXBwZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSghdGhpcy5fY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHVwZGF0ZVZhbHVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fbmdNb2RlbE9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyBuYW1lOiB0aGlzLm5hbWUsIHZhbHVlOiB0aGlzLnZhbHVlLCBjaGVja2VkOiB2YWx1ZSB9KTtcbiAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAobnVsbCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBib29sZWFuKSA9PiB7fSk6IHZvaWQge1xuICAgIHRoaXMuX25nTW9kZWxPbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XG4gICAgdGhpcy5fbmdNb2RlbE9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVDbGFzc01hcCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDbGFzc01hcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbGFzc01hcCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsYXNzTWFwID0ge1xuICAgICAgW3RoaXMucHJlZml4Q2xzXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2hlY2tlZGBdOiB0aGlzLmNoZWNrZWQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRpc2FibGVkYF06IHRoaXMuZGlzYWJsZWRcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBPbkNoYW5nZUV2ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjaGVja2VkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdBZ3JlZUl0ZW0sIG56bS1hZ3JlZS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FncmVlLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFncmVlSXRlbSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLWNoZWNrYm94JztcblxuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tY2hlY2tib3gtYWdyZWUnKVxuICBjaGVja2JveEFncmVlOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgYWdyZWUoKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZShldmVudCkge1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25DaGFuZ2VFdmVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgY2hlY2tlZDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQ2hlY2tib3hJdGVtLCBuem0tY2hlY2tib3gtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC1pdGVtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveEl0ZW0ge1xuICBwcmVmaXhDbHMgPSAnYW0tY2hlY2tib3gnO1xuXG4gIEBJbnB1dCgpXG4gIG5hbWU6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IHN0cmluZztcbiAgQElucHV0KClcbiAgY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBvbkNoZWNrYm94Q2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJy4uL2xpc3QvbGlzdC5tb2R1bGUnO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICcuL2NoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZ3JlZUl0ZW0gfSBmcm9tICcuL2FncmVlLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94SXRlbSB9IGZyb20gJy4vY2hlY2tib3gtaXRlbS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTGlzdE1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW0NoZWNrYm94LCBDaGVja2JveEl0ZW0sIEFncmVlSXRlbV0sXG4gIGV4cG9ydHM6IFtDaGVja2JveCwgQ2hlY2tib3hJdGVtLCBBZ3JlZUl0ZW1dXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrYm94TW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9Cb29sZWFuIH0gZnJvbSAnLi4vY29yZS91dGlsL2NvbnZlcnQnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9uQ2hhbmdlRXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1tSYWRpb10sIFtuem0tcmFkaW9dJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW8pLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUmFkaW8gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1yYWRpbyc7XG4gIGNsYXNzTWFwOiBvYmplY3QgPSB7XG4gICAgW3RoaXMucHJlZml4Q2xzXTogdHJ1ZSxcbiAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWNoZWNrZWRgXTogdGhpcy5jaGVja2VkLFxuICAgIFtgJHt0aGlzLnByZWZpeENsc30tZGlzYWJsZWRgXTogdGhpcy5kaXNhYmxlZFxuICB9O1xuICBwcml2YXRlIF9jaGVja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX25nTW9kZWxPbkNoYW5nZTogYW55ID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuICBwcml2YXRlIF9uZ01vZGVsT25Ub3VjaGVkOiBhbnkgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICB2YWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuICBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NoZWNrZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tcmFkaW8td3JhcHBlcicpXG4gIHJhZGlvV3JhcHBlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrKGV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmICF0aGlzLl9jaGVja2VkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICB1cGRhdGVWYWx1ZShjaGVja1ZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fbmdNb2RlbE9uQ2hhbmdlKGNoZWNrVmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrVmFsdWVcbiAgICB9KTtcbiAgICB0aGlzLmNoZWNrZWQgPSBjaGVja1ZhbHVlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChudWxsICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGJvb2xlYW4pID0+IHt9KTogdm9pZCB7XG4gICAgdGhpcy5fbmdNb2RlbE9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4ge30pOiB2b2lkIHtcbiAgICB0aGlzLl9uZ01vZGVsT25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUNsYXNzTWFwKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNsYXNzTWFwKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsYXNzTWFwKCk6IHZvaWQge1xuICAgIHRoaXMuY2xhc3NNYXAgPSB7XG4gICAgICBbdGhpcy5wcmVmaXhDbHNdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jaGVja2VkYF06IHRoaXMuY2hlY2tlZCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZGlzYWJsZWRgXTogdGhpcy5kaXNhYmxlZFxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25DaGFuZ2VFdmVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgY2hlY2tlZDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnUmFkaW9JdGVtLCBuem0tcmFkaW8taXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1pdGVtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0l0ZW0ge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1yYWRpbyc7XG5cbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICB2YWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG9uUmFkaW9JdGVtQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgIGNoZWNrZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSYWRpbyB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RNb2R1bGUgfSBmcm9tICcuLi9saXN0L2xpc3QubW9kdWxlJztcbmltcG9ydCB7IFJhZGlvSXRlbSB9IGZyb20gJy4vcmFkaW8taXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIExpc3RNb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtSYWRpbywgUmFkaW9JdGVtXSxcbiAgZXhwb3J0czogW1JhZGlvLCBSYWRpb0l0ZW1dXG59KVxuZXhwb3J0IGNsYXNzIFJhZGlvTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmV4cG9ydCB0eXBlIFBvc2l0aW9uVHlwZSA9ICdub3JtYWwnIHwgJ2ZpeGVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnUHJvZ3Jlc3MsIG56bS1wcm9ncmVzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NDb21wb25lbnQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1wcm9ncmVzcyc7XG5cbiAgcHJpdmF0ZSBfcGVyY2VudDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZXhjZWVkYW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHVuZmlsbGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcG9zaXRpb246IFBvc2l0aW9uVHlwZSA9ICdmaXhlZCc7XG4gIEBJbnB1dCgpXG4gIGJhclN0eWxlOiBvYmplY3QgPSB7fTtcbiAgQElucHV0KClcbiAgZ2V0IHBlcmNlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVyY2VudDtcbiAgfVxuICBzZXQgcGVyY2VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVyY2VudCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSA+IDEwMCkge1xuICAgICAgdGhpcy5fZXhjZWVkYW5jZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4Y2VlZGFuY2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIubWF4JylcbiAgbWF4OiBudW1iZXIgPSAxMDA7XG4gIEBIb3N0QmluZGluZygnYXR0ci52YWx1ZScpXG4gIGdldCB2YWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBlcmNlbnQ7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1wcm9ncmVzcy1vdXRlcicpXG4gIG91dGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1wcm9ncmVzcy1maXhlZC1vdXRlcicpXG4gIGdldCBmaXhPdXRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ2ZpeGVkJyA9PT0gdGhpcy5wb3NpdGlvbjtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXByb2dyZXNzLWhpZGUtb3V0ZXInKVxuICBnZXQgaGlkZU91dGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51bmZpbGxlZCAmJiAhdGhpcy5fZXhjZWVkYW5jZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXByb2dyZXNzLWV4Y2VlZGFuY2UnKVxuICBnZXQgZXhjZWVkYW5jZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXhjZWVkYW5jZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUHJvZ3Jlc3NDb21wb25lbnQgfSBmcm9tICcuL3Byb2dyZXNzLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtQcm9ncmVzc0NvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtQcm9ncmVzc0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NNb2R1bGUge31cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFjY29yZGlvblNlcnZpY2Uge1xuICBjb21wb25lbnQ7XG4gIGFjY29yZGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBnZXRDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgdGhpcy5hY2NvcmRpb24gPSBjb21wb25lbnQuYWNjb3JkaW9uO1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBY2NvcmRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYWNjb3JkaW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdBY2NvcmRpb25QYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvcmRpb24tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2xpZGUnLCBbXG4gICAgICBzdGF0ZSgndXAnLCBzdHlsZSh7IGhlaWdodDogMCB9KSksXG4gICAgICBzdGF0ZSgnZG93bicsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignZG93biA9PiB1cCcsIFthbmltYXRlKDIwMCwgc3R5bGUoeyBoZWlnaHQ6IDAgfSkpXSksXG4gICAgICB0cmFuc2l0aW9uKCd1cCA9PiBkb3duJywgW1xuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgIDIwMCxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Hcm91cENvbXBvbmVudCB7XG4gIGlzU2hvd0NoaWxkOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGlzT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKVxuICBvbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1hY2NvcmRpb24taXRlbScpIHByaXZhdGUgX2FtSXRlbSA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tYWNjb3JkaW9uLWl0ZW0tYWN0aXZlJykgcHJpdmF0ZSBfaXNBY3RpdmUgPSB0aGlzLmlzT3BlbmVkO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFkZG9uJykgcHJpdmF0ZSBfYWRkb24gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjY29yZGlvblNlcnZpY2U6IEFjY29yZGlvblNlcnZpY2UsIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgY2hlY2tBbmRUb2dnbGUoKSB7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIGdldCBzbGlkZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzT3BlbmVkID8gJ2Rvd24nIDogJ3VwJztcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzU2hvd0NoaWxkID0gdHJ1ZTtcbiAgICBjb25zdCBpc09wZW5lZEJlZm9yZVdlQ2hhbmdlID0gdGhpcy5pc09wZW5lZDtcbiAgICBpZiAodGhpcy5fYWNjb3JkaW9uU2VydmljZS5hY2NvcmRpb24pIHtcbiAgICAgIHRoaXMuX2FjY29yZGlvblNlcnZpY2UuY29tcG9uZW50LmNsb3NlQWxsKCk7XG4gICAgfVxuICAgIHRoaXMuaXNPcGVuZWQgPSAhaXNPcGVuZWRCZWZvcmVXZUNoYW5nZTtcbiAgICBpZiAodGhpcy5pc09wZW5lZCkge1xuICAgICAgdGhpcy5vbk9wZW4uZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5pc09wZW5lZCk7XG4gIH1cblxuICBvcGVuT25Jbml0aWFsaXphdGlvbigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNPcGVuZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHNsaWRlQW5pbWF0aW9uRG9lbihldmVudCkge1xuICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09ICdkb3duJyAmJiBldmVudC50b1N0YXRlID09PSAndXAnKSB7XG4gICAgICB0aGlzLmlzU2hvd0NoaWxkID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBDb250ZW50Q2hpbGRyZW4sXG4gIENvbXBvbmVudCxcbiAgUXVlcnlMaXN0LFxuICBJbnB1dCxcbiAgZm9yd2FyZFJlZixcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25EZXN0cm95LFxuICBIb3N0TGlzdGVuZXIsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWNjb3JkaW9uU2VydmljZSB9IGZyb20gJy4vYWNjb3JkaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3JkaW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2FjY29yZGlvbi1ncm91cC9hY2NvcmRpb24tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvU3Vic2NyaXB0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQWNjb3JkaW9uLCBuem0tYWNjb3JkaW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY29yZGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FjY29yZGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBfb2xkR3JvdXBzOiBBY2NvcmRpb25Hcm91cENvbXBvbmVudFtdO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gQWNjb3JkaW9uR3JvdXBDb21wb25lbnQpKVxuICBncm91cHM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25Hcm91cENvbXBvbmVudD47XG5cbiAgQElucHV0KClcbiAgZXhwYW5kQWxsID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUtleTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZztcbiAgQElucHV0KClcbiAgZGVmYXVsdEFjdGl2ZUtleTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBvcGVuQW5pbWF0aW9uID0ge307XG4gIEBJbnB1dCgpXG4gIGFjY29yZGlvbiA9IGZhbHNlO1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWFjY29yZGlvbicpXG4gIGFtQWNjb3JkaW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrKGV2ZW50KSB7XG4gICAgbGV0IHJlc3VsdDogYW55ID0gW107XG4gICAgdGhpcy5ncm91cHMudG9BcnJheSgpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgaWYgKGdyb3VwLmlzT3BlbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmFjY29yZGlvbikge1xuICAgICAgICAgIHJlc3VsdCA9IGdyb3VwLmtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChncm91cC5rZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHJlc3VsdCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY2NvcmRpb25TZXJ2aWNlOiBBY2NvcmRpb25TZXJ2aWNlKSB7XG4gICAgdGhpcy5fYWNjb3JkaW9uU2VydmljZS5nZXRDb21wb25lbnQodGhpcyk7XG4gIH1cblxuICBjbG9zZUFsbCgpIHtcbiAgICB0aGlzLmdyb3Vwcy50b0FycmF5KCkuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBncm91cC5pc09wZW5lZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdCAoKSB7XG4gICAgaWYgKHRoaXMuZXhwYW5kQWxsICYmIHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX29sZEdyb3VwcyA9IHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgICAgIHRoaXMuX29sZEdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgZ3JvdXAub3Blbk9uSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5ncm91cHMuY2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBzID0gdGhpcy5ncm91cHMudG9BcnJheSgpLmZpbHRlcihncm91cCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29sZEdyb3Vwcy5pbmRleE9mKGdyb3VwKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBuZXdHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgZ3JvdXAub3Blbk9uSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29sZEdyb3VwcyA9IHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50QWN0aXZlS2V5ID0gW107XG4gICAgaWYgKHRoaXMuYWN0aXZlS2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hY3RpdmVLZXkubGVuZ3RoID4gMCAmJiAhdGhpcy5hY2NvcmRpb24gJiYgdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgY3VycmVudEFjdGl2ZUtleSA9IHRoaXMudG9BcnJheSh0aGlzLmFjdGl2ZUtleSk7XG4gICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgY3VycmVudEFjdGl2ZUtleS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSBwYXJzZUludChrZXksIDApKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgZ3JvdXAuaXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0QWN0aXZlS2V5ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuZXhwYW5kQWxsICYmICF0aGlzLmFjY29yZGlvbiAmJiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBwYXJzZUludCh0aGlzLmRlZmF1bHRBY3RpdmVLZXksIDApKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBncm91cC5pc09wZW5lZCA9IHRydWU7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvQXJyYXkoYWN0aXZlS2V5KSB7XG4gICAgbGV0IGN1cnJlbnRBY3RpdmVLZXkgPSBhY3RpdmVLZXk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRBY3RpdmVLZXkpKSB7XG4gICAgICBjdXJyZW50QWN0aXZlS2V5ID0gY3VycmVudEFjdGl2ZUtleSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRBY3RpdmVLZXkgIT09ICcnID8gW2N1cnJlbnRBY3RpdmVLZXldIDogW107XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50QWN0aXZlS2V5O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFjY29yZGlvbikge1xuICAgICAgdGhpcy5fYWNjb3JkaW9uU2VydmljZS5nZXRDb21wb25lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZXhwYW5kQWxsIHx8IGNoYW5nZXMuYWNjb3JkaW9uKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWNjb3JkaW9uQ29tcG9uZW50IH0gZnJvbSAnLi9hY2NvcmRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEFjY29yZGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9hY2NvcmRpb24tZ3JvdXAvYWNjb3JkaW9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaGl0ZVNwYWNlTW9kdWxlIH0gZnJvbSAnLi4vd2hpdGUtc3BhY2Uvd2hpdGUtc3BhY2UubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV2hpdGVTcGFjZU1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW0FjY29yZGlvbkNvbXBvbmVudCwgQWNjb3JkaW9uR3JvdXBDb21wb25lbnRdLFxuICBleHBvcnRzOiBbQWNjb3JkaW9uQ29tcG9uZW50LCBBY2NvcmRpb25Hcm91cENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJY29uSGFuZGxlciB9IGZyb20gJy4uL2NvcmUvdXRpbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnTm90aWNlQmFyLCBuem0tbm90aWNlLWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpY2UtYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbSWNvbkhhbmRsZXJdXG59KVxuZXhwb3J0IGNsYXNzIE5vdGljZUJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGFjdGlvbkRvbTogYW55O1xuXG4gIGlzU2hvdyA9IGZhbHNlO1xuICBpc1N0b3BTY3JvbGwgPSBmYWxzZTtcbiAgc3R5bGVEb206IGFueTtcbiAgcmF0ZTtcbiAgbWFycXVlZVNjcm9sbCA9ICdzY3JvbGxpbmcnO1xuICBzdHlsZSA9IHt9O1xuICBwcml2YXRlIF9tb2RlO1xuICBwcml2YXRlIF9pY29uO1xuICBwcml2YXRlIF9hY3Rpb247XG4gIHByaXZhdGUgX3RpbWVyID0gbnVsbDtcbiAgcHJpdmF0ZSBfd2lkdGg7XG5cbiAgQElucHV0KClcbiAgc2V0IHN0b3BTY3JvbGxpbmcodmFsdWUpIHtcbiAgICB0aGlzLmlzU3RvcFNjcm9sbCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5tYXJxdWVlU2Nyb2xsID0gJ3Njcm9sbGluZy1zdG9wJztcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubWFycXVlZVNjcm9sbCA9ICdzY3JvbGxpbmcnO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9tb2RlO1xuICB9XG4gIHNldCBtb2RlKHZhbHVlKSB7XG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpY29uKCkge1xuICAgIHJldHVybiB0aGlzLl9pY29uO1xuICB9XG4gIHNldCBpY29uKHZhbHVlKSB7XG4gICAgdGhpcy5faWNvbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBhY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbjtcbiAgfVxuICBzZXQgYWN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5fYWN0aW9uID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgbWFycXVlZVByb3BzID0geyBsb29wOiB0cnVlLCBsZWFkaW5nOiA1MDAsIHRyYWlsaW5nOiA4MDAwLCBmcHM6IDIwMCwgc3R5bGU6IHt9IH07XG4gIEBJbnB1dCgpXG4gIG5vdGljZUJhcmNvbnRlbnQgPSAnJztcbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ljb25IYW5kbGVyOiBJY29uSGFuZGxlcikge1xuICAgIHRoaXMuX2ljb25IYW5kbGVyLmxvYWQoKTtcbiAgfVxuXG4gIGNsaWNrKCkge1xuICAgIHRoaXMub25DbGljay5lbWl0KHRoaXMuX21vZGUpO1xuICAgIGlmICh0aGlzLl9tb2RlID09PSAnY2xvc2FibGUnKSB7XG4gICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGRhdGFQcm9jZXNzKCkge1xuICAgIHRoaXMuaXNTaG93ID0gdHJ1ZTtcbiAgICB0aGlzLnN0eWxlID0ge1xuICAgICAgd2lkdGg6ICcyMDAlJ1xuICAgIH07XG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgdGhpcy5fd2lkdGgpIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5tYXJxdWVlUHJvcHMubG9vcCA/ICdpbmZpbml0ZScgOiAxO1xuICAgICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6IHRoaXMuX3dpZHRoICogMiArICdweCcsXG4gICAgICAgICdhbmltYXRpb24tZGVsYXknOiBgJHt0aGlzLm1hcnF1ZWVQcm9wcy5sZWFkaW5nfW1zYCxcbiAgICAgICAgJ2FuaW1hdGlvbi1kdXJhdGlvbic6IGAkeygxIC8gdGhpcy5tYXJxdWVlUHJvcHMuZnBzKSAqIDEwMDB9c2AsXG4gICAgICAgICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JzogYCR7Y291bnR9YFxuICAgICAgfTtcblxuICAgICAgc2Nyb2xsLmNhbGwodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFycXVlZVNjcm9sbCA9ICdzY3JvbGxpbmctc3RvcCc7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICgpID0+IHtcbiAgICAgIHRoaXMubWFycXVlZVNjcm9sbCA9ICdzY3JvbGxpbmctc3RvcCc7XG4gICAgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICgpID0+IHtcbiAgICAgIHRoaXMubWFycXVlZVNjcm9sbCA9ICdzY3JvbGxpbmcnO1xuICAgIH0pO1xuICAgIHRoaXMuX3dpZHRoID0gZ2V0UmVjdFdpZHRoKHRoaXMubm90aWNlQmFyY29udGVudCk7XG4gICAgdGhpcy5kYXRhUHJvY2VzcygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbCgpIHtcbiAgbGV0IHN0eWxlRG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGljZV9iYXJfYW5pbWF0aW9uX2NscycpO1xuICBpZiAoc3R5bGVEb20pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc3R5bGVEb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZURvbS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ25vdGljZV9iYXJfYW5pbWF0aW9uX2NscycpO1xuICBzdHlsZURvbS5pbm5lckhUTUwgPSBgQC13ZWJraXQta2V5ZnJhbWVzIG5vdGljZWJhcm1hcnF1ZWV7IDAlIHsgbGVmdDogMHB4OyB9IDEwMCUgeyBsZWZ0OiAtJHt0aGlzLl93aWR0aH1weDsgfX1gO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHN0eWxlRG9tKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVjdFdpZHRoKHRleHQpIHtcbiAgY29uc3QgX2RvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBfZG9tLmlubmVySFRNTCA9IHRleHQ7XG4gIF9kb20uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBfZG9tLnN0eWxlLmxlZnQgPSAnLTk5OTknO1xuICBfZG9tLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgX2RvbS5zdHlsZS5mb250U2l6ZSA9ICcxNHB4JztcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfZG9tKTtcbiAgY29uc3QgX3cgPSBfZG9tLmNsaWVudFdpZHRoICsgMjA7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoX2RvbSk7XG4gIHJldHVybiBfdztcbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTm90aWNlQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9ub3RpY2UtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtJY29uTW9kdWxlLCBDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtOb3RpY2VCYXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbTm90aWNlQmFyQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXSxcbiAgZW50cnlDb21wb25lbnRzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBOb3RpY2VCYXJNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBUZW1wbGF0ZVJlZiwgSG9zdEJpbmRpbmcsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdUb2FzdCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiAnLi90b2FzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVG9hc3RDb21wb25lbnQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS10b2FzdCc7XG4gIGlzQ29udGVudFN0cmluZzogYm9vbGVhbiA9IHRydWU7XG4gIG1hc2tDbGFzc01hcDtcbiAgdHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1lbnRlciBhbS1mYWRlLWVudGVyLWFjdGl2ZSc7XG5cbiAgcHJpdmF0ZSBfaWNvblR5cGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9jb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyc7XG5cbiAgQElucHV0KClcbiAgbWFzazogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGdldCBjb250ZW50KCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICB9XG4gIHNldCBjb250ZW50KHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuaXNDb250ZW50U3RyaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNDb250ZW50U3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGVudCA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpY29uVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pY29uVHlwZTtcbiAgfVxuICBzZXQgaWNvblR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2ljb25UeXBlID0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRvYXN0JylcbiAgYW1Ub2FzdDogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdG9hc3QtbWFzaycpXG4gIGdldCBhbVRvYXN0TWFzaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYXNrO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdG9hc3Qtbm9tYXNrJylcbiAgZ2V0IGFtVG9hc3ROb01hc2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLm1hc2s7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF96b25lOiBOZ1pvbmUpIHt9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRvYXN0Q29tcG9uZW50IH0gZnJvbSAnLi90b2FzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuaW1wb3J0IHsgV2luZ0JsYW5rTW9kdWxlIH0gZnJvbSAnLi4vd2luZy1ibGFuay93aW5nLWJsYW5rLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEljb25Nb2R1bGUsIFdpbmdCbGFua01vZHVsZV0sXG4gIGV4cG9ydHM6IFtUb2FzdENvbXBvbmVudF0sXG4gIGRlY2xhcmF0aW9uczogW1RvYXN0Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBUb2FzdE1vZHVsZSB7fVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIEJhc2VPcHRpb25zIHtcbiAgdmlzaWJsZT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9jdXM/OiBib29sZWFuID0gdHJ1ZTtcbiAgY2xvc2FibGU/OiBib29sZWFuID0gZmFsc2U7XG4gIG1hc2tDbG9zYWJsZT86IGJvb2xlYW4gPSB0cnVlO1xuICBvbkNsb3NlPzogYW55O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcG9wdXA/OiBib29sZWFuID0gZmFsc2U7XG4gIGFuaW1hdGlvblR5cGU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgZm9vdGVyPzogQXJyYXk8YW55PjtcbiAgcGxhdGZvcm0/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgd3JhcENsYXNzTmFtZT86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIGFjdGlvbnM/OiBBcnJheTxhbnk+O1xuICBjYWxsYmFja09yQWN0aW9ucz86IEFycmF5PGFueT47XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgcGxhY2Vob2xkZXJzPzogQXJyYXk8YW55PjtcbiAgb3BlcmF0aW9uPzogYm9vbGVhbjtcbiAgdHJhbnNpdGlvbk5hbWU/OiBzdHJpbmcgPSAnYW0tem9vbSc7XG4gIG1hc2tUcmFuc2l0aW9uTmFtZT86IHN0cmluZyA9ICdhbS1mYWRlJztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RhbE9wdGlvbnMgZXh0ZW5kcyBCYXNlT3B0aW9ucyB7fVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxlcnRPcHRpb25zIGV4dGVuZHMgQmFzZU9wdGlvbnMge1xuICAvKipcbiAgICogXHTDpsKPwpDDp8KkwrrDpMK/wqHDpsKBwq9cbiAgICovXG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiDDpsKMwonDqcKSwq7Dp8K7woQsIFt7dGV4dCwgb25QcmVzcywgc3R5bGV9XVxuICAgKi9cbiAgYWN0aW9ucz86IEFycmF5PGFueT47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQcm9tcHRPcHRpb25zIGV4dGVuZHMgQmFzZU9wdGlvbnMge1xuICAvKipcbiAgICogXHTDpsKPwpDDp8KkwrrDpMK/wqHDpsKBwq9cbiAgICovXG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiDDpsKMwonDqcKSwq7Dp8K7woQgW3t0ZXh0LCBvblByZXNzfV1cbiAgICogw6bCiMKWw6XCm8Kew6jCsMKDw6XCh8K9w6bClcKwIEFycmF5IG9yIEZ1bmN0aW9uXG4gICAqL1xuICBjYWxsYmFja09yQWN0aW9ucz86IEFycmF5PGFueT47XG5cbiAgLyoqXG4gICAqIHByb21wdCDDp8KawoTDpsKgwrfDpcK8wo9cbiAgICogU3RyaW5nIChkZWZhdWx0LCBzZWN1cmUtdGV4dCwgbG9naW4tcGFzc3dvcmQpXG4gICAqL1xuICB0eXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiDDqcK7wpjDqMKuwqTDpcKAwrwoaW5wdXQgw6TCuMK6IHBhc3N3b3JkIMOnwrHCu8Olwp7Ci8OkwrjCjcOmwpTCr8OmwozCgSlcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogWycnLCAnJ11cbiAgICovXG4gIHBsYWNlaG9sZGVycz86IEFycmF5PGFueT47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25PcHRpb25zIGV4dGVuZHMgQmFzZU9wdGlvbnMge1xuICAvKipcbiAgICogw6bCjMKJw6nCksKuw6fCu8KELCBbe3RleHQsIG9uUHJlc3MsIHN0eWxlfV1cbiAgICovXG4gIGFjdGlvbnM/OiBBcnJheTxhbnk+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aW9uIHtcbiAgdGV4dD86IHN0cmluZztcbiAgb25QcmVzcz86IEZ1bmN0aW9uO1xuICBzdHlsZT86IHt9O1xufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSAnLi9tb2RhbC1vcHRpb25zLnByb3ZpZGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnTW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBNb2RhbE9wdGlvbnNdXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIHByZWZpeENsczogJ2FtLW1vZGFsJyxcbiAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgcG9wdXA6IGZhbHNlLFxuICAgIGFuaW1hdGlvblR5cGU6ICdzbGlkZS1kb3duJyxcbiAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICBzdHlsZToge30sXG4gICAgZm9vdGVyOiBbXSxcbiAgICBjbG9zYWJsZTogZmFsc2UsXG4gICAgbWFza0Nsb3NhYmxlOiBmYWxzZSxcbiAgICBvcGVyYXRpb246IGZhbHNlLFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIHdyYXBDbGFzc05hbWU6ICcnLFxuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGFjdGlvbnM6IFtdLFxuICAgIGNhbGxiYWNrT3JBY3Rpb25zOiBbXSxcbiAgICB0eXBlOiAnJyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgIHBsYWNlaG9sZGVyczogW11cbiAgfTtcbiAgdmFsdWU6IHN0cmluZyA9ICcnO1xuICBwYXNzd29yZFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgYXV0b0ZvY3VzID0geyBmb2N1czogdHJ1ZSwgZGF0ZTogbmV3IERhdGUoKSB9O1xuICB0cmFuc2l0aW9uTmFtZTogc3RyaW5nID0gJyc7XG4gIG1hc2tUcmFuc2l0aW9uTmFtZTogc3RyaW5nID0gJyc7XG4gIGlzVGl0bGVTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBpc01lc3NhZ2VTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICB3cmFwQ2xzID0ge307XG4gIGNscyA9IHt9O1xuICBidG5Hcm91cENsYXNzID0ge307XG4gIGRhdGEgPSB7fTtcblxuICBwcml2YXRlIF90aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcnO1xuICBwcml2YXRlIF9tZXNzYWdlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyc7XG4gIHByaXZhdGUgX2ZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICBpbnB1dEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgfVxuICBzZXQgdGl0bGUodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5pc1RpdGxlU3RyaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNUaXRsZVN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHZpc2libGUodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmxlYXZlQW5pbWF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByb3BzLnZpc2libGUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRlZCkge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMudHJhbnNwYXJlbnQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID0gdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1lbnRlciBhbS1mYWRlLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9IHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLXNsaWRlLXVwLWVudGVyIGFtLXNsaWRlLXVwLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFByb3BzLnBvcHVwKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRpb25UeXBlID09PSAnc2xpZGUtdXAnXG4gICAgICAgICAgICAgID8gJ2FtLXNsaWRlLXVwLWVudGVyIGFtLXNsaWRlLXVwLWVudGVyLWFjdGl2ZSdcbiAgICAgICAgICAgICAgOiAnYW0tc2xpZGUtZG93bi1lbnRlciBhbS1zbGlkZS1kb3duLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgICAgdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1lbnRlciBhbS1mYWRlLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNsb3NhYmxlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuY2xvc2FibGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWFza0Nsb3NhYmxlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMubWFza0Nsb3NhYmxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBvcHVwKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucG9wdXAgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGFuaW1hdGlvblR5cGUodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRpb25UeXBlID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB0cmFuc3BhcmVudCh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnRyYW5zcGFyZW50ID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb290ZXIodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5mb290ZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGxhdGZvcm0odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5wbGF0Zm9ybSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWVzc2FnZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgfVxuICBzZXQgbWVzc2FnZSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmlzTWVzc2FnZVN0cmluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTWVzc2FnZVN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB3cmFwQ2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMud3JhcENsYXNzTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYWN0aW9ucyh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmZvb3RlciA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuZGVmYXVsdFZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHR5cGUodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy50eXBlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBsYWNlaG9sZGVycyh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnBsYWNlaG9sZGVycyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvcGVyYXRpb24odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5vcGVyYXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZvY3VzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KClcbiAgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfb3B0aW9uOiBNb2RhbE9wdGlvbnMpIHt9XG5cbiAgc2V0Q2xhc3NNYXAoKSB7XG4gICAgdGhpcy53cmFwQ2xzID0ge1xuICAgICAgW3RoaXMuZGVmYXVsdFByb3BzLndyYXBDbGFzc05hbWVdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30td3JhcC1wb3B1cGBdOiB0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cFxuICAgIH07XG5cbiAgICB0aGlzLmNscyA9IHtcbiAgICAgIFt0aGlzLmRlZmF1bHRQcm9wcy5jbGFzc05hbWVdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tdHJhbnNwYXJlbnRgXTogdGhpcy5kZWZhdWx0UHJvcHMudHJhbnNwYXJlbnQsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1wb3B1cGBdOiB0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cCxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXBvcHVwLSR7dGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZX1gXTpcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMucG9wdXAgJiYgdGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFuZHJvaWRgXTogdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPT09ICdhbmRyb2lkJ1xuICAgIH07XG5cbiAgICB0aGlzLmJ0bkdyb3VwQ2xhc3MgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1idXR0b24tZ3JvdXAtJHtcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMuZm9vdGVyLmxlbmd0aCA9PT0gMiAmJiAhdGhpcy5kZWZhdWx0UHJvcHMub3BlcmF0aW9uID8gJ2gnIDogJ3YnXG4gICAgICB9YF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1idXR0b24tZ3JvdXAtJHt0aGlzLmRlZmF1bHRQcm9wcy5vcGVyYXRpb24gPyAnb3BlcmF0aW9uJyA6ICdub3JtYWwnfWBdOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIGlucHV0Q2hhbmdlKHR5cGUsIHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsdWU7XG4gIH1cblxuICBsZWF2ZUFuaW1hdGlvbigpIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0ZWQpIHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy50cmFuc3BhcmVudCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID0gdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1sZWF2ZSBhbS1mYWRlLWxlYXZlLWFjdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID0gdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tc2xpZGUtdXAtbGVhdmUgYW0tc2xpZGUtdXAtbGVhdmUtYWN0aXZlJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID1cbiAgICAgICAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRpb25UeXBlID09PSAnc2xpZGUtdXAnXG4gICAgICAgICAgICA/ICdhbS1zbGlkZS11cC1sZWF2ZSBhbS1zbGlkZS11cC1sZWF2ZS1hY3RpdmUnXG4gICAgICAgICAgICA6ICdhbS1zbGlkZS1kb3duLWxlYXZlIGFtLXNsaWRlLWRvd24tbGVhdmUtYWN0aXZlJztcbiAgICAgICAgdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1sZWF2ZSBhbS1mYWRlLWxlYXZlLWFjdGl2ZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kZWZhdWx0UHJvcHMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAoKCF0aGlzLmRlZmF1bHRQcm9wcy5jbG9zYWJsZSB8fCAhdGhpcy5kZWZhdWx0UHJvcHMubWFza0Nsb3NhYmxlKSAmJiAhdGhpcy5kZWZhdWx0UHJvcHMucG9wdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29wdGlvbi5jbG9zZSkge1xuICAgICAgdGhpcy5fb3B0aW9uLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVhdmVBbmltYXRpb24oKTtcbiAgICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJy4uL2xpc3QvbGlzdC5tb2R1bGUnO1xuaW1wb3J0IHsgV2luZ0JsYW5rTW9kdWxlIH0gZnJvbSAnLi4vd2luZy1ibGFuay93aW5nLWJsYW5rLm1vZHVsZSc7XG5pbXBvcnQgeyBXaGl0ZVNwYWNlTW9kdWxlIH0gZnJvbSAnLi4vd2hpdGUtc3BhY2Uvd2hpdGUtc3BhY2UubW9kdWxlJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24ubW9kdWxlJztcbmltcG9ydCB7IElucHV0SXRlbU1vZHVsZSB9IGZyb20gJy4uL2lucHV0LWl0ZW0vaW5wdXQtaXRlbS5tb2R1bGUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIExpc3RNb2R1bGUsIFdpbmdCbGFua01vZHVsZSwgV2hpdGVTcGFjZU1vZHVsZSwgQnV0dG9uTW9kdWxlLCBJbnB1dEl0ZW1Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgZXhwb3J0czogW01vZGFsQ29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbTW9kYWxDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlXVxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbE1vZHVsZSB7fVxuIiwiZXhwb3J0IGludGVyZmFjZSBQb3BvdmVyT3B0aW9uc0ludGVyZmFjZSB7XG4gIG1hc2s/OiBib29sZWFuO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgcGxhY2VtZW50Pzogc3RyaW5nO1xuICBhcHBlbmRUb0JvZHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wb3Zlck9wdGlvbnMgaW1wbGVtZW50cyBQb3BvdmVyT3B0aW9uc0ludGVyZmFjZSB7XG4gIHNob3dBcnJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBtYXNrOiBib29sZWFuID0gZmFsc2U7XG4gIHBsYWNlbWVudDogc3RyaW5nID0gJ2JvdHRvbSc7XG4gIGFwcGVuZFRvQm9keTogYm9vbGVhbiA9IGZhbHNlO1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb25zIH0gZnJvbSAnLi9wb3BvdmVyLW9wdGlvbnMucHJvdmlkZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudE9wdGlvbnMgZXh0ZW5kcyBQb3BvdmVyT3B0aW9ucyB7XG4gIG9uQWZ0ZXJWaWV3SW5pdDogKCkgPT4gdm9pZDtcbiAgaGlkZVBvcG92ZXI6ICgpID0+IHZvaWQ7XG4gIG92ZXJsYXk6IFRlbXBsYXRlUmVmPGFueT47XG59IiwiaW1wb3J0IHsgQ29tcG9uZW50LCBBZnRlclZpZXdJbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnRPcHRpb25zIH0gZnJvbSAnLi9wb3BvdmVyLWNvbXBvbmVudC1vcHRpb25zLnByb3ZpZGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnUG9wb3ZlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgZGVmYXVsdFByb3BzOiBhbnkgPSB7XG4gICAgcHJlZml4Q2xzOiAnYW0tcG9wb3ZlcidcbiAgfTtcbiAgbWFza0NsczogYW55ID0ge307XG4gIHBvcG92ZXJDbHM6IGFueSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBQb3BvdmVyQ29tcG9uZW50T3B0aW9ucykge31cblxuICBzZXRDbGFzc01hcCgpIHtcbiAgICB0aGlzLm1hc2tDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1tYXNrYF06IHRoaXMub3B0aW9ucy5tYXNrLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tbWFzay1oaWRkZW5gXTogIXRoaXMub3B0aW9ucy5tYXNrXG4gICAgfTtcbiAgICB0aGlzLnBvcG92ZXJDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tcGxhY2VtZW50LSR7dGhpcy5vcHRpb25zLnBsYWNlbWVudH1gXTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucy5vbkFmdGVyVmlld0luaXQoKTtcbiAgfVxufVxuIiwiXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsU3R5bGVzIChlbGVtZW50KSB7IHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTsgfVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlKGVsZW1lbnQsIHByb3ApIHsgcmV0dXJuIGdldEFsbFN0eWxlcyhlbGVtZW50KVtwcm9wXTsgfVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZCAoZWxlbWVudCkge1xuICByZXR1cm4gKGdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpIHx8ICdzdGF0aWMnKSA9PT0gJ3N0YXRpYyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBsZXQgb2Zmc2V0UGFyZW50RWwgPSBlbGVtZW50Lm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnRFbCAmJiBvZmZzZXRQYXJlbnRFbCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnRFbCkpIHtcbiAgICBvZmZzZXRQYXJlbnRFbCA9IG9mZnNldFBhcmVudEVsLm9mZnNldFBhcmVudDtcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50RWwgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0KGVsZW1lbnQsIHJvdW5kKSB7XG4gIGlmIChyb3VuZCA9PT0gdm9pZCAwKSB7IHJvdW5kID0gdHJ1ZTsgfVxuICBsZXQgZWxCY3IgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgdmlld3BvcnRPZmZzZXQgPSB7XG4gICAgdG9wOiB3aW5kb3cucGFnZVlPZmZzZXQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50VG9wLFxuICAgIGxlZnQ6IHdpbmRvdy5wYWdlWE9mZnNldCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRMZWZ0XG4gIH07XG4gIGxldCBlbE9mZnNldCA9IHtcbiAgICBoZWlnaHQ6IGVsQmNyLmhlaWdodCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICB3aWR0aDogZWxCY3Iud2lkdGggfHwgZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB0b3A6IGVsQmNyLnRvcCArIHZpZXdwb3J0T2Zmc2V0LnRvcCxcbiAgICBib3R0b206IGVsQmNyLmJvdHRvbSArIHZpZXdwb3J0T2Zmc2V0LnRvcCxcbiAgICBsZWZ0OiBlbEJjci5sZWZ0ICsgdmlld3BvcnRPZmZzZXQubGVmdCxcbiAgICByaWdodDogZWxCY3IucmlnaHQgKyB2aWV3cG9ydE9mZnNldC5sZWZ0XG4gIH07XG4gIGlmIChyb3VuZCkge1xuICAgIGVsT2Zmc2V0LmhlaWdodCA9IE1hdGgucm91bmQoZWxPZmZzZXQuaGVpZ2h0KTtcbiAgICBlbE9mZnNldC53aWR0aCA9IE1hdGgucm91bmQoZWxPZmZzZXQud2lkdGgpO1xuICAgIGVsT2Zmc2V0LnRvcCA9IE1hdGgucm91bmQoZWxPZmZzZXQudG9wKTtcbiAgICBlbE9mZnNldC5ib3R0b20gPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LmJvdHRvbSk7XG4gICAgZWxPZmZzZXQubGVmdCA9IE1hdGgucm91bmQoZWxPZmZzZXQubGVmdCk7XG4gICAgZWxPZmZzZXQucmlnaHQgPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LnJpZ2h0KTtcbiAgfVxuICByZXR1cm4gZWxPZmZzZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3NpdGlvbihlbGVtZW50LCByb3VuZCkge1xuICBpZiAocm91bmQgPT09IHZvaWQgMCkgeyByb3VuZCA9IHRydWU7IH1cbiAgbGV0IGVsUG9zaXRpb247XG4gIGxldCBwYXJlbnRPZmZzZXQgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwLCByaWdodDogMCB9O1xuICBpZiAoZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICBlbFBvc2l0aW9uID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgb2Zmc2V0UGFyZW50RWwgPSBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgZWxQb3NpdGlvbiA9IGdldE9mZnNldChlbGVtZW50LCBmYWxzZSk7XG4gICAgaWYgKG9mZnNldFBhcmVudEVsICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHBhcmVudE9mZnNldCA9IGdldE9mZnNldChvZmZzZXRQYXJlbnRFbCwgZmFsc2UpO1xuICAgIH1cbiAgICBwYXJlbnRPZmZzZXQudG9wICs9IG9mZnNldFBhcmVudEVsLmNsaWVudFRvcDtcbiAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBvZmZzZXRQYXJlbnRFbC5jbGllbnRMZWZ0O1xuICB9XG4gIGVsUG9zaXRpb24udG9wIC09IHBhcmVudE9mZnNldC50b3A7XG4gIGVsUG9zaXRpb24uYm90dG9tIC09IHBhcmVudE9mZnNldC50b3A7XG4gIGVsUG9zaXRpb24ubGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgZWxQb3NpdGlvbi5yaWdodCAtPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgaWYgKHJvdW5kKSB7XG4gICAgZWxQb3NpdGlvbi50b3AgPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24udG9wKTtcbiAgICBlbFBvc2l0aW9uLmJvdHRvbSA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi5ib3R0b20pO1xuICAgIGVsUG9zaXRpb24ubGVmdCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi5sZWZ0KTtcbiAgICBlbFBvc2l0aW9uLnJpZ2h0ID0gTWF0aC5yb3VuZChlbFBvc2l0aW9uLnJpZ2h0KTtcbiAgfVxuICByZXR1cm4gZWxQb3NpdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIHBsYWNlbWVudCwgYXBwZW5kVG9Cb2R5KSB7XG4gIGxldCBob3N0RWxQb3NpdGlvbiA9IGFwcGVuZFRvQm9keSA/IGdldE9mZnNldChob3N0RWxlbWVudCwgZmFsc2UpIDogZ2V0UG9zaXRpb24oaG9zdEVsZW1lbnQsIGZhbHNlKTtcbiAgbGV0IHRhcmdldEVsU3R5bGVzID0gZ2V0QWxsU3R5bGVzKHRhcmdldEVsZW1lbnQpO1xuICBsZXQgdGFyZ2V0RWxCQ1IgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgcGxhY2VtZW50UHJpbWFyeSA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdIHx8ICd0b3AnO1xuICBsZXQgcGxhY2VtZW50U2Vjb25kYXJ5ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV0gfHwgJ2NlbnRlcic7XG4gIGxldCB0YXJnZXRFbFBvc2l0aW9uID0ge1xuICAgICdoZWlnaHQnOiB0YXJnZXRFbEJDUi5oZWlnaHQgfHwgdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgJ3dpZHRoJzogdGFyZ2V0RWxCQ1Iud2lkdGggfHwgdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAndG9wJzogMCxcbiAgICAnYm90dG9tJzogdGFyZ2V0RWxCQ1IuaGVpZ2h0IHx8IHRhcmdldEVsZW1lbnQub2Zmc2V0SGVpZ2h0LFxuICAgICdsZWZ0JzogMCxcbiAgICAncmlnaHQnOiB0YXJnZXRFbEJDUi53aWR0aCB8fCB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoXG4gIH07XG4gIHN3aXRjaCAocGxhY2VtZW50UHJpbWFyeSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICB0YXJnZXRFbFBvc2l0aW9uLnRvcCA9XG4gICAgICAgIGhvc3RFbFBvc2l0aW9uLnRvcCAtICh0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCArIHBhcnNlRmxvYXQodGFyZ2V0RWxTdHlsZXMubWFyZ2luQm90dG9tKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPSBob3N0RWxQb3NpdGlvbi50b3AgKyBob3N0RWxQb3NpdGlvbi5oZWlnaHQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9XG4gICAgICAgIGhvc3RFbFBvc2l0aW9uLmxlZnQgLSAodGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQodGFyZ2V0RWxTdHlsZXMubWFyZ2luUmlnaHQpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9IGhvc3RFbFBvc2l0aW9uLmxlZnQgKyBob3N0RWxQb3NpdGlvbi53aWR0aDtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN3aXRjaCAocGxhY2VtZW50U2Vjb25kYXJ5KSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wID0gaG9zdEVsUG9zaXRpb24udG9wO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wID0gaG9zdEVsUG9zaXRpb24udG9wICsgaG9zdEVsUG9zaXRpb24uaGVpZ2h0IC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9IGhvc3RFbFBvc2l0aW9uLmxlZnQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLSB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGlmIChwbGFjZW1lbnRQcmltYXJ5ID09PSAndG9wJyB8fCBwbGFjZW1lbnRQcmltYXJ5ID09PSAnYm90dG9tJykge1xuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLyAyIC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLnRvcCA9IGhvc3RFbFBvc2l0aW9uLnRvcCArIGhvc3RFbFBvc2l0aW9uLmhlaWdodCAvIDIgLSB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICB0YXJnZXRFbFBvc2l0aW9uLnRvcCA9IE1hdGgucm91bmQodGFyZ2V0RWxQb3NpdGlvbi50b3ApO1xuICB0YXJnZXRFbFBvc2l0aW9uLmJvdHRvbSA9IE1hdGgucm91bmQodGFyZ2V0RWxQb3NpdGlvbi5ib3R0b20pO1xuICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBNYXRoLnJvdW5kKHRhcmdldEVsUG9zaXRpb24ubGVmdCk7XG4gIHRhcmdldEVsUG9zaXRpb24ucmlnaHQgPSBNYXRoLnJvdW5kKHRhcmdldEVsUG9zaXRpb24ucmlnaHQpO1xuICByZXR1cm4gdGFyZ2V0RWxQb3NpdGlvbjtcbn0iLCJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBJbmplY3RvcixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuL3BvcG92ZXItb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gJy4vcG9wb3Zlci1jb21wb25lbnQtb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgKiBhcyBQb3NpdGlvbmluZyBmcm9tICcuLi9jb3JlL3V0aWwvcG9zaXRpb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbUG9wb3Zlcl0sIFtuem0tcG9wb3Zlcl0nLFxuICBwcm92aWRlcnM6IFtQb3BvdmVyT3B0aW9uc11cbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcG9wb3ZlcjogQ29tcG9uZW50UmVmPFBvcG92ZXJDb21wb25lbnQ+O1xuXG4gIHByaXZhdGUgX2V2ZW50TGlzdGVuZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIG1hc2s6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHNob3dBcnJvdzogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcGxhY2VtZW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIG92ZXJsYXk6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBPdXRwdXQoKVxuICBvblZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIEBPdXRwdXQoKVxuICBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpXG4gIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHRvZ2dsZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXIpIHtcbiAgICAgIHRoaXMuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfZWxtOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX2RlZmF1bHRPcHRpb25zOiBQb3BvdmVyT3B0aW9ucyxcbiAgICBwcml2YXRlIF9jZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge31cblxuICBwb3NpdGlvbk1hcChwbGFjZW1lbnQpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgICBjYXNlICd0b3BMZWZ0JzpcbiAgICAgICAgcmV0dXJuICd0b3AtbGVmdCc7XG4gICAgICBjYXNlICd0b3BSaWdodCc6XG4gICAgICAgIHJldHVybiAndG9wLXJpZ2h0JztcbiAgICAgIGNhc2UgJ2JvdHRvbUxlZnQnOlxuICAgICAgICByZXR1cm4gJ2JvdHRvbS1sZWZ0JztcbiAgICAgIGNhc2UgJ2JvdHRvbVJpZ2h0JzpcbiAgICAgICAgcmV0dXJuICdib3R0b20tcmlnaHQnO1xuICAgICAgY2FzZSAnbGVmdFRvcCc6XG4gICAgICAgIHJldHVybiAnbGVmdC10b3AnO1xuICAgICAgY2FzZSAnbGVmdEJvdHRvbSc6XG4gICAgICAgIHJldHVybiAnbGVmdC1ib3R0b20nO1xuICAgICAgY2FzZSAncmlnaHRUb3AnOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0LXRvcCc7XG4gICAgICBjYXNlICdyaWdodEJvdHRvbSc6XG4gICAgICAgIHJldHVybiAncmlnaHQtYm90dG9tJztcbiAgICAgIGNhc2UgJ2Z1bGxTY3JlZW4nOlxuICAgICAgY2FzZSAnbGFuZFNjYXBlJzpcbiAgICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wb3BvdmVyICYmXG4gICAgICAhdGhpcy5fZWxtLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMucG9wb3Zlci5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogRXZlbnQpID0+IHRoaXMub25Eb2N1bWVudENsaWNrKGV2ZW50KSksXG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICd0b3VjaGVuZCcsIChldmVudDogRXZlbnQpID0+IHRoaXMub25Eb2N1bWVudENsaWNrKGV2ZW50KSksXG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4gdGhpcy5wb3NpdGlvblBvcG92ZXIoKSlcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0gbmV3IFBvcG92ZXJDb21wb25lbnRPcHRpb25zKCk7XG4gICAgICBvcHRpb25zLnBsYWNlbWVudCA9IHRoaXMucGxhY2VtZW50O1xuICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCB0aGlzLl9kZWZhdWx0T3B0aW9ucywge1xuICAgICAgICBoaWRlUG9wb3ZlcjogKGV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICB9LFxuICAgICAgICBvbkFmdGVyVmlld0luaXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpO1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYW0tcG9wb3Zlci1pbm5lci13cmFwcGVyJylbMF0uY2hpbGRyZW47XG4gICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIMOpwqbClsOlwoXCiMOmwojCkcOkwrvCrMOmwqPCgMOmwp/CpcOlwq7Cg8OmwpjCr8OlwpDCpsOlwozChcOlwpDCq8Olwq3CkMOoworCgsOnwoLCuVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjaGlsZHJlbltpXS5pZCA9IGAke2l9YDtcbiAgICAgICAgICAgICAgY2hpbGRyZW5baV0uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAnY2xpY2snLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChjaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJhbXM6IEFycmF5PGtleW9mIFBvcG92ZXJEaXJlY3RpdmU+ID0gW1xuICAgICAgICAnbWFzaycsXG4gICAgICAgICdzaG93QXJyb3cnLFxuICAgICAgICAncGxhY2VtZW50JyxcbiAgICAgICAgJ2FwcGVuZFRvQm9keScsXG4gICAgICAgICdvdmVybGF5J1xuICAgICAgXTtcbiAgICAgIG9wdGlvbmFsUGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXNbcGFyYW1dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIChvcHRpb25zIGFzIGFueSlbcGFyYW1dID0gdGhpc1twYXJhbV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PFBvcG92ZXJDb21wb25lbnQ+ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBvcG92ZXJDb21wb25lbnQpO1xuICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFBvcG92ZXJDb21wb25lbnRPcHRpb25zLFxuICAgICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYucGFyZW50SW5qZWN0b3JcbiAgICAgICk7XG4gICAgICB0aGlzLnBvcG92ZXIgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGgsXG4gICAgICAgIGNoaWxkSW5qZWN0b3JcbiAgICAgICk7XG4gICAgICBpZiAob3B0aW9ucy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcG92ZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Qb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvcG92ZXIpIHtcbiAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5wb3BvdmVyLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMV07XG4gICAgICBjb25zdCBwb3BvdmVyUG9zaXRpb24gPSBQb3NpdGlvbmluZy5nZXRQb3NpdGlvbkVsZW1lbnRzKFxuICAgICAgICB0aGlzLl9lbG0ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQsXG4gICAgICAgIHRoaXMucG9zaXRpb25NYXAodGhpcy5wbGFjZW1lbnQpIHx8IHRoaXMuX2RlZmF1bHRPcHRpb25zLnBsYWNlbWVudCxcbiAgICAgICAgdGhpcy5hcHBlbmRUb0JvZHkgfHwgdGhpcy5fZGVmYXVsdE9wdGlvbnMuYXBwZW5kVG9Cb2R5XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMucGxhY2VtZW50ID09PSAnbGFuZFNjYXBlJykge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ3RvcCcsIGAke3BvcG92ZXJQb3NpdGlvbi50b3B9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICdsZWZ0JywgYDBweGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ3dpZHRoJywgYCR7d2luZG93LmlubmVyV2lkdGh9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICdtYXgtaGVpZ2h0JywgYCR7d2luZG93LmlubmVySGVpZ2h0IC0gcG9wb3ZlclBvc2l0aW9uLmhlaWdodH1weGApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBsYWNlbWVudCA9PT0gJ2Z1bGxTY3JlZW4nKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAndG9wJywgYCR7MH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ2xlZnQnLCBgMHB4YCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAnd2lkdGgnLCBgJHt3aW5kb3cuaW5uZXJXaWR0aH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ21heC1oZWlnaHQnLCBgJHt3aW5kb3cuaW5uZXJIZWlnaHQgLSBwb3BvdmVyUG9zaXRpb24uaGVpZ2h0fXB4YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ3RvcCcsIGAke3BvcG92ZXJQb3NpdGlvbi50b3B9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICdsZWZ0JywgYCR7cG9wb3ZlclBvc2l0aW9uLmxlZnR9cHhgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhpZGVQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvcG92ZXIpIHtcbiAgICAgIHRoaXMucG9wb3Zlci5kZXN0cm95KCk7XG4gICAgICBkZWxldGUgdGhpcy5wb3BvdmVyO1xuICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5mb3JFYWNoKGZuID0+IGZuKCkpO1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUG9wb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuL3BvcG92ZXItb3B0aW9ucy5wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25zRmFjdG9yeSh1c2VyT3B0aW9uczogUG9wb3Zlck9wdGlvbnMpOiBQb3BvdmVyT3B0aW9ucyB7XG4gIGNvbnN0IG9wdGlvbnM6IFBvcG92ZXJPcHRpb25zID0gbmV3IFBvcG92ZXJPcHRpb25zKCk7XG4gIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgdXNlck9wdGlvbnMpO1xuICByZXR1cm4gb3B0aW9ucztcbn1cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbUG9wb3ZlckRpcmVjdGl2ZSwgUG9wb3ZlckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbUG9wb3ZlckRpcmVjdGl2ZSwgUG9wb3ZlckNvbXBvbmVudF0sXG4gIGVudHJ5Q29tcG9uZW50czogW1BvcG92ZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ05hdmJhciwgbnptLW5hdi1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LWJhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTmF2QmFyQ29tcG9uZW50IHtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIHByZWZpeENsczogJ2FtLW5hdmJhcicsXG4gICAgbW9kZTogJ2RhcmsnLFxuICAgIG9uTGVmdENsaWNrOiAoKSA9PiB7fVxuICB9O1xuICBuYXZiYXJDbHMgPSB7fTtcbiAgaXNJY29uU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMZWZ0Q29udGVudFN0cmluZzogYm9vbGVhbiA9IHRydWU7XG4gIGlzUmlnaHRDb250ZW50U3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcml2YXRlIF9pY29uOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9sZWZ0Q29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfcmlnaHRDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBtb2RlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMubW9kZSA9IHZhbHVlO1xuICAgIHRoaXMuX2FtTmF2YmFyTGlnaHQgPSB0aGlzLmRlZmF1bHRQcm9wcy5tb2RlID09PSAnbGlnaHQnO1xuICAgIHRoaXMuX2FtTmF2YmFyZGFyayA9IHRoaXMuZGVmYXVsdFByb3BzLm1vZGUgPT09ICdkYXJrJztcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaWNvbigpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5faWNvbjtcbiAgfVxuICBzZXQgaWNvbih2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmlzSWNvblN0cmluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzSWNvblN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2ljb24gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbGVmdENvbnRlbnQoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xlZnRDb250ZW50O1xuICB9XG4gIHNldCBsZWZ0Q29udGVudCh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmlzTGVmdENvbnRlbnRTdHJpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0xlZnRDb250ZW50U3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5fbGVmdENvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcmlnaHRDb250ZW50KCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9yaWdodENvbnRlbnQ7XG4gIH1cbiAgc2V0IHJpZ2h0Q29udGVudCh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmlzUmlnaHRDb250ZW50U3RyaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNSaWdodENvbnRlbnRTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9yaWdodENvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25MZWZ0Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tbmF2YmFyJylcbiAgcHJpdmF0ZSBfYW1OYXZiYXIgPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLW5hdmJhci1saWdodCcpXG4gIHByaXZhdGUgX2FtTmF2YmFyTGlnaHQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tbmF2YmFyLWRhcmsnKVxuICBwcml2YXRlIF9hbU5hdmJhcmRhcms7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5vbkxlZnRDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBOYXZCYXJDb21wb25lbnQgfSBmcm9tICcuL25hdi1iYXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtOYXZCYXJDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtOYXZCYXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIE5hdkJhck1vZHVsZSB7fVxuIiwiLy8gw6XCkMKMw6bCrcKlw6jCh8KqICdybWMtY2FsZW5kYXIvbGliL2xvY2FsZS9lbl9VUyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICdDYWxlbmRhcicsXG4gIHRvZGF5OiAnVG9kYXknLFxuICBtb250aDogJ01vbnRoJyxcbiAgeWVhcjogJ1llYXInLFxuICBhbTogJ0FNJyxcbiAgcG06ICdQTScsXG4gIGRhdGVUaW1lRm9ybWF0OiAnTU0vZGQveXl5eSB3IGhoOm1tJyxcbiAgZGF0ZUZvcm1hdDogJ3l5eXkvTU0vZGQgdycsXG4gIG5vQ2hvb3NlOiAnTm8gQ2hvb3NlJyxcbiAgd2VlazogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZpcicsICdTYXQnXSxcbiAgY2xlYXI6ICdDbGVhcicsXG4gIHNlbGVjdFRpbWU6ICdTZWxlY3QgVGltZScsXG4gIHNlbGVjdFN0YXJ0VGltZTogJ1NlbGVjdCBTdGFydCBUaW1lJyxcbiAgc2VsZWN0RW5kVGltZTogJ1NlbGVjdCBFbmQgVGltZScsXG4gIHN0YXJ0OiAnU3RhcnQnLFxuICBlbmQ6ICdFbmQnLFxuICBiZWdpbjogJ1N0YXJ0JyxcbiAgb3ZlcjogJ0VuZCcsXG4gIGJlZ2luX292ZXI6ICdTL0UnLFxuICBjb25maXJtOiAnQ29uZmlybScsXG4gIG1vbnRoVGl0bGU6ICd5eXl5L01NJyxcbiAgbG9hZFByZXZNb250aDogJ0xvYWQgUHJldiBNb250aCcsXG4gIHllc3RlcmRheTogJ1llc3RlcmRheScsXG4gIGxhc3RXZWVrOiAnTGFzdCBXZWVrJyxcbiAgbGFzdE1vbnRoOiAnTGFzdCBNb250aCdcbn07XG4iLCJpbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9kYXRlL0RhdGFUeXBlcyc7XG5cbmV4cG9ydCBjb25zdCBtZXJnZURhdGVUaW1lID0gKGRhdGU/OiBEYXRlLCB0aW1lPzogRGF0ZSkgPT4ge1xuICBkYXRlID0gZGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICBpZiAoIXRpbWUpIHJldHVybiBkYXRlO1xuICByZXR1cm4gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICBkYXRlLmdldERhdGUoKSxcbiAgICB0aW1lLmdldEhvdXJzKCksXG4gICAgdGltZS5nZXRNaW51dGVzKCksXG4gICAgdGltZS5nZXRTZWNvbmRzKClcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlID0gKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nLCBsb2NhbGU/OiBNb2RlbHMuTG9jYWxlKSA9PiB7XG4gIGNvbnN0IHdlZWsgPSBsb2NhbGUgJiYgbG9jYWxlLndlZWs7XG5cbiAgbGV0IG86IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgJ00rJzogZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAnZCsnOiBkYXRlLmdldERhdGUoKSxcbiAgICAnaCsnOiBkYXRlLmdldEhvdXJzKCksXG4gICAgJ20rJzogZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgJ3MrJzogZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgJ3ErJzogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSxcbiAgICAndysnOiB3ZWVrICYmIHdlZWtbZGF0ZS5nZXREYXkoKV0sXG4gICAgUzogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKVxuICB9O1xuICBpZiAoLyh5KykvLnRlc3QoZm9ybWF0KSkgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoUmVnRXhwLiQxLCAoZGF0ZS5nZXRGdWxsWWVhcigpICsgJycpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xuICBmb3IgKGxldCBrIGluIG8pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnKCcgKyBrICsgJyknKS50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFJlZ0V4cC4kMSwgUmVnRXhwLiQxLmxlbmd0aCA9PSAxID8gb1trXSA6ICgnMDAnICsgb1trXSkuc3Vic3RyKCgnJyArIG9ba10pLmxlbmd0aCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0O1xufTtcbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBIb3N0QmluZGluZyxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9kYXRlL0RhdGFUeXBlcyc7XG5pbXBvcnQgemhDTiBmcm9tICcuL2xvY2FsZS96aF9DTic7XG5pbXBvcnQgZW5VUyBmcm9tICcuL2xvY2FsZS9lbl9VUyc7XG5pbXBvcnQgUHJvcHNUeXBlIGZyb20gJy4vY2FsZW5kYXIucHJvcHMuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2FsZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uL2xvY2FsZS1wcm92aWRlci9sb2NhbGUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBtZXJnZURhdGVUaW1lIH0gZnJvbSAnLi91dGlsL2luZGV4JztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHsgUHJvcHNUeXBlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGVUeXBlIHtcbiAgc2hvd1RpbWVQaWNrZXI6IGJvb2xlYW47XG4gIHRpbWVQaWNrZXJUaXRsZT86IHN0cmluZztcbiAgc3RhcnREYXRlPzogRGF0ZTtcbiAgZW5kRGF0ZT86IERhdGU7XG4gIGRpc0NvbmZpcm1CdG4/OiBib29sZWFuO1xuICBjbGllbnRIaWdodD86IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQ2FsZW5kYXIsIG56bS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGlzU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBjb250ZW50QW5pbWF0ZUNsYXNzOiBzdHJpbmc7XG4gIG1hc2tBbmltYXRlQ2xhc3M6IHN0cmluZztcbiAgc2hvd0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvcHMgPSB7XG4gICAgdmlzaWJsZTogZmFsc2UsXG4gICAgc2hvd0hlYWRlcjogdHJ1ZSxcbiAgICBsb2NhbGU6IHpoQ04sXG4gICAgcGlja1RpbWU6IGZhbHNlLFxuICAgIHNob3dTaG9ydGN1dDogZmFsc2UsXG4gICAgcHJlZml4Q2xzOiAncm1jLWNhbGVuZGFyJyxcbiAgICB0eXBlOiAncmFuZ2UnLFxuICAgIGRlZmF1bHRUaW1lVmFsdWU6IG5ldyBEYXRlKDIwMDAsIDAsIDEsIDgpXG4gIH0gYXMgUHJvcHNUeXBlO1xuXG4gIHN0YXRlID0ge1xuICAgIHNob3dUaW1lUGlja2VyOiBmYWxzZSxcbiAgICB0aW1lUGlja2VyVGl0bGU6ICcnLFxuICAgIHN0YXJ0RGF0ZTogdW5kZWZpbmVkLFxuICAgIGVuZERhdGU6IHVuZGVmaW5lZCxcbiAgICBkaXNDb25maXJtQnRuOiB0cnVlLFxuICAgIGNsaWVudEhpZ2h0OiAwXG4gIH0gYXMgU3RhdGVUeXBlO1xuXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2VudGVyRGlyZWN0aW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ2VuVVMnKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2FsZSA9IGVuVVM7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3poQ04nKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2FsZSA9IHpoQ047XG4gICAgfVxuXG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGVmYXVsdFRpbWVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VGltZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwcmVmaXhDbHModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvcHMucHJlZml4Q2xzID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBlbnRlckRpcmVjdGlvbih2YWx1ZSkge1xuICAgIHRoaXMuX2VudGVyRGlyZWN0aW9uID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX2VudGVyRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuY29udGVudEFuaW1hdGVDbGFzcyA9ICdzbGlkZUgtZW50ZXIgc2xpZGVILWVudGVyLWFjdGl2ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudEFuaW1hdGVDbGFzcyA9ICdzbGlkZVYtZW50ZXIgc2xpZGVWLWVudGVyLWFjdGl2ZSc7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB2aXNpYmxlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy52aXNpYmxlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2hvd0FuaW1hdGlvbigpO1xuICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVBbmltYXRpb24oKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGdldERhdGVFeHRyYSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMuZ2V0RGF0ZUV4dHJhID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHREYXRlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5kZWZhdWx0RGF0ZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtaW5EYXRlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5taW5EYXRlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1heERhdGUodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLm1heERhdGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGlja1RpbWUodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLnBpY2tUaW1lID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHR5cGUodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLnR5cGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc2hvd1Nob3J0Y3V0KHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5zaG93U2hvcnRjdXQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcm93U2l6ZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMucm93U2l6ZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBpbmZpbml0ZSh2YWx1ZSkge31cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMucmVjZWl2ZVByb3BzKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb25TZWxlY3QodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLm9uU2VsZWN0ID0gdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Db25maXJtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25TZWxlY3RIYXNEaXNhYmxlRGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgY2xhc3M6IHN0cmluZyA9ICdhbS1jYWxlbmRhcic7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9jYWxlUHJvdmlkZXJTZXJ2aWNlOiBMb2NhbGVQcm92aWRlclNlcnZpY2UpIHt9XG5cbiAgcmVjZWl2ZVByb3BzKG5leHRQcm9wczogUHJvcHNUeXBlKSB7XG4gICAgaWYgKG5leHRQcm9wcy52aXNpYmxlICYmIG5leHRQcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuc2hvcnRjdXRTZWxlY3QobmV4dFByb3BzLmRlZmF1bHRWYWx1ZVswXSwgbmV4dFByb3BzLmRlZmF1bHRWYWx1ZVsxXSwgbmV4dFByb3BzKTtcbiAgICB9XG4gIH1cblxuICBzaG93QW5pbWF0aW9uKCkge1xuICAgIGlmICh0aGlzLl9lbnRlckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICB0aGlzLmNvbnRlbnRBbmltYXRlQ2xhc3MgPSAnc2xpZGVILWVudGVyIHNsaWRlSC1lbnRlci1hY3RpdmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBbmltYXRlQ2xhc3MgPSAnc2xpZGVWLWVudGVyIHNsaWRlVi1lbnRlci1hY3RpdmUnO1xuICAgIH1cbiAgICB0aGlzLm1hc2tBbmltYXRlQ2xhc3MgPSAnZmFkZS1lbnRlciBmYWRlLWVudGVyLWFjdGl2ZSc7XG4gIH1cblxuICBoaWRlQW5pbWF0aW9uKCkge1xuICAgIGlmICh0aGlzLl9lbnRlckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICB0aGlzLmNvbnRlbnRBbmltYXRlQ2xhc3MgPSAnc2xpZGVILWxlYXZlIHNsaWRlSC1sZWF2ZS1hY3RpdmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBbmltYXRlQ2xhc3MgPSAnc2xpZGVWLWxlYXZlIHNsaWRlVi1sZWF2ZS1hY3RpdmUnO1xuICAgIH1cbiAgICB0aGlzLm1hc2tBbmltYXRlQ2xhc3MgPSAnZmFkZS1sZWF2ZSBmYWRlLWxlYXZlLWFjdGl2ZSc7XG4gIH1cblxuICBzZWxlY3REYXRlID0gKFxuICAgIGRhdGU6IERhdGUsXG4gICAgdXNlRGF0ZVRpbWUgPSBmYWxzZSxcbiAgICBvbGRTdGF0ZTogeyBzdGFydERhdGU/OiBEYXRlOyBlbmREYXRlPzogRGF0ZSB9ID0ge30sXG4gICAgcHJvcHMgPSB0aGlzLnByb3BzXG4gICkgPT4ge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIHt9IGFzIFN0YXRlVHlwZTtcbiAgICB9XG4gICAgbGV0IG5ld1N0YXRlID0ge30gYXMgU3RhdGVUeXBlO1xuICAgIGNvbnN0IHsgdHlwZSwgcGlja1RpbWUsIGRlZmF1bHRUaW1lVmFsdWUsIGxvY2FsZSA9IHt9IGFzIE1vZGVscy5Mb2NhbGUgfSA9IHByb3BzO1xuICAgIGNvbnN0IG5ld0RhdGUgPSBwaWNrVGltZSAmJiAhdXNlRGF0ZVRpbWUgPyBtZXJnZURhdGVUaW1lKGRhdGUsIGRlZmF1bHRUaW1lVmFsdWUpIDogZGF0ZTtcbiAgICBjb25zdCB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9ID0gb2xkU3RhdGU7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ29uZSc6XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogbmV3RGF0ZSxcbiAgICAgICAgICBkaXNDb25maXJtQnRuOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAocGlja1RpbWUpIHtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgICAgdGltZVBpY2tlclRpdGxlOiBsb2NhbGUuc2VsZWN0VGltZSxcbiAgICAgICAgICAgIHNob3dUaW1lUGlja2VyOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICBpZiAoIXN0YXJ0RGF0ZSB8fCBlbmREYXRlKSB7XG4gICAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICAgIHN0YXJ0RGF0ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIGVuZERhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRpc0NvbmZpcm1CdG46IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChwaWNrVGltZSkge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgICAgICB0aW1lUGlja2VyVGl0bGU6IGxvY2FsZS5zZWxlY3RTdGFydFRpbWUsXG4gICAgICAgICAgICAgIHNob3dUaW1lUGlja2VyOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgICAgdGltZVBpY2tlclRpdGxlOiArbmV3RGF0ZSA+PSArc3RhcnREYXRlID8gbG9jYWxlLnNlbGVjdEVuZFRpbWUgOiBsb2NhbGUuc2VsZWN0U3RhcnRUaW1lLFxuICAgICAgICAgICAgZGlzQ29uZmlybUJ0bjogZmFsc2UsXG4gICAgICAgICAgICBlbmREYXRlOlxuICAgICAgICAgICAgICBwaWNrVGltZSAmJiAhdXNlRGF0ZVRpbWUgJiYgK25ld0RhdGUgPj0gK3N0YXJ0RGF0ZVxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUoK21lcmdlRGF0ZVRpbWUobmV3RGF0ZSwgc3RhcnREYXRlKSArIDM2MDAwMDApXG4gICAgICAgICAgICAgICAgOiBuZXdEYXRlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgb25TZWxlY3RlZERhdGUgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnREYXRlLCBlbmREYXRlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgb25TZWxlY3QgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAob25TZWxlY3QpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb25TZWxlY3QoZGF0ZSwgW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0pO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2hvcnRjdXRTZWxlY3QodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4udGhpcy5zZWxlY3REYXRlKGRhdGUsIGZhbHNlLCB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9KVxuICAgIH07XG5cbiAgICB0aGlzLnNob3dDbGVhciA9ICEhdGhpcy5zdGF0ZS5zdGFydERhdGU7XG4gIH1cblxuICB0cmlnZ2VyU2VsZWN0SGFzRGlzYWJsZURhdGUgPSAoZGF0ZTogRGF0ZVtdKSA9PiB7XG4gICAgdGhpcy50cmlnZ2VyQ2xlYXIoKTtcbiAgICB0aGlzLm9uU2VsZWN0SGFzRGlzYWJsZURhdGUgJiYgdGhpcy5vblNlbGVjdEhhc0Rpc2FibGVEYXRlLmVtaXQoZGF0ZSk7XG4gIH1cblxuICBvbkNsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzaG93VGltZVBpY2tlcjogZmFsc2UsXG4gICAgICB0aW1lUGlja2VyVGl0bGU6ICcnLFxuICAgICAgc3RhcnREYXRlOiB1bmRlZmluZWQsXG4gICAgICBlbmREYXRlOiB1bmRlZmluZWQsXG4gICAgICBkaXNDb25maXJtQnRuOiB0cnVlLFxuICAgICAgY2xpZW50SGlnaHQ6IDBcbiAgICB9IGFzIFN0YXRlVHlwZTtcbiAgICB0aGlzLnNob3dDbGVhciA9ICEhdGhpcy5zdGF0ZS5zdGFydERhdGU7XG4gIH1cblxuICB0cmlnZ2VyQ29uZmlybSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAoc3RhcnREYXRlICYmIGVuZERhdGUgJiYgK3N0YXJ0RGF0ZSA+ICtlbmREYXRlKSB7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICAgIHJldHVybiB0aGlzLm9uQ29uZmlybSAmJiB0aGlzLm9uQ29uZmlybS5lbWl0KHsgc3RhcnREYXRlOiBlbmREYXRlLCBlbmREYXRlOiBzdGFydERhdGUgfSk7XG4gICAgfVxuICAgIHRoaXMub25Db25maXJtICYmIHRoaXMub25Db25maXJtLmVtaXQoeyBzdGFydERhdGUsIGVuZERhdGUgfSk7XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICB0cmlnZ2VyQ2FuY2VsKCkge1xuICAgIHRoaXMucHJvcHMub25DYW5jZWwgJiYgdGhpcy5wcm9wcy5vbkNhbmNlbCgpO1xuICAgIHRoaXMub25DbG9zZSgpO1xuICAgIHRoaXMub25DYW5jZWwgJiYgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICB0cmlnZ2VyQ2xlYXIgPSAoKSA9PiB7XG4gICAgLy8gw6bCuMKFw6nCmcKkw6bClcKww6bCjcKuw6XCgcKaw6XCu8K2w6jCv8Kfw6/CvMKMw6XCkMKmw6XCiMKZw6XCkMKMw6bCrcKlw6XCiMK3w6bClsKww6bClcKww6bCjcKuw6XCr8K8w6jCh8K0w6bCisKlw6nClMKZXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAuLi57IHN0YXJ0RGF0ZTogdW5kZWZpbmVkLCBlbmREYXRlOiB1bmRlZmluZWQsIHNob3dUaW1lUGlja2VyOiBmYWxzZSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5wcm9wcy5vbkNsZWFyICYmIHRoaXMucHJvcHMub25DbGVhcigpO1xuICAgICAgdGhpcy5zaG93Q2xlYXIgPSAhIXRoaXMuc3RhdGUuc3RhcnREYXRlO1xuICAgIH0sIDApO1xuICB9XG5cbiAgb25UaW1lQ2hhbmdlID0gKGRhdGU6IERhdGUpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgdGhpcy5zdGF0ZS5lbmREYXRlID0gZGF0ZTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5zdGF0ZS5zdGFydERhdGUgPSBkYXRlO1xuICAgIH1cbiAgfVxuXG4gIHNob3J0Y3V0U2VsZWN0ID0gKHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgcHJvcHMgPSB0aGlzLnByb3BzKSA9PiB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi57IHN0YXJ0RGF0ZSwgc2hvd1RpbWVQaWNrZXI6IGZhbHNlIH0sXG4gICAgICAuLi50aGlzLnNlbGVjdERhdGUoZW5kRGF0ZSwgdHJ1ZSwgeyBzdGFydERhdGUgfSwgcHJvcHMpXG4gICAgfTtcbiAgICB0aGlzLnNob3dDbGVhciA9ICEhdGhpcy5zdGF0ZS5zdGFydERhdGU7XG4gIH1cblxuICBzZXRDbGllbnRIZWlnaHQgPSAoaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnN0YXRlLmNsaWVudEhpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgLi4udGhpcy5zZWxlY3REYXRlKGRlZmF1bHRWYWx1ZVsxXSwgdHJ1ZSwgeyBzdGFydERhdGU6IGRlZmF1bHRWYWx1ZVswXSB9LCB0aGlzLnByb3BzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhbGVQcm92aWRlclNlcnZpY2UubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMucHJvcHMubG9jYWxlID0geyAuLi50aGlzLl9sb2NhbGVQcm92aWRlclNlcnZpY2UuZ2V0TG9jYWxlU3ViT2JqKCdDYWxlbmRhcicpIH0gYXMgTW9kZWxzLkxvY2FsZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEhvc3RCaW5kaW5nLFxuICBUZW1wbGF0ZVJlZixcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi4vZGF0ZS9EYXRhVHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYWxlbmRhckhlYWRlciwgbnptLWNhbGVuZGFyLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNsb3NlSWNvbl9jb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2xlYXJJY29uOiBhbnk7XG5cbiAgcHJpdmF0ZSBfbG9jYWxlOiBNb2RlbHMuTG9jYWxlO1xuICBwcml2YXRlIF9zaG93Q2xlYXI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Nsb3NlSWNvbjogYW55ID0gJ1gnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgfVxuICBzZXQgbG9jYWxlKHZhbHVlKSB7XG4gICAgdGhpcy5fbG9jYWxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNsb3NlSWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xvc2VJY29uO1xuICB9XG4gIHNldCBjbG9zZUljb24odmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5fY2xvc2VJY29uID0gdmFsdWU7XG4gICAgICB0aGlzLmNsb3NlSWNvbl9jb21wb25lbnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jbG9zZUljb24gPSA8c3RyaW5nPnZhbHVlO1xuICAgICAgdGhpcy5jbG9zZUljb25fY29tcG9uZW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzaG93Q2xlYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dDbGVhcjtcbiAgfVxuICBzZXQgc2hvd0NsZWFyKHZhbHVlKSB7XG4gICAgdGhpcy5fc2hvd0NsZWFyID0gdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25DbGVhcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhlYWRlcicpIGhlYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHRyaWdnZXJDYW5jZWwoKSB7XG4gICAgdGhpcy5vbkNhbmNlbCAmJiB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIHRyaWdnZXJDbGVhcigpIHtcbiAgICB0aGlzLm9uQ2xlYXIgJiYgdGhpcy5vbkNsZWFyLmVtaXQoKTtcbiAgfVxuXG59XG4iLCJleHBvcnQgbmFtZXNwYWNlIE1vZGVscyB7XG4gIGV4cG9ydCBlbnVtIFNlbGVjdFR5cGUge1xuICAgIE5vbmUsXG4gICAgU2luZ2xlLFxuICAgIEFsbCxcbiAgICBPbmx5LFxuICAgIFN0YXJ0LFxuICAgIE1pZGRsZSxcbiAgICBFbmQsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExvY2FsZSB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB0b2RheTogc3RyaW5nO1xuICAgIG1vbnRoOiBzdHJpbmc7XG4gICAgeWVhcjogc3RyaW5nO1xuICAgIGFtOiBzdHJpbmc7XG4gICAgcG06IHN0cmluZztcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gICAgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZztcbiAgICBub0Nob29zZTogc3RyaW5nO1xuICAgIHdlZWs6IHN0cmluZ1tdO1xuICAgIGNsZWFyOiBzdHJpbmc7XG4gICAgc2VsZWN0VGltZTogc3RyaW5nO1xuICAgIHNlbGVjdFN0YXJ0VGltZTogc3RyaW5nO1xuICAgIHNlbGVjdEVuZFRpbWU6IHN0cmluZztcbiAgICBzdGFydDogc3RyaW5nO1xuICAgIGVuZDogc3RyaW5nO1xuICAgIGJlZ2luOiBzdHJpbmc7XG4gICAgb3Zlcjogc3RyaW5nO1xuICAgIGJlZ2luX292ZXI6IHN0cmluZztcbiAgICBjb25maXJtOiBzdHJpbmc7XG4gICAgbW9udGhUaXRsZTogc3RyaW5nO1xuICAgIGxvYWRQcmV2TW9udGg6IHN0cmluZztcbiAgICB5ZXN0ZXJkYXk6IHN0cmluZztcbiAgICBsYXN0V2Vlazogc3RyaW5nO1xuICAgIGxhc3RNb250aDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDZWxsRGF0YSB7XG4gICAgdGljazogbnVtYmVyO1xuICAgIGRheU9mTW9udGg6IG51bWJlcjtcbiAgICBzZWxlY3RlZDogU2VsZWN0VHlwZTtcbiAgICBpc0ZpcnN0T2ZNb250aDogYm9vbGVhbjtcbiAgICBpc0xhc3RPZk1vbnRoOiBib29sZWFuO1xuICAgIG91dE9mRGF0ZTogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXh0cmFEYXRhIHtcbiAgICBpbmZvPzogc3RyaW5nO1xuICAgIGRpc2FibGU/OiBib29sZWFuO1xuICAgIGNlbGxDbHM/OiBhbnk7XG4gICAgY2VsbFJlbmRlcj86IGFueTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTW9udGhEYXRhIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGZpcnN0RGF0ZTogRGF0ZTtcbiAgICBsYXN0RGF0ZTogRGF0ZTtcbiAgICB3ZWVrczogTW9kZWxzLkNlbGxEYXRhW11bXTtcbiAgICBjb21wb25lbnQ/OiBhbnk7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIHk/OiBudW1iZXI7XG4gICAgdXBkYXRlTGF5b3V0PzogRnVuY3Rpb247XG4gICAgY29tcG9uZW50UmVmPzogYW55O1xuICB9XG59XG4iLCJpbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9kYXRlL0RhdGFUeXBlcyc7XG5pbXBvcnQgUHJvcHNUeXBlIGZyb20gJy4vZGF0ZXBpY2tlci5wcm9wcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSAnLi4vbG9jYWxlL3poX0NOJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZVR5cGUge1xuICBtb250aHM6IE1vZGVscy5Nb250aERhdGFbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVBpY2tlciB7XG4gIHByb3BzID0ge1xuICAgIHByZWZpeENsczogJ3JtYy1jYWxlbmRhcicsXG4gICAgaW5maW5pdGU6IGZhbHNlLFxuICAgIGluZmluaXRlT3B0OiBmYWxzZSxcbiAgICBkZWZhdWx0RGF0ZTogbmV3IERhdGUoKSxcbiAgICBpbml0YWxNb250aHM6IDYsXG4gICAgbG9jYWxlOiBkZWZhdWx0TG9jYWxlXG4gIH0gYXMgUHJvcHNUeXBlO1xuXG4gIHN0YXRlOiBhbnkgPSB7XG4gICAgbW9udGhzOiBbXVxuICB9O1xuXG4gIHZpc2libGVNb250aDogTW9kZWxzLk1vbnRoRGF0YVtdID0gW107XG4gIGdlbk1vbnRoQ29tcG9uZW50OiAoZGF0YSkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGluaXQoKSB7XG4gICAgY29uc3QgeyBpbml0YWxNb250aHMgPSA2LCBkZWZhdWx0RGF0ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluaXRhbE1vbnRoczsgaSsrKSB7XG4gICAgICB0aGlzLmNhbkxvYWROZXh0KCkgJiYgdGhpcy5nZW5Nb250aERhdGEoZGVmYXVsdERhdGUsIGkpO1xuICAgIH1cbiAgICB0aGlzLnZpc2libGVNb250aCA9IFsuLi50aGlzLnN0YXRlLm1vbnRoc107XG4gIH1cblxuICByZWNlaXZlUHJvcHMob2xkVmFsdWU6IFByb3BzVHlwZSwgbmV3VmFsdWU6IFByb3BzVHlwZSkge1xuICAgIGlmIChvbGRWYWx1ZSAmJiBuZXdWYWx1ZSkge1xuICAgICAgaWYgKG9sZFZhbHVlLnN0YXJ0RGF0ZSAhPT0gbmV3VmFsdWUuc3RhcnREYXRlIHx8IG9sZFZhbHVlLmVuZERhdGUgIT09IG5ld1ZhbHVlLmVuZERhdGUpIHtcbiAgICAgICAgaWYgKG9sZFZhbHVlLnN0YXJ0RGF0ZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZVJhbmdlKG9sZFZhbHVlLnN0YXJ0RGF0ZSwgb2xkVmFsdWUuZW5kRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbHVlLnN0YXJ0RGF0ZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZVJhbmdlKG5ld1ZhbHVlLnN0YXJ0RGF0ZSwgbmV3VmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRNb250aERhdGUoZGF0ZSA9IG5ldyBEYXRlKCksIGFkZE1vbnRoID0gMCkge1xuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBtID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHJldHVybiB7XG4gICAgICBmaXJzdERhdGU6IG5ldyBEYXRlKHksIG0gKyBhZGRNb250aCwgMSksXG4gICAgICBsYXN0RGF0ZTogbmV3IERhdGUoeSwgbSArIDEgKyBhZGRNb250aCwgMClcbiAgICB9O1xuICB9XG5cbiAgY2FuTG9hZFByZXYoKSB7XG4gICAgY29uc3QgeyBtaW5EYXRlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAhbWluRGF0ZSB8fFxuICAgICAgdGhpcy5zdGF0ZS5tb250aHMubGVuZ3RoIDw9IDAgfHxcbiAgICAgICt0aGlzLmdldE1vbnRoRGF0ZShtaW5EYXRlKS5maXJzdERhdGUgPCArdGhpcy5zdGF0ZS5tb250aHNbMF0uZmlyc3REYXRlXG4gICAgKTtcbiAgfVxuXG4gIGNhbkxvYWROZXh0KCkge1xuICAgIGNvbnN0IHsgbWF4RGF0ZSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgIW1heERhdGUgfHxcbiAgICAgIHRoaXMuc3RhdGUubW9udGhzLmxlbmd0aCA8PSAwIHx8XG4gICAgICArdGhpcy5nZXRNb250aERhdGUobWF4RGF0ZSkuZmlyc3REYXRlID4gK3RoaXMuc3RhdGUubW9udGhzW3RoaXMuc3RhdGUubW9udGhzLmxlbmd0aCAtIDFdLmZpcnN0RGF0ZVxuICAgICk7XG4gIH1cblxuICBnZXREYXRlV2l0aG91dFRpbWUgPSAoZGF0ZT86IERhdGUpID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiAwO1xuICAgIHJldHVybiArbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgfTtcblxuICBnZW5XZWVrRGF0YSA9IChmaXJzdERhdGU6IERhdGUpID0+IHtcbiAgICBjb25zdCBtaW5EYXRlVGltZSA9IHRoaXMuZ2V0RGF0ZVdpdGhvdXRUaW1lKHRoaXMucHJvcHMubWluRGF0ZSk7XG4gICAgY29uc3QgbWF4RGF0ZVRpbWUgPSB0aGlzLmdldERhdGVXaXRob3V0VGltZSh0aGlzLnByb3BzLm1heERhdGUpIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuICAgIGNvbnN0IHdlZWtzOiBNb2RlbHMuQ2VsbERhdGFbXVtdID0gW107XG4gICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRNb250aERhdGUoZmlyc3REYXRlLCAxKS5maXJzdERhdGU7XG4gICAgbGV0IGN1cnJlbnREYXkgPSBmaXJzdERhdGU7XG4gICAgbGV0IGN1cnJlbnRXZWVrOiBNb2RlbHMuQ2VsbERhdGFbXSA9IFtdO1xuICAgIHdlZWtzLnB1c2goY3VycmVudFdlZWspO1xuXG4gICAgbGV0IHN0YXJ0V2Vla2RheSA9IGN1cnJlbnREYXkuZ2V0RGF5KCk7XG4gICAgaWYgKHN0YXJ0V2Vla2RheSA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnRXZWVrZGF5OyBpKyspIHtcbiAgICAgICAgY3VycmVudFdlZWsucHVzaCh7fSBhcyBNb2RlbHMuQ2VsbERhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAoY3VycmVudERheSA8IG5leHRNb250aCkge1xuICAgICAgaWYgKGN1cnJlbnRXZWVrLmxlbmd0aCA9PT0gNykge1xuICAgICAgICBjdXJyZW50V2VlayA9IFtdO1xuICAgICAgICB3ZWVrcy5wdXNoKGN1cnJlbnRXZWVrKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRheU9mTW9udGggPSBjdXJyZW50RGF5LmdldERhdGUoKTtcbiAgICAgIGNvbnN0IHRpY2sgPSArY3VycmVudERheTtcbiAgICAgIGN1cnJlbnRXZWVrLnB1c2goe1xuICAgICAgICB0aWNrLFxuICAgICAgICBkYXlPZk1vbnRoLFxuICAgICAgICBzZWxlY3RlZDogTW9kZWxzLlNlbGVjdFR5cGUuTm9uZSxcbiAgICAgICAgaXNGaXJzdE9mTW9udGg6IGRheU9mTW9udGggPT09IDEsXG4gICAgICAgIGlzTGFzdE9mTW9udGg6IGZhbHNlLFxuICAgICAgICBvdXRPZkRhdGU6IHRpY2sgPCBtaW5EYXRlVGltZSB8fCB0aWNrID4gbWF4RGF0ZVRpbWVcbiAgICAgIH0pO1xuICAgICAgY3VycmVudERheSA9IG5ldyBEYXRlKGN1cnJlbnREYXkuZ2V0VGltZSgpICsgMzYwMCAqIDI0ICogMTAwMCk7XG4gICAgfVxuICAgIGN1cnJlbnRXZWVrW2N1cnJlbnRXZWVrLmxlbmd0aCAtIDFdLmlzTGFzdE9mTW9udGggPSB0cnVlO1xuICAgIHJldHVybiB3ZWVrcztcbiAgfTtcblxuICBnZW5Nb250aERhdGEoZGF0ZT86IERhdGUsIGFkZE1vbnRoOiBudW1iZXIgPSAwKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICBkYXRlID0gYWRkTW9udGggPj0gMCA/IHRoaXMuc3RhdGUubW9udGhzW3RoaXMuc3RhdGUubW9udGhzLmxlbmd0aCAtIDFdLmZpcnN0RGF0ZSA6IHRoaXMuc3RhdGUubW9udGhzWzBdLmZpcnN0RGF0ZTtcbiAgICB9XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgY29uc3QgeyBsb2NhbGUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBmaXJzdERhdGUsIGxhc3REYXRlIH0gPSB0aGlzLmdldE1vbnRoRGF0ZShkYXRlLCBhZGRNb250aCk7XG4gICAgY29uc3Qgd2Vla3MgPSB0aGlzLmdlbldlZWtEYXRhKGZpcnN0RGF0ZSk7XG4gICAgY29uc3QgdGl0bGUgPSBmb3JtYXREYXRlKGZpcnN0RGF0ZSwgbG9jYWxlID8gbG9jYWxlLm1vbnRoVGl0bGUgOiAneXl5eS9NTScsIHRoaXMucHJvcHMubG9jYWxlKTtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgdGl0bGUsXG4gICAgICBmaXJzdERhdGUsXG4gICAgICBsYXN0RGF0ZSxcbiAgICAgIHdlZWtzXG4gICAgfSBhcyBNb2RlbHMuTW9udGhEYXRhO1xuICAgIGRhdGEuY29tcG9uZW50ID0gdGhpcy5nZW5Nb250aENvbXBvbmVudChkYXRhKTtcbiAgICBpZiAoYWRkTW9udGggPj0gMCkge1xuICAgICAgdGhpcy5zdGF0ZS5tb250aHMucHVzaChkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZS5tb250aHMudW5zaGlmdChkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydERhdGUsIGVuZERhdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3REYXRlUmFuZ2Uoc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpbkRhdGUoZGF0ZTogbnVtYmVyLCB0aWNrOiBudW1iZXIpIHtcbiAgICByZXR1cm4gZGF0ZSA8PSB0aWNrICYmIHRpY2sgPCBkYXRlICsgMjQgKiAzNjAwMDAwO1xuICB9XG5cbiAgc2VsZWN0RGF0ZVJhbmdlID0gKHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZT86IERhdGUsIGNsZWFyID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCB7IGdldERhdGVFeHRyYSwgdHlwZSwgb25TZWxlY3RIYXNEaXNhYmxlRGF0ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAodHlwZSA9PT0gJ29uZScpIHtcbiAgICAgIGVuZERhdGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRpbWUxID0gdGhpcy5nZXREYXRlV2l0aG91dFRpbWUoc3RhcnREYXRlKSxcbiAgICAgIHRpbWUyID0gdGhpcy5nZXREYXRlV2l0aG91dFRpbWUoZW5kRGF0ZSk7XG4gICAgY29uc3Qgc3RhcnREYXRlVGljayA9ICF0aW1lMiB8fCB0aW1lMSA8IHRpbWUyID8gdGltZTEgOiB0aW1lMjtcbiAgICBjb25zdCBlbmREYXRlVGljayA9IHRpbWUyICYmIHRpbWUxID4gdGltZTIgPyB0aW1lMSA6IHRpbWUyO1xuXG4gICAgY29uc3Qgc3RhcnRNb250aERhdGUgPSB0aGlzLmdldE1vbnRoRGF0ZShuZXcgRGF0ZShzdGFydERhdGVUaWNrKSkuZmlyc3REYXRlO1xuICAgIGNvbnN0IGVuZE1vbnRoRGF0ZSA9IGVuZERhdGVUaWNrID8gbmV3IERhdGUoZW5kRGF0ZVRpY2spIDogdGhpcy5nZXRNb250aERhdGUobmV3IERhdGUoc3RhcnREYXRlVGljaykpLmxhc3REYXRlO1xuXG4gICAgbGV0IHVudXNlYWJsZTogbnVtYmVyW10gPSBbXSxcbiAgICAgIG5lZWRVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlLm1vbnRoc1xuICAgICAgLmZpbHRlcihtID0+IHtcbiAgICAgICAgcmV0dXJuIG0uZmlyc3REYXRlID49IHN0YXJ0TW9udGhEYXRlICYmIG0uZmlyc3REYXRlIDw9IGVuZE1vbnRoRGF0ZTtcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaChtID0+IHtcbiAgICAgICAgbS53ZWVrcy5mb3JFYWNoKHcgPT5cbiAgICAgICAgICB3XG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVuZERhdGVUaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQudGljayAmJiB0aGlzLmluRGF0ZShzdGFydERhdGVUaWNrLCBkLnRpY2spO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnRpY2sgJiYgZC50aWNrID49IHN0YXJ0RGF0ZVRpY2sgJiYgZC50aWNrIDw9IGVuZERhdGVUaWNrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gZC5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgICAgICAgZC5zZWxlY3RlZCA9IE1vZGVscy5TZWxlY3RUeXBlLk5vbmU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IChnZXREYXRlRXh0cmEgJiYgZ2V0RGF0ZUV4dHJhKG5ldyBEYXRlKGQudGljaykpKSB8fCB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZC5vdXRPZkRhdGUgfHwgaW5mby5kaXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICB1bnVzZWFibGUucHVzaChkLnRpY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbkRhdGUoc3RhcnREYXRlVGljaywgZC50aWNrKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdvbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGQuc2VsZWN0ZWQgPSBNb2RlbHMuU2VsZWN0VHlwZS5TaW5nbGU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlbmREYXRlVGljaykge1xuICAgICAgICAgICAgICAgICAgICBkLnNlbGVjdGVkID0gTW9kZWxzLlNlbGVjdFR5cGUuT25seTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnREYXRlVGljayAhPT0gZW5kRGF0ZVRpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZC5zZWxlY3RlZCA9IE1vZGVscy5TZWxlY3RUeXBlLlN0YXJ0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZC5zZWxlY3RlZCA9IE1vZGVscy5TZWxlY3RUeXBlLkFsbDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5EYXRlKGVuZERhdGVUaWNrLCBkLnRpY2spKSB7XG4gICAgICAgICAgICAgICAgICBkLnNlbGVjdGVkID0gTW9kZWxzLlNlbGVjdFR5cGUuRW5kO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBkLnNlbGVjdGVkID0gTW9kZWxzLlNlbGVjdFR5cGUuTWlkZGxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuZWVkVXBkYXRlID0gbmVlZFVwZGF0ZSB8fCBkLnNlbGVjdGVkICE9PSBvbGRWYWx1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGlmIChuZWVkVXBkYXRlICYmIG0uY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgbS5jb21wb25lbnRSZWYudXBkYXRlV2Vla3MoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKHVudXNlYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAob25TZWxlY3RIYXNEaXNhYmxlRGF0ZSkge1xuICAgICAgICBvblNlbGVjdEhhc0Rpc2FibGVEYXRlKHVudXNlYWJsZS5tYXAodGljayA9PiBuZXcgRGF0ZSh0aWNrKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdVbnVzYWJsZSBkYXRlLiBZb3UgY2FuIGhhbmRsZSBieSBvblNlbGVjdEhhc0Rpc2FibGVEYXRlLicsIHVudXNlYWJsZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbXB1dGVWaXNpYmxlID0gKGNsaWVudEhlaWdodDogbnVtYmVyLCBzY3JvbGxUb3A6IG51bWJlcikgPT4ge1xuICAgIGxldCBuZWVkVXBkYXRlID0gZmFsc2U7XG4gICAgY29uc3QgTUFYX1ZJRVdfUE9SVCA9IGNsaWVudEhlaWdodCAqIDI7XG4gICAgY29uc3QgTUlOX1ZJRVdfUE9SVCA9IGNsaWVudEhlaWdodDtcblxuICAgIC8vIMOlwqTCp8OnwrzCk8OlwobCssOlwozCusOlwqTClsOowr/Ch8OmwrvCpMOowqfChMOlwojCmVxuICAgIGNvbnN0IGZpbHRlckZ1bmMgPSAodm06IE1vZGVscy5Nb250aERhdGEpID0+XG4gICAgICB2bS55ICYmXG4gICAgICB2bS5oZWlnaHQgJiZcbiAgICAgICh2bS55ICsgdm0uaGVpZ2h0ID4gc2Nyb2xsVG9wIC0gTUFYX1ZJRVdfUE9SVCAmJiB2bS55IDwgc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ICsgTUFYX1ZJRVdfUE9SVCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5pbmZpbml0ZU9wdCAmJiB0aGlzLnZpc2libGVNb250aC5sZW5ndGggPiAxMikge1xuICAgICAgdGhpcy52aXNpYmxlTW9udGggPSB0aGlzLnZpc2libGVNb250aC5maWx0ZXIoZmlsdGVyRnVuYykuc29ydCgoYSwgYikgPT4gK2EuZmlyc3REYXRlIC0gK2IuZmlyc3REYXRlKTtcbiAgICB9XG5cbiAgICAvLyDDpcK9wpPDpcKwwo/Dp8K8wpPDpcKGwrLDpcKMwrrDpMK4wo3DpsK7wqHDpsKXwrbDpcKhwqvDpcKFwoVcbiAgICBpZiAodGhpcy52aXNpYmxlTW9udGgubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMudmlzaWJsZU1vbnRoW3RoaXMudmlzaWJsZU1vbnRoLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGxhc3QueSAhPT0gdW5kZWZpbmVkICYmIGxhc3QuaGVpZ2h0ICYmIGxhc3QueSArIGxhc3QuaGVpZ2h0IDwgc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ICsgTUlOX1ZJRVdfUE9SVCkge1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLnN0YXRlLm1vbnRocy5pbmRleE9mKGxhc3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAyOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGxhc3RJbmRleCArIGk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5zdGF0ZS5tb250aHMubGVuZ3RoICYmIHRoaXMudmlzaWJsZU1vbnRoLmluZGV4T2YodGhpcy5zdGF0ZS5tb250aHNbaW5kZXhdKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU1vbnRoLnB1c2godGhpcy5zdGF0ZS5tb250aHNbaW5kZXhdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYW5Mb2FkTmV4dCgpICYmIHRoaXMuZ2VuTW9udGhEYXRhKHVuZGVmaW5lZCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5lZWRVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMudmlzaWJsZU1vbnRoWzBdO1xuICAgICAgaWYgKGZpcnN0LnkgIT09IHVuZGVmaW5lZCAmJiBmaXJzdC5oZWlnaHQgJiYgZmlyc3QueSA+IHNjcm9sbFRvcCAtIE1JTl9WSUVXX1BPUlQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IHRoaXMuc3RhdGUubW9udGhzLmluZGV4T2YoZmlyc3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAyOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGZpcnN0SW5kZXggLSBpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIHRoaXMudmlzaWJsZU1vbnRoLmluZGV4T2YodGhpcy5zdGF0ZS5tb250aHNbaW5kZXhdKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU1vbnRoLnVuc2hpZnQodGhpcy5zdGF0ZS5tb250aHNbaW5kZXhdKTtcbiAgICAgICAgICAgIG5lZWRVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5tb250aHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52aXNpYmxlTW9udGggPSB0aGlzLnN0YXRlLm1vbnRocy5maWx0ZXIoZmlsdGVyRnVuYyk7XG4gICAgICBuZWVkVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmVlZFVwZGF0ZTtcbiAgfTtcblxuICBjcmVhdGVPblNjcm9sbCA9ICgpID0+IHtcbiAgICAvLyBsZXQgdGltZXI6IGFueTtcbiAgICBsZXQgY2xpZW50SGVpZ2h0ID0gMCxcbiAgICAgIHNjcm9sbFRvcCA9IDA7XG5cbiAgICByZXR1cm4gKGRhdGE6IHsgZnVsbDogbnVtYmVyOyBjbGllbnQ6IG51bWJlcjsgdG9wOiBudW1iZXIgfSkgPT4ge1xuICAgICAgY29uc3QgeyBjbGllbnQsIHRvcCB9ID0gZGF0YTtcbiAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudDtcbiAgICAgIHNjcm9sbFRvcCA9IHRvcDtcblxuICAgICAgdGhpcy5jb21wdXRlVmlzaWJsZShjbGllbnRIZWlnaHQsIHNjcm9sbFRvcCk7XG5cbiAgICAgIC8vIMOkwrvCpcOkwrjCisOmwpbCucOmwrPClcOnwpvCrsOlwonCjcOmwpfCoMOpwpfCrsOpwqLCmMOvwrzCjMOlwqbCgsOmwp7CnMOlwpDCjsOnwrvCrcOmwpzCicOmwoDCp8OowoPCvcOpwpfCrsOpwqLCmMOvwrzCjMOmwpTCucOnwpTCqMOlwqbCgsOkwrjCi8OmwpbCucOmwrPClcOvwrzCjMOkwr3ChsOkwrvCpcOkwrjCi8OmwpbCucOmwrPClcOkwrzCmsOlwq/CvMOowofCtMOlwojCt8OmwpbCsMOnwqjCjcOlwr7CrsOlwrvCtsOowr/Cn8Onwo7CsMOowrHCoVxuXG4gICAgICAvLyBpZiAodGltZXIpIHtcbiAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgLy8gfVxuICAgICAgLy9cbiAgICAgIC8vIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgLy9cbiAgICAgIC8vICAgaWYgKHRoaXMuY29tcHV0ZVZpc2libGUoY2xpZW50SGVpZ2h0LCBzY3JvbGxUb3ApKSB7XG4gICAgICAvLyAgICAgY29uc29sZS5sb2coJ3VwZGF0ZSBkb20nKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSwgNTApO1xuICAgIH07XG4gIH07XG5cbiAgYmFzZU9uQ2VsbENsaWNrID0gKGRheTogTW9kZWxzLkNlbGxEYXRhKSA9PiB7XG4gICAgaWYgKCFkYXkudGljaykgcmV0dXJuO1xuICAgIHRoaXMucHJvcHMub25DZWxsQ2xpY2sgJiYgdGhpcy5wcm9wcy5vbkNlbGxDbGljayhuZXcgRGF0ZShkYXkudGljaykpO1xuICB9O1xuXG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9kYXRlL0RhdGFUeXBlcyc7XG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL2RhdGVwaWNrZXIuYmFzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYWxlbmRhckRhdGVQaWNrZXIsIG56bS1jYWxlbmRhci1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgRGF0ZVBpY2tlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB0cmFuc2Zvcm06IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9wYW5lbDogYW55O1xuICBwcml2YXRlIF9pbml0RGVsdGE6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RZOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9kZWx0YTogbnVtYmVyID0gdGhpcy5faW5pdERlbHRhO1xuXG4gIEBWaWV3Q2hpbGQoJ2xheW91dCcpXG4gIGxheW91dERvbTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncGFuZWwnKVxuICBwYW5lbERvbTogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKVxuICBzZXQgb25DZWxsQ2xpY2sodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLm9uQ2VsbENsaWNrID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGVuZERhdGUodmFsdWUpIHtcbiAgICBjb25zdCBvbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuICAgIHRoaXMucHJvcHMuZW5kRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMucmVjZWl2ZVByb3BzKG9sZFByb3BzLCB0aGlzLnByb3BzKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc3RhcnREYXRlKHZhbHVlKSB7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcbiAgICB0aGlzLnByb3BzLnN0YXJ0RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMucmVjZWl2ZVByb3BzKG9sZFByb3BzLCB0aGlzLnByb3BzKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcHJvcHNEYXRhKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcyA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICAuLi52YWx1ZVxuICAgIH07XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG9uU2VsZWN0SGFzRGlzYWJsZURhdGUodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLm9uU2VsZWN0SGFzRGlzYWJsZURhdGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb25MYXlvdXQodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLm9uTGF5b3V0ID0gdmFsdWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWNhbGVuZGFyJykgYW1DYWxlbmRhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGF0ZS1waWNrZXInKSBkYXRlUGlja2VyOiBib29sZWFuID0gdHJ1ZTtcblxuICBnZW5Nb250aENvbXBvbmVudCA9IChkYXRhPzogTW9kZWxzLk1vbnRoRGF0YSkgPT4ge1xuICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgIHJldHVybiB7XG4gICAgICBtb250aERhdGE6IGRhdGEsXG4gICAgICBsb2NhbGU6IHRoaXMucHJvcHMubG9jYWxlLFxuICAgICAgcm93U2l6ZTogdGhpcy5wcm9wcy5yb3dTaXplLFxuICAgICAgb25DZWxsQ2xpY2s6IHRoaXMuYmFzZU9uQ2VsbENsaWNrLFxuICAgICAgZ2V0RGF0ZUV4dHJhOiB0aGlzLnByb3BzLmdldERhdGVFeHRyYSxcbiAgICAgIHJlZjogZG9tID0+IHtcbiAgICAgICAgZGF0YS5jb21wb25lbnRSZWYgPSBkb20gfHwgZGF0YS5jb21wb25lbnRSZWYgfHwgdW5kZWZpbmVkO1xuICAgICAgICBkYXRhLnVwZGF0ZUxheW91dCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbXB1dGVIZWlnaHQoZGF0YSwgZG9tKTtcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YS51cGRhdGVMYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29tcHV0ZUhlaWdodCA9IChkYXRhOiBNb2RlbHMuTW9udGhEYXRhLCBzaW5nbGVNb250aCkgPT4ge1xuICAgIGlmIChzaW5nbGVNb250aCAmJiBzaW5nbGVNb250aC53cmFwcGVyRGl2RE9NKSB7XG4gICAgICBpZiAoIWRhdGEuaGVpZ2h0ICYmICFzaW5nbGVNb250aC53cmFwcGVyRGl2RE9NLmNsaWVudEhlaWdodCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29tcHV0ZUhlaWdodChkYXRhLCBzaW5nbGVNb250aCksIDUwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRhdGEuaGVpZ2h0ID0gc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTS5jbGllbnRIZWlnaHQgfHwgZGF0YS5oZWlnaHQgfHwgMDtcbiAgICAgIGRhdGEueSA9IHNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00ub2Zmc2V0VG9wIHx8IGRhdGEueSB8fCAwO1xuICAgIH1cbiAgfVxuXG4gIHNldExheW91dCA9IChkb206IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgaWYgKGRvbSkge1xuICAgICAgY29uc3QgeyBvbkxheW91dCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIG9uTGF5b3V0ICYmIG9uTGF5b3V0KGRvbS5jbGllbnRIZWlnaHQpO1xuXG4gICAgICBjb25zdCBzY3JvbGxIYW5kbGVyID0gdGhpcy5jcmVhdGVPblNjcm9sbCgpO1xuICAgICAgZG9tLm9uc2Nyb2xsID0gZXZ0ID0+IHtcbiAgICAgICAgc2Nyb2xsSGFuZGxlcih7XG4gICAgICAgICAgY2xpZW50OiBkb20uY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGZ1bGw6IChldnQuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIHRvcDogKGV2dC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHNldFBhbmVsID0gKGRvbTogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICB0aGlzLl9wYW5lbCA9IGRvbTtcbiAgfVxuXG4gIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgIHRoaXMuX2xhc3RZID0gZXZlbnQudG91Y2hlc1swXS5zY3JlZW5ZO1xuICAgIHRoaXMuX2RlbHRhID0gdGhpcy5faW5pdERlbHRhO1xuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBlbGUgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IGlzUmVhY2hUb3AgPSBlbGUuc2Nyb2xsVG9wID09PSAwO1xuXG4gICAgaWYgKGlzUmVhY2hUb3ApIHtcbiAgICAgIHRoaXMuX2RlbHRhID0gZXZlbnQudG91Y2hlc1swXS5zY3JlZW5ZIC0gdGhpcy5fbGFzdFk7XG4gICAgICBpZiAodGhpcy5fZGVsdGEgPiAwKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLl9kZWx0YSA+IDgwKSB7XG4gICAgICAgICAgdGhpcy5fZGVsdGEgPSA4MDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRUcmFuc2Zvcm0odGhpcy5fcGFuZWwuc3R5bGUsIGB0cmFuc2xhdGUzZCgwLCR7dGhpcy5fZGVsdGF9cHgsMClgKTtcbiAgICB9XG4gIH1cblxuICBvblRvdWNoRW5kKGV2ZW50KSB7XG4gICAgdGhpcy5vbkZpbmlzaCgpO1xuICB9XG5cbiAgb25GaW5pc2goKSB7XG4gICAgaWYgKHRoaXMuX2RlbHRhID4gNDAgJiYgdGhpcy5jYW5Mb2FkUHJldigpKSB7XG4gICAgICB0aGlzLmdlbk1vbnRoRGF0YSh0aGlzLnN0YXRlLm1vbnRoc1swXS5maXJzdERhdGUsIC0xKTtcblxuICAgICAgdGhpcy52aXNpYmxlTW9udGggPSB0aGlzLnN0YXRlLm1vbnRocy5zbGljZSgwLCB0aGlzLnByb3BzLmluaXRhbE1vbnRocyk7XG5cbiAgICAgIHRoaXMuc3RhdGUubW9udGhzLmZvckVhY2gobSA9PiB7XG4gICAgICAgIG0udXBkYXRlTGF5b3V0ICYmIG0udXBkYXRlTGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRUcmFuc2Zvcm0odGhpcy5fcGFuZWwuc3R5bGUsIGB0cmFuc2xhdGUzZCgwLDAsMClgKTtcbiAgICB0aGlzLnNldFRyYW5zaXRpb24odGhpcy5fcGFuZWwuc3R5bGUsICcuM3MnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3BhbmVsICYmIHRoaXMuc2V0VHJhbnNpdGlvbih0aGlzLl9wYW5lbC5zdHlsZSwgJycpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICBzZXRUcmFuc2Zvcm0obm9kZVN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgICBub2RlU3R5bGUudHJhbnNmb3JtID0gdmFsdWU7XG4gICAgbm9kZVN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0VHJhbnNpdGlvbihub2RlU3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIHZhbHVlOiBhbnkpIHtcbiAgICBub2RlU3R5bGUudHJhbnNpdGlvbiA9IHZhbHVlO1xuICAgIG5vZGVTdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gdmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnNldExheW91dCh0aGlzLmxheW91dERvbS5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnNldFBhbmVsKHRoaXMucGFuZWxEb20ubmF0aXZlRWxlbWVudCk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgb2tUZXh0OiAnT2snLFxuICBkaXNtaXNzVGV4dDogJ0NhbmNlbCcsXG4gIGV4dHJhOiAncGxlYXNlIHNlbGVjdCcsXG59O1xuIiwiLy8gaW1wb3J0ICBEYXRlUGlja2VyTG9jYWxlIGZyb20gJ3JtYy1kYXRlLXBpY2tlci9saWIvbG9jYWxlL2VuX1VTJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBva1RleHQ6ICdPSycsXG4gIGRpc21pc3NUZXh0OiAnQ2FuY2VsJyxcbiAgZXh0cmE6ICdwbGVhc2Ugc2VsZWN0JyxcbiAgLy8gRGF0ZVBpY2tlckxvY2FsZSxcbiAgeWVhcjogJycsXG4gIG1vbnRoOiAnJyxcbiAgZGF5OiAnJyxcbiAgaG91cjogJycsXG4gIG1pbnV0ZTogJycsXG4gIGFtOiAnQU0nLFxuICBwbTogJ1BNJ1xufTtcbiIsIi8vIGltcG9ydCAgRGF0ZVBpY2tlckxvY2FsZSBmcm9tICdybWMtZGF0ZS1waWNrZXIvbGliL2xvY2FsZS9lbl9VUyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb2tUZXh0OiAnT0snLFxuICBkaXNtaXNzVGV4dDogJ0NhbmNlbCcsXG4gIGV4dHJhOiAncGxlYXNlIHNlbGVjdCcsXG4gIC8vIERhdGVQaWNrZXJMb2NhbGUsXG4gIHllYXI6ICcnLFxuICBtb250aDogJycsXG4gIGRheTogJycsXG4gIGhvdXI6ICcnLFxuICBtaW51dGU6ICcnLFxuICBhbTogJ0FNJyxcbiAgcG06ICdQTSdcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIG9rVGV4dDogJ09rJyxcbiAgY2FuY2VsVGV4dDogJ0NhbmNlbCcsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBjYW5jZWxUZXh0OiAnQ2FuY2VsJyxcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpcm1MYWJlbDogJ0RvbmUnLFxuICBiYWNrc3BhY2VMYWJlbDogJ0JhY2tzcGFjZScsXG4gIGNhbmNlbEtleWJvYXJkTGFiZWw6ICdDYW5jZWxLZXlib2FyZCcsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBwcmV2VGV4dDogJ1ByZXYnLFxuICBuZXh0VGV4dDogJ05leHQnLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgYWN0aXZhdGVUZXh0OiAnUmVmcmVzaCBpbW1lZGlhdGVseSBhZnRlciByZWxlYXNlJyxcbiAgZGVhY3RpdmF0ZVRleHQ6ICdQdWxsIGRvd24gdG8gcmVmcmVzaCcsXG4gIGZpbmlzaFRleHQ6ICdGaW5pc2ggcmVmcmVzaCcsXG59O1xuIiwiaW1wb3J0IFBpY2tlciBmcm9tICcuLi8uLi9waWNrZXIvbG9jYWxlL2VuX1VTJztcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4uLy4uL2RhdGUtcGlja2VyL2xvY2FsZS9lbl9VUyc7XG5pbXBvcnQgRGF0ZVBpY2tlclZpZXcgZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXItdmlldy9sb2NhbGUvZW5fVVMnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vLi4vbWVudS9sb2NhbGUvZW5fVVMnO1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4uLy4uL2NhbGVuZGFyL2xvY2FsZS9lbl9VUyc7XG5pbXBvcnQgU2VhcmNoQmFyIGZyb20gJy4uLy4uL3NlYXJjaC1iYXIvbG9jYWxlL2VuX1VTJztcbmltcG9ydCBJbnB1dEl0ZW0gZnJvbSAnLi4vLi4vaW5wdXQtaXRlbS9sb2NhbGUvZW5fVVMnO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbi9sb2NhbGUvZW5fVVMnO1xuaW1wb3J0IFB1bGxUb1JlZnJlc2ggZnJvbSAnLi4vLi4vcHVsbC10by1yZWZyZXNoL2xvY2FsZS9lbl9VUyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbG9jYWxlOiAnZW5fVVMnLFxuICBQaWNrZXIsXG4gIERhdGVQaWNrZXIsXG4gIERhdGVQaWNrZXJWaWV3LFxuICBNZW51LFxuICBDYWxlbmRhcixcbiAgU2VhcmNoQmFyLFxuICBJbnB1dEl0ZW0sXG4gIFBhZ2luYXRpb24sXG4gIFB1bGxUb1JlZnJlc2hcbn07IiwiZXhwb3J0IGRlZmF1bHQge1xuICBva1RleHQ6ICfDkMKew5DCuicsXG4gIGRpc21pc3NUZXh0OiAnw5DCnsORwoLDkMK8w5DCtcOQwr3DkMKwJyxcbiAgZXh0cmE6ICcnLFxufTtcbiIsIi8vIGltcG9ydCBEYXRlUGlja2VyTG9jYWxlIGZyb20gJ3JtYy1kYXRlLXBpY2tlci9saWIvbG9jYWxlL2VuX1VTJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBva1RleHQ6ICfDkMKew5DCuicsXG4gIGRpc21pc3NUZXh0OiAnw5DCnsORwoLDkMK8w5DCtcOQwr3DkMKwJyxcbiAgZXh0cmE6ICcnLFxuICAvLyBEYXRlUGlja2VyTG9jYWxlLFxuICB5ZWFyOiAnJyxcbiAgbW9udGg6ICcnLFxuICBkYXk6ICcnLFxuICBob3VyOiAnJyxcbiAgbWludXRlOiAnJyxcbiAgYW06ICdBTScsXG4gIHBtOiAnUE0nXG59O1xuIiwiLy8gaW1wb3J0IERhdGVQaWNrZXJMb2NhbGUgZnJvbSAncm1jLWRhdGUtcGlja2VyL2xpYi9sb2NhbGUvZW5fVVMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9rVGV4dDogJ8OQwp7DkMK6JyxcbiAgZGlzbWlzc1RleHQ6ICfDkMKew5HCgsOQwrzDkMK1w5DCvcOQwrAnLFxuICBleHRyYTogJycsXG4gIC8vIERhdGVQaWNrZXJMb2NhbGUsXG4gIHllYXI6ICcnLFxuICBtb250aDogJycsXG4gIGRheTogJycsXG4gIGhvdXI6ICcnLFxuICBtaW51dGU6ICcnLFxuICBhbTogJ0FNJyxcbiAgcG06ICdQTSdcbn07IiwiZXhwb3J0IGRlZmF1bHQge1xuICBva1RleHQ6ICfDkMKew5DCuicsXG4gIGNhbmNlbFRleHQ6ICfDkMKew5HCgsOQwrzDkMK1w5DCvcOQwrAnLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgY2FuY2VsVGV4dDogJ8OQwp7DkcKCw5DCvMOQwrXDkMK9w5DCsCcsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBjb25maXJtTGFiZWw6ICfDkMKew5DCuicsXG4gIGJhY2tzcGFjZUxhYmVsOiAnw5DCssOQwr7DkMK3w5DCssORwoDDkMKww5HCgiDDkMK9w5DCsCDDkMK+w5DCtMOQwr3DkcKDIMOQwr/DkMK+w5DCt8OQwrjDkcKGw5DCuMORwo4nLFxuICBjYW5jZWxLZXlib2FyZExhYmVsOiAnw5DCnsORwoLDkMK8w5DCtcOQwr3DkMK4w5HCgsORwowgw5DCusOQwrvDkMKww5DCssOQwrjDkMKww5HCgsORwoPDkcKAw5HCgycsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBwcmV2VGV4dDogJ8OQwp3DkMKww5DCt8OQwrDDkMK0JyxcbiAgbmV4dFRleHQ6ICfDkMKSw5DCv8OQwrXDkcKAw5HCkcOQwrQnLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgYWN0aXZhdGVUZXh0OiAnw5DCnsOQwrHDkMK9w5DCvsOQwrLDkMK4w5HCgsORwowgw5HCgcORwoDDkMKww5DCt8ORwoMgw5DCv8OQwr7DkcKBw5DCu8OQwrUgw5DCssORwovDkMK/w5HCg8ORwoHDkMK6w5DCsCcsXG4gIGRlYWN0aXZhdGVUZXh0OiAnw5DCn8OQwr7DkcKCw5HCj8OQwr3DkMK4w5HCgsOQwrUgw5DCssOQwr3DkMK4w5DCtywgw5HCh8ORwoLDkMK+w5DCscORwosgw5DCvsOQwrHDkMK9w5DCvsOQwrLDkMK4w5HCgsORwownLFxuICBmaW5pc2hUZXh0OiAnw5DCl8OQwrDDkMKyw5DCtcORwoDDkcKIw5DCuMORwoLDkcKMIMOQwr7DkMKxw5DCvcOQwr7DkMKyw5DCu8OQwrXDkMK9w5DCuMOQwrUnLFxufTtcbiIsImltcG9ydCBQaWNrZXIgZnJvbSAnLi4vLi4vcGlja2VyL2xvY2FsZS9ydV9SVSc7XG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci9sb2NhbGUvcnVfUlUnO1xuaW1wb3J0IERhdGVQaWNrZXJWaWV3IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyLXZpZXcvbG9jYWxlL3J1X1JVJztcbmltcG9ydCBNZW51IGZyb20gJy4uLy4uL21lbnUvbG9jYWxlL3J1X1JVJztcbi8vIGltcG9ydCBDYWxlbmRhciBmcm9tICcuLi8uLi9jYWxlbmRhci9sb2NhbGUvcnVfUlUnO1xuaW1wb3J0IFNlYXJjaEJhciBmcm9tICcuLi8uLi9zZWFyY2gtYmFyL2xvY2FsZS9ydV9SVSc7XG5pbXBvcnQgSW5wdXRJdGVtIGZyb20gJy4uLy4uL2lucHV0LWl0ZW0vbG9jYWxlL3J1X1JVJztcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJy4uLy4uL3BhZ2luYXRpb24vbG9jYWxlL3J1X1JVJztcbmltcG9ydCBQdWxsVG9SZWZyZXNoIGZyb20gJy4uLy4uL3B1bGwtdG8tcmVmcmVzaC9sb2NhbGUvcnVfUlUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvY2FsZTogJ3J1X1JVJyxcbiAgUGlja2VyLFxuICBEYXRlUGlja2VyLFxuICBEYXRlUGlja2VyVmlldyxcbiAgTWVudSxcbiAgLy8gQ2FsZW5kYXIsXG4gIFNlYXJjaEJhcixcbiAgSW5wdXRJdGVtLFxuICBQYWdpbmF0aW9uLFxuICBQdWxsVG9SZWZyZXNoXG59OyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgb2tUZXh0OiAnT2snLFxuICBkaXNtaXNzVGV4dDogJ0F2YnJ5dCcsXG4gIGV4dHJhOiAndsODwqRubGlnZW4gdsODwqRsaicsXG59O1xuIiwiLy8gaW1wb3J0IERhdGVQaWNrZXJMb2NhbGUgZnJvbSAncm1jLWRhdGUtcGlja2VyL2xpYi9sb2NhbGUvZW5fVVMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9rVGV4dDogJ09rJyxcbiAgZGlzbWlzc1RleHQ6ICdBdmJyeXQnLFxuICBleHRyYTogJ3bDg8KkbmxpZ2VuIHbDg8KkbGonLFxuICAvLyBEYXRlUGlja2VyTG9jYWxlLFxuICB5ZWFyOiAnJyxcbiAgbW9udGg6ICcnLFxuICBkYXk6ICcnLFxuICBob3VyOiAnJyxcbiAgbWludXRlOiAnJyxcbiAgYW06ICdBTScsXG4gIHBtOiAnUE0nXG59O1xuIiwiLy8gaW1wb3J0IERhdGVQaWNrZXJMb2NhbGUgZnJvbSAncm1jLWRhdGUtcGlja2VyL2xpYi9sb2NhbGUvZW5fVVMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9rVGV4dDogJ09rJyxcbiAgZGlzbWlzc1RleHQ6ICdBdmJyeXQnLFxuICBleHRyYTogJ3bDg8KkbmxpZ2VuIHbDg8KkbGonLFxuICAvLyBEYXRlUGlja2VyTG9jYWxlLFxuICB5ZWFyOiAnJyxcbiAgbW9udGg6ICcnLFxuICBkYXk6ICcnLFxuICBob3VyOiAnJyxcbiAgbWludXRlOiAnJyxcbiAgYW06ICdBTScsXG4gIHBtOiAnUE0nXG59OyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgb2tUZXh0OiAnT2snLFxuICBjYW5jZWxUZXh0OiAnQXZicnl0Jyxcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGNhbmNlbFRleHQ6ICdBdmJyeXQnLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlybUxhYmVsOiAnT2snLFxuICBiYWNrc3BhY2VMYWJlbDogJ0JhY2tzcGFjZScsXG4gIGNhbmNlbEtleWJvYXJkTGFiZWw6ICdDYW5jZWxLZXlib2FyZCcsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBwcmV2VGV4dDogJ0bDg8K2cmVnJyxcbiAgbmV4dFRleHQ6ICdOw4PCpHN0YScsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBhY3RpdmF0ZVRleHQ6ICdVcHBkYXRlcmEgb21lZGVsYmFydCBlZnRlciB1dHNsw4PCpHBwJyxcbiAgZGVhY3RpdmF0ZVRleHQ6ICdEcmEgbmVyIGbDg8K2ciBhdHQgdXBwZGF0ZXJhJyxcbiAgZmluaXNoVGV4dDogJ0F2c2x1dGEgdXBwZGF0ZXJpbmdlbicsXG59O1xuIiwiaW1wb3J0IFBpY2tlciBmcm9tICcuLi8uLi9waWNrZXIvbG9jYWxlL3N2X1NFJztcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4uLy4uL2RhdGUtcGlja2VyL2xvY2FsZS9zdl9TRSc7XG5pbXBvcnQgRGF0ZVBpY2tlclZpZXcgZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXItdmlldy9sb2NhbGUvc3ZfU0UnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vLi4vbWVudS9sb2NhbGUvc3ZfU0UnO1xuLy8gaW1wb3J0IENhbGVuZGFyIGZyb20gJy4uLy4uL2NhbGVuZGFyL2xvY2FsZS9zdl9TRSc7XG5pbXBvcnQgU2VhcmNoQmFyIGZyb20gJy4uLy4uL3NlYXJjaC1iYXIvbG9jYWxlL3N2X1NFJztcbmltcG9ydCBJbnB1dEl0ZW0gZnJvbSAnLi4vLi4vaW5wdXQtaXRlbS9sb2NhbGUvc3ZfU0UnO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbi9sb2NhbGUvc3ZfU0UnO1xuaW1wb3J0IFB1bGxUb1JlZnJlc2ggZnJvbSAnLi4vLi4vcHVsbC10by1yZWZyZXNoL2xvY2FsZS9zdl9TRSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbG9jYWxlOiAnc3ZfU0UnLFxuICBQaWNrZXIsXG4gIERhdGVQaWNrZXIsXG4gIERhdGVQaWNrZXJWaWV3LFxuICBNZW51LFxuICAvLyBDYWxlbmRhcixcbiAgU2VhcmNoQmFyLFxuICBJbnB1dEl0ZW0sXG4gIFBhZ2luYXRpb24sXG4gIFB1bGxUb1JlZnJlc2hcbn07IiwiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9kYXRlL0RhdGFUeXBlcyc7XG5pbXBvcnQgeyB6aF9DTiwgZW5fVVMgfSBmcm9tICcuLi8uLi9sb2NhbGUtcHJvdmlkZXIvbGFuZ3VhZ2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wc1R5cGUge1xuICBsb2NhbGU6IE1vZGVscy5Mb2NhbGU7XG4gIHByZWZpeENscz86IHN0cmluZztcbiAgcGlja2VyUHJlZml4Q2xzPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogRGF0ZTtcbiAgdmFsdWU/OiBEYXRlO1xuICBvblZhbHVlQ2hhbmdlPzogKHRpbWU6IERhdGUpID0+IHZvaWQ7XG4gIG1vZGU/OiBzdHJpbmc7XG4gIG1pbkRhdGU/OiBEYXRlO1xuICBtYXhEYXRlPzogRGF0ZTtcbiAgY2xpZW50SGVpZ2h0PzogbnVtYmVyO1xuICBkYXRlUGlja2VyVmlld0xvY2FsZT86IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQ2FsZW5kYXJUaW1lUGlja2VyLCBuem0tY2FsZW5kYXItdGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCB7XG4gIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtaW5EYXRlOiBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwKSxcbiAgICBtYXhEYXRlOiBuZXcgRGF0ZSg5OTk5LCAxMSwgMzEsIDIzLCA1OSwgNTkpLFxuICAgIGRlZmF1bHRWYWx1ZTogbmV3IERhdGUoMjAwMCwgMSwgMSwgOCksXG4gICAgbW9kZTogJ3RpbWUnLFxuICAgIGRhdGVQaWNrZXJWaWV3TG9jYWxlOiB6aF9DTlxuICB9IGFzIFByb3BzVHlwZTtcblxuICBwcm9wcyA9IHtcbiAgICBtaW5EYXRlOiBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwKSxcbiAgICBtYXhEYXRlOiBuZXcgRGF0ZSg5OTk5LCAxMSwgMzEsIDIzLCA1OSwgNTkpLFxuICAgIGRlZmF1bHRWYWx1ZTogbmV3IERhdGUoMjAwMCwgMSwgMSwgOCksXG4gICAgbW9kZTogJ3RpbWUnLFxuICAgIGRhdGVQaWNrZXJWaWV3TG9jYWxlOiB6aF9DTlxuICB9IGFzIFByb3BzVHlwZTtcblxuICBzZWxmSGVpZ2h0OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IHByb3BzRGF0YSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgLi4udmFsdWVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMucHJvcHMubG9jYWxlICYmIHRoaXMucHJvcHMubG9jYWxlLnRvZGF5ID09PSAnVG9kYXknKSB7XG4gICAgICB0aGlzLnByb3BzLmRhdGVQaWNrZXJWaWV3TG9jYWxlID0gZW5fVVM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuZGF0ZVBpY2tlclZpZXdMb2NhbGUgPSB6aF9DTjtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHRpdGxlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy50aXRsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcHJlZml4Q2xzKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5wcmVmaXhDbHMgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGlja2VyUHJlZml4Q2xzKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5waWNrZXJQcmVmaXhDbHMgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY2xpZW50SGVpZ2h0KHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5jbGllbnRIZWlnaHQgPSB2YWx1ZTtcbiAgICBjb25zdCBoZWlnaHQgPSAodmFsdWUgJiYgKHZhbHVlICogMykgLyA4IC0gNTIpIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB0aGlzLnNlbGZIZWlnaHQgPSAoaGVpZ2h0ID4gMTY0IHx8IGhlaWdodCA8IDAgPyAxNjQgOiBoZWlnaHQpICsgJ3B4JztcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb25WYWx1ZUNoYW5nZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25WYWx1ZUNoYW5nZSA9IHZhbHVlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aW1lLXBpY2tlcicpXG4gIHRpbWVQaWNrZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBvbkRhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgIGNvbnN0IHsgb25WYWx1ZUNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBvblZhbHVlQ2hhbmdlICYmIG9uVmFsdWVDaGFuZ2UoZGF0ZSk7XG4gIH1cblxuICBnZXRNaW5UaW1lKGRhdGU/OiBEYXRlKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMucHJvcHMubWluRGF0ZSBhcyBEYXRlO1xuICAgIGlmIChcbiAgICAgICFkYXRlIHx8XG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPiBtaW5EYXRlLmdldEZ1bGxZZWFyKCkgfHxcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSA+IG1pbkRhdGUuZ2V0TW9udGgoKSB8fFxuICAgICAgZGF0ZS5nZXREYXRlKCkgPiBtaW5EYXRlLmdldERhdGUoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFByb3BzLm1pbkRhdGU7XG4gICAgfVxuICAgIHJldHVybiBtaW5EYXRlO1xuICB9XG5cbiAgZ2V0TWF4VGltZShkYXRlPzogRGF0ZSkge1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLnByb3BzLm1heERhdGUgYXMgRGF0ZTtcbiAgICBpZiAoXG4gICAgICAhZGF0ZSB8fFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpIDwgbWF4RGF0ZS5nZXRGdWxsWWVhcigpIHx8XG4gICAgICBkYXRlLmdldE1vbnRoKCkgPCBtYXhEYXRlLmdldE1vbnRoKCkgfHxcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpIDwgbWF4RGF0ZS5nZXREYXRlKClcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQcm9wcy5tYXhEYXRlO1xuICAgIH1cbiAgICByZXR1cm4gbWF4RGF0ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4uL2RhdGUvRGF0YVR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQ2FsZW5kYXJXZWVrUGFuZWwsIG56bS1jYWxlbmRhci13ZWVrLXBhbmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dlZWstcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFdlZWtQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICB3ZWVrOiBzdHJpbmdbXSA9IFsnw6bCl8KlJywgJ8OkwrjCgCcsICfDpMK6wownLCAnw6TCuMKJJywgJ8OlwpvCmycsICfDpMK6wpQnLCAnw6XChcKtJ107XG5cbiAgcHJpdmF0ZSBfbG9jYWxlOiBNb2RlbHMuTG9jYWxlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2NhbGUodmFsdWUpIHtcbiAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2Vlay1wYW5lbCcpIHdlZWtQYW5lbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy53ZWVrID0gdGhpcy5fbG9jYWxlLndlZWs7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4uL3V0aWwvaW5kZXgnO1xuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi4vZGF0ZS9EYXRhVHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1QYW5lbFByb3BzVHlwZSB7XG4gIHR5cGU/OiAnb25lJyB8ICdyYW5nZSc7XG4gIGxvY2FsZTogTW9kZWxzLkxvY2FsZTtcbiAgb25seUNvbmZpcm0/OiBib29sZWFuO1xuICBkaXNhYmxlQnRuPzogYm9vbGVhbjtcbiAgc3RhcnREYXRlVGltZT86IERhdGU7XG4gIGVuZERhdGVUaW1lPzogRGF0ZTtcbiAgZm9ybWF0U3RyPzogc3RyaW5nO1xuICBvbkNvbmZpcm06ICgpID0+IHZvaWQ7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0NhbGVuZGFyQ29uZmlybVBhbmVsLCBuem0tY2FsZW5kYXItY29uZmlybS1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maXJtLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcblxuZXhwb3J0IGNsYXNzIENvbmZpcm1QYW5lbENvbXBvbmVudCB7XG4gIHByb3BzID0ge1xuICAgIGZvcm1hdFN0cjogJ3l5eXktTU0tZGQgaGg6bW0nXG4gIH0gYXMgQ29uZmlybVBhbmVsUHJvcHNUeXBlO1xuICBzdGFydFRpbWVTdHI6IHN0cmluZztcbiAgZW5kVGltZVN0cjogc3RyaW5nO1xuICBidG5DbHM6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBzZXQgcHJvcHNEYXRhKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcyA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICAuLi52YWx1ZVxuICAgIH07XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVCdG4odmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLmRpc2FibGVCdG4gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZm9ybWF0U3RyKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5mb3JtYXRTdHIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc3RhcnREYXRlVGltZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMuc3RhcnREYXRlVGltZSA9IHZhbHVlO1xuICAgIHRoaXMuZm9ybWF0VGltZSgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBlbmREYXRlVGltZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMuZW5kRGF0ZVRpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLmZvcm1hdFRpbWUoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb25Db25maXJtKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vbkNvbmZpcm0gPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY29uZmlybS1wYW5lbCcpIGNvbmZpcm1QYW5lOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZm9ybWF0VGltZSgpIHtcbiAgICBjb25zdCB7IHR5cGUsIGxvY2FsZSwgZGlzYWJsZUJ0biB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBzdGFydERhdGVUaW1lLCBlbmREYXRlVGltZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoc3RhcnREYXRlVGltZSAmJiBlbmREYXRlVGltZSAmJiArc3RhcnREYXRlVGltZSA+ICtlbmREYXRlVGltZSkge1xuICAgICAgY29uc3QgdG1wID0gc3RhcnREYXRlVGltZTtcbiAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBlbmREYXRlVGltZTtcbiAgICAgIGVuZERhdGVUaW1lID0gdG1wO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRUaW1lU3RyID0gc3RhcnREYXRlVGltZSA/IHRoaXMuc2VsZkZvcm1hdERhdGUoc3RhcnREYXRlVGltZSkgOiBsb2NhbGUubm9DaG9vc2U7XG4gICAgdGhpcy5lbmRUaW1lU3RyID0gZW5kRGF0ZVRpbWUgPyB0aGlzLnNlbGZGb3JtYXREYXRlKGVuZERhdGVUaW1lKSA6IGxvY2FsZS5ub0Nob29zZTtcbiAgICBsZXQgYnRuQ2xzID0gZGlzYWJsZUJ0biA/ICdidXR0b24gYnV0dG9uLWRpc2FibGUnIDogJ2J1dHRvbic7XG4gICAgaWYgKHR5cGUgPT09ICdvbmUnKSB7XG4gICAgICBidG5DbHMgKz0gJyBidXR0b24tZnVsbCc7XG4gICAgfVxuICAgIHRoaXMuYnRuQ2xzID0gYnRuQ2xzO1xuICB9XG5cbiAgdHJpZ2dlckNvbmZpcm0gPSAoKSA9PiB7XG4gICAgY29uc3QgeyBvbkNvbmZpcm0sIGRpc2FibGVCdG4gfSA9IHRoaXMucHJvcHM7XG4gICAgIWRpc2FibGVCdG4gJiYgb25Db25maXJtKCk7XG4gIH1cblxuICBzZWxmRm9ybWF0RGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgY29uc3QgeyBmb3JtYXRTdHIgPSAnJywgbG9jYWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBmb3JtYXREYXRlKGRhdGUsIGZvcm1hdFN0ciwgbG9jYWxlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBIb3N0QmluZGluZywgSW5wdXQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4uL2RhdGUvRGF0YVR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wc1R5cGUge1xuICBsb2NhbGU6IE1vZGVscy5Mb2NhbGU7XG4gIG1vbnRoRGF0YTogTW9kZWxzLk1vbnRoRGF0YTtcbiAgcm93U2l6ZT86ICdub3JtYWwnIHwgJ3hsJztcbiAgZ2V0RGF0ZUV4dHJhPzogKGRhdGU6IERhdGUpID0+IE1vZGVscy5FeHRyYURhdGE7XG4gIG9uQ2VsbENsaWNrPzogKGRhdGE6IE1vZGVscy5DZWxsRGF0YSwgbW9udGhEYXRhOiBNb2RlbHMuTW9udGhEYXRhKSA9PiB2b2lkO1xuICByZWY6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU2luZ2xlTW9udGgsIG56bS1zaW5nbGUtbW9udGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2luZ2xlLW1vbnRoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVNb250aENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3BzID0ge1xuICAgIHJvd1NpemU6ICdub3JtYWwnXG4gIH0gYXMgUHJvcHNUeXBlO1xuXG4gIHN0YXRlID0ge1xuICAgIHdlZWtDb21wb25lbnRzOiBbXVxuICB9O1xuICByZWY6IChkb20pID0+IHZvaWQ7XG4gIHdyYXBwZXJEaXZET006IEhUTUxEaXZFbGVtZW50IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zaW5nbGUtbW9udGgnKSBzaW5nbGVNb250aDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICBnZW5XZWVrID0gKHdlZWtzRGF0YTogTW9kZWxzLkNlbGxEYXRhW10sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB7IGdldERhdGVFeHRyYSwgbW9udGhEYXRhLCBvbkNlbGxDbGljaywgbG9jYWxlLCByb3dTaXplIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCByb3dDbHMgPSAncm93JztcbiAgICBsZXQgd2Vla3NEYXRhTGlzdCA9IFtdO1xuICAgIGlmIChyb3dTaXplID09PSAneGwnKSB7XG4gICAgICByb3dDbHMgKz0gJyByb3cteGwnO1xuICAgIH1cblxuICAgIHdlZWtzRGF0YS5mb3JFYWNoKChkYXksIGRheU9mV2VlaykgPT4ge1xuICAgICAgY29uc3QgZXh0cmEgPSAoZ2V0RGF0ZUV4dHJhICYmIGdldERhdGVFeHRyYShuZXcgRGF0ZShkYXkudGljaykpKSB8fCB7fTtcbiAgICAgIGxldCBpbmZvID0gZXh0cmEuaW5mbztcbiAgICAgIGNvbnN0IGRpc2FibGUgPSBleHRyYS5kaXNhYmxlIHx8IGRheS5vdXRPZkRhdGU7XG5cbiAgICAgIGxldCBjbHMgPSAnZGF0ZSc7XG4gICAgICBsZXQgbENscyA9ICdsZWZ0JztcbiAgICAgIGxldCByQ2xzID0gJ3JpZ2h0JztcbiAgICAgIGxldCBpbmZvQ2xzID0gJ2luZm8nO1xuXG4gICAgICBpZiAoZGF5T2ZXZWVrID09PSAwIHx8IGRheU9mV2VlayA9PT0gNikge1xuICAgICAgICBjbHMgKz0gJyBncmV5JztcbiAgICAgIH1cblxuICAgICAgaWYgKGRpc2FibGUpIHtcbiAgICAgICAgY2xzICs9ICcgZGlzYWJsZSc7XG4gICAgICB9IGVsc2UgaWYgKGluZm8pIHtcbiAgICAgICAgY2xzICs9ICcgaW1wb3J0YW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKGRheS5zZWxlY3RlZCkge1xuICAgICAgICBjbHMgKz0gJyBkYXRlLXNlbGVjdGVkJztcbiAgICAgICAgbGV0IHN0eWxlVHlwZSA9IGRheS5zZWxlY3RlZDtcbiAgICAgICAgc3dpdGNoIChzdHlsZVR5cGUpIHtcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLk9ubHk6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luO1xuICAgICAgICAgICAgaW5mb0NscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNb2RlbHMuU2VsZWN0VHlwZS5BbGw6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luX292ZXI7XG4gICAgICAgICAgICBpbmZvQ2xzICs9ICcgZGF0ZS1zZWxlY3RlZCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuU3RhcnQ6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luO1xuICAgICAgICAgICAgaW5mb0NscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgaWYgKGRheU9mV2VlayA9PT0gNiB8fCBkYXkuaXNMYXN0T2ZNb250aCkge1xuICAgICAgICAgICAgICBzdHlsZVR5cGUgPSBNb2RlbHMuU2VsZWN0VHlwZS5BbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLk1pZGRsZTpcbiAgICAgICAgICAgIGlmIChkYXlPZldlZWsgPT09IDAgfHwgZGF5LmlzRmlyc3RPZk1vbnRoKSB7XG4gICAgICAgICAgICAgIGlmIChkYXkuaXNMYXN0T2ZNb250aCB8fCBkYXlPZldlZWsgPT09IDYpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVR5cGUgPSBNb2RlbHMuU2VsZWN0VHlwZS5BbGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVUeXBlID0gTW9kZWxzLlNlbGVjdFR5cGUuU3RhcnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZXZWVrID09PSA2IHx8IGRheS5pc0xhc3RPZk1vbnRoKSB7XG4gICAgICAgICAgICAgIHN0eWxlVHlwZSA9IE1vZGVscy5TZWxlY3RUeXBlLkVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuRW5kOlxuICAgICAgICAgICAgaW5mbyA9IGxvY2FsZS5vdmVyO1xuICAgICAgICAgICAgaW5mb0NscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgaWYgKGRheU9mV2VlayA9PT0gMCB8fCBkYXkuaXNGaXJzdE9mTW9udGgpIHtcbiAgICAgICAgICAgICAgc3R5bGVUeXBlID0gTW9kZWxzLlNlbGVjdFR5cGUuQWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHN0eWxlVHlwZSkge1xuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuU2luZ2xlOlxuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuT25seTpcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLkFsbDpcbiAgICAgICAgICAgIGNscyArPSAnIHNlbGVjdGVkLXNpbmdsZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLlN0YXJ0OlxuICAgICAgICAgICAgY2xzICs9ICcgc2VsZWN0ZWQtc3RhcnQnO1xuICAgICAgICAgICAgckNscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNb2RlbHMuU2VsZWN0VHlwZS5NaWRkbGU6XG4gICAgICAgICAgICBjbHMgKz0gJyBzZWxlY3RlZC1taWRkbGUnO1xuICAgICAgICAgICAgbENscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgckNscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNb2RlbHMuU2VsZWN0VHlwZS5FbmQ6XG4gICAgICAgICAgICBjbHMgKz0gJyBzZWxlY3RlZC1lbmQnO1xuICAgICAgICAgICAgbENscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2Vla3NEYXRhTGlzdFtkYXlPZldlZWtdID0ge1xuICAgICAgICBsQ2xzLFxuICAgICAgICBjbHMsXG4gICAgICAgIGRheSxcbiAgICAgICAgckNscyxcbiAgICAgICAgaW5mb0NscyxcbiAgICAgICAgaW5mbyxcbiAgICAgICAgZXh0cmEsXG4gICAgICAgIGRpc2FibGUsXG4gICAgICAgIG9uQ2VsbENsaWNrOiBvbkNlbGxDbGljayxcbiAgICAgICAgbW9udGhEYXRhXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZS53ZWVrQ29tcG9uZW50c1tpbmRleF0gPSB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICByb3dDbHMsXG4gICAgICB3ZWVrc0RhdGFMaXN0XG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVdlZWtzID0gKG1vbnRoRGF0YT86IE1vZGVscy5Nb250aERhdGEpID0+IHtcbiAgICAobW9udGhEYXRhIHx8IHRoaXMucHJvcHMubW9udGhEYXRhKS53ZWVrcy5mb3JFYWNoKCh3ZWVrLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5nZW5XZWVrKHdlZWssIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFdhcnBwZXIgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIHRoaXMud3JhcHBlckRpdkRPTSA9IGRvbTtcbiAgfVxuXG4gIG9uQ2xpY2tDZWxsKGl0ZW0pIHtcbiAgICAhaXRlbS5kaXNhYmxlICYmIGl0ZW0ub25DZWxsQ2xpY2sgJiYgaXRlbS5vbkNlbGxDbGljayhpdGVtLmRheSwgaXRlbS5tb250aERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRXYXJwcGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5wcm9wcy5tb250aERhdGEud2Vla3MuZm9yRWFjaCgod2VlaywgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuZ2VuV2Vlayh3ZWVrLCBpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWYgPSB0aGlzLnByb3BzLnJlZjtcbiAgICB0aGlzLnJlZih0aGlzKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9kYXRlL0RhdGFUeXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcHNUeXBlIHtcbiAgbG9jYWxlOiBNb2RlbHMuTG9jYWxlO1xuICBvblNlbGVjdDogKHN0YXJ0RGF0ZT86IERhdGUsIGVuZERhdGU/OiBEYXRlKSA9PiB2b2lkO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYWxlbmRhclNob3J0Y3V0UGFuZWwsIG56bS1jYWxlbmRhci1zaG9ydGN1dC1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaG9ydGN1dC1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2hvcnRjdXRQYW5lbENvbXBvbmVudCB7XG4gIHByb3BzID0ge30gYXMgUHJvcHNUeXBlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2NhbGUodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzLmxvY2FsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvblNlbGVjdCh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25TZWxlY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2hvcnRjdXQtcGFuZWwnKSBzaG9ydGN1dFBhbmVsOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgb25DbGljayA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IG9uU2VsZWN0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAndG9kYXknOlxuICAgICAgICBvblNlbGVjdChcbiAgICAgICAgICBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCksIDApLFxuICAgICAgICAgIG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIHRvZGF5LmdldERhdGUoKSwgMTIpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd5ZXN0ZXJkYXknOlxuICAgICAgICBvblNlbGVjdChcbiAgICAgICAgICBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkgLSAxLCAwKSxcbiAgICAgICAgICBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkgLSAxLCAxMilcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xhc3R3ZWVrJzpcbiAgICAgICAgb25TZWxlY3QoXG4gICAgICAgICAgbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpIC0gNiwgMCksXG4gICAgICAgICAgbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpLCAxMilcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xhc3Rtb250aCc6XG4gICAgICAgIG9uU2VsZWN0KFxuICAgICAgICAgIG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIHRvZGF5LmdldERhdGUoKSAtIDI5LCAwKSxcbiAgICAgICAgICBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCksIDEyKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgemhfQ04gfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbGFuZ3VhZ2VzJztcbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVBpY2tlck9wdGlvbnNJbnRlcmZhY2Uge1xuICBtb2RlOiBzdHJpbmc7XG4gIHZhbHVlOiBEYXRlO1xuICBtaW5EYXRlOiBEYXRlO1xuICBtYXhEYXRlOiBEYXRlO1xuICB1c2UxMkhvdXJzOiBib29sZWFuO1xuICBtaW51dGVTdGVwOiBOdW1iZXI7XG4gIGxvY2FsZTogYW55O1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgbWFzazogYm9vbGVhbjtcbiAgdGl0bGU6IHN0cmluZztcbiAgb2tUZXh0OiBzdHJpbmc7XG4gIGRpc21pc3NUZXh0OiBzdHJpbmc7XG4gIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJPcHRpb25zIGltcGxlbWVudHMgRGF0ZVBpY2tlck9wdGlvbnNJbnRlcmZhY2Uge1xuICBtb2RlID0gJ2RhdGUnO1xuICB2YWx1ZSA9IG5ldyBEYXRlKCk7XG4gIG1pbkRhdGUgPSBuZXcgRGF0ZSgyMDAwLCA2LCAxLCAwLCAwLCAwKTtcbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKDIwMzAsIDEsIDEsIDIzLCA1OSwgNTkpO1xuICB1c2UxMkhvdXJzID0gZmFsc2U7XG4gIG1pbnV0ZVN0ZXAgPSAxO1xuICBkYXRhID0gW107XG4gIG1hc2s6IGJvb2xlYW4gPSB0cnVlO1xuICB0aXRsZSA9ICcnO1xuICBva1RleHQgPSAnw6fCocKuw6XCrsKaJztcbiAgZGlzbWlzc1RleHQgPSAnw6XCj8KWw6bCtsKIJztcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgbG9jYWxlO1xuICBhcHBlbmRUb0JvZHkgPSBmYWxzZTtcbiAgb25PazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uRGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGhpZGVQaWNrZXI6ICgpID0+IHZvaWQ7XG59XG4iLCJcbmV4cG9ydCBmdW5jdGlvbiBnZXRWZWxvY2l0eSgpIHtcbiAgcmV0dXJuICgobWluSW50ZXJ2YWwgPSAzMCwgbWF4SW50ZXJ2YWwgPSAxMDApID0+IHtcbiAgICBsZXQgX3RpbWUgPSAwO1xuICAgIGxldCBfeSA9IDA7XG4gICAgbGV0IF92ZWxvY2l0eSA9IDA7XG4gICAgY29uc3QgcmVjb3JkZXIgPSB7XG4gICAgICByZWNvcmQ6ICh5KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9ICtuZXcgRGF0ZSgpO1xuICAgICAgICBfdmVsb2NpdHkgPSAoeSAtIF95KSAvIChub3cgLSBfdGltZSk7XG4gICAgICAgIGlmIChub3cgLSBfdGltZSA+PSBtaW5JbnRlcnZhbCkge1xuICAgICAgICAgIF92ZWxvY2l0eSA9IG5vdyAtIF90aW1lIDw9IG1heEludGVydmFsID8gX3ZlbG9jaXR5IDogMDtcbiAgICAgICAgICBfeSA9IHk7XG4gICAgICAgICAgX3RpbWUgPSBub3c7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRWZWxvY2l0eTogKHkpID0+IHtcbiAgICAgICAgaWYgKHkgIT09IF95KSB7XG4gICAgICAgICAgcmVjb3JkZXIucmVjb3JkKHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdmVsb2NpdHk7XG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHJlY29yZGVyO1xuICB9KSgpO1xufSIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIE9uRGVzdHJveSxcbiAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvY2FsZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uL2xvY2FsZS1wcm92aWRlci9sb2NhbGUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyT3B0aW9ucyB9IGZyb20gJy4vZGF0ZS1waWNrZXItb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgKiBhcyB2ZWxvY2l0eSBmcm9tICcuLi9jb3JlL3V0aWwvdmVsb2NpdHknO1xuZXhwb3J0IHR5cGUgRGF0ZU1vZGUgPSAnZGF0ZScgfCAndGltZScgfCAnZGF0ZXRpbWUnIHwgJ3llYXInIHwgJ21vbnRoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnRGF0ZVBpY2tlciwgbnptLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICB0cmFuc2l0aW9uTmFtZTogc3RyaW5nID0gJ2FtLXNsaWRlLXVwLWVudGVyIGFtLXNsaWRlLXVwLWVudGVyLWFjdGl2ZSc7XG4gIG1hc2tUcmFuc2l0aW9uTmFtZTogc3RyaW5nID0gJ2FtLWZhZGUtZW50ZXIgYW0tZmFkZS1lbnRlci1hY3RpdmUnO1xuICBtb2RlU3dpdGNoOiBudW1iZXJbXSA9IFsxLCAxLCAxLCAxLCAxLCAxXTtcbiAgbG9jYWxNaW5EYXRlOiBhbnlbXSA9IFtdO1xuICBsb2NhbE1heERhdGU6IGFueVtdID0gW107XG4gIGN1cnJlbnRUaW1lOiBhbnlbXSA9IFtdO1xuICBpbmRleEFycmF5OiBhbnkgPSBbXTtcbiAgbWluX2RhdGU6IGFueVtdID0gW107XG4gIG1heF9kYXRlOiBhbnlbXSA9IFtdO1xuICBjdXJyZW50X3RpbWU6IGFueVtdID0gW1xuICAgIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxcbiAgICBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxLFxuICAgIG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLFxuICAgIG5ldyBEYXRlKCkuZ2V0SG91cnMoKSxcbiAgICBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKVxuICBdO1xuICBjbG9zOiBudW1iZXIgPSAwO1xuICByZXN1bHRBcnI6IGFueSA9IFtdO1xuICByZXN1bHREYXRlOiBEYXRlO1xuICBkYXRhOiBhbnlbXSA9IFtdO1xuICBkYXRhV2l0aFN0cjogYW55W10gPSBbXTtcbiAgc3RhcnRZOiBudW1iZXIgPSAwO1xuICBkaWZmZXJZOiBudW1iZXIgPSAwO1xuICBjdXJyZW50WTogbnVtYmVyID0gMDtcbiAgbGVuOiBudW1iZXIgPSAwO1xuICBkb206IGFueSA9IG51bGw7XG4gIGluZGV4OiBudW1iZXIgPSAwO1xuICBtYXhZOiBudW1iZXIgPSAwO1xuICBsaW5lSGVpZ2h0OiBudW1iZXIgPSAzNDtcbiAgc2VsZWN0ZWRUYXJnZXQ6IGFueVtdID0gW107XG4gIGlzTW91c2VEb3duOiBib29sZWFuID0gZmFsc2U7XG4gIGN1cnJlbnRQaWNrZXI6IGFueTtcbiAgbG9jYWxlTmV3OiBhbnkgPSB7fTtcbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBWZWxvY2l0eSA9IHZlbG9jaXR5LmdldFZlbG9jaXR5KCk7XG5cbiAgQFZpZXdDaGlsZCgncGlja2VyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHBpY2tlcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgcGFuc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FtLXBpY2tlci1jb2wtbWFzaycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5kb20gPSBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5jaGlsZHJlblsyXTtcbiAgICB0aGlzLmxlbiA9IHRoaXMuZG9tLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB0aGlzLm1heFkgPSAtKHRoaXMubGVuIC0gMSk7XG5cbiAgICBpZiAodGhpcy5kb20uc3R5bGUudHJhbnNmb3JtID09PSAndHJhbnNsYXRlWSgwcHgpJykge1xuICAgICAgdGhpcy5jdXJyZW50WSA9IDA7XG4gICAgICB0aGlzLm1heFkgPSAtKHRoaXMubGVuIC0gMSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGFyZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udGFyZ2V0SWQgPT09IGV2ZW50LnRhcmdldC5pZCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFkgPSBpdGVtLmN1cnJlbnRZO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZXYgPSB0aGlzLmdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2LmNsaWVudFk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgcGFubW92ZShldmVudCkge1xuICAgIGlmICghZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYW0tcGlja2VyLWNvbC1tYXNrJykgfHwgIXRoaXMuaXNNb3VzZURvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBldiA9IHRoaXMuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpO1xuICAgIHRoaXMuZGlmZmVyWSA9IGV2LmNsaWVudFkgLSB0aGlzLnN0YXJ0WTtcbiAgICB0aGlzLlZlbG9jaXR5LnJlY29yZCh0aGlzLmRpZmZlclkpO1xuICAgIHRoaXMuZG9tLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDBzJztcbiAgICB0aGlzLmRvbS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3RoaXMuY3VycmVudFkgKiB0aGlzLmxpbmVIZWlnaHQgKyB0aGlzLmRpZmZlcll9cHgpYDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgcGFuZW5kKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhbS1waWNrZXItY29sLW1hc2snKSB8fCAhdGhpcy5pc01vdXNlRG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzTW91c2VEb3duID0gZmFsc2U7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBldiA9IHRoaXMuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpO1xuICAgIHRoaXMuZGlmZmVyWSA9IGV2LmNsaWVudFkgLSB0aGlzLnN0YXJ0WTtcbiAgICBsZXQgdGltZSA9IDAuMztcbiAgICBjb25zdCB2ZWxvY2l0eVRlbXAgPSB0aGlzLlZlbG9jaXR5LmdldFZlbG9jaXR5KHRoaXMuZGlmZmVyWSkgKiA0O1xuICAgIGlmICh2ZWxvY2l0eVRlbXApIHtcbiAgICAgIHRoaXMuZGlmZmVyWSA9IHZlbG9jaXR5VGVtcCAqIDQwICsgdGhpcy5kaWZmZXJZO1xuICAgICAgdGltZSA9IE1hdGguYWJzKHZlbG9jaXR5VGVtcCkgKiAwLjE7XG4gICAgfVxuICAgIHRoaXMuZG9tLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtICcgKyAodGltZSA8IDAuMyA/IDAuMyA6IHRpbWUpICsgJ3MnO1xuICAgIGlmICh0aGlzLmRpZmZlclkgPD0gLXRoaXMubGluZUhlaWdodCAvIDIpIHtcbiAgICAgIHRoaXMuY3VycmVudFkgKz0gTWF0aC5mbG9vcih0aGlzLmRpZmZlclkgLyB0aGlzLmxpbmVIZWlnaHQpO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFkgPD0gdGhpcy5tYXhZKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFkgPSB0aGlzLm1heFk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRpZmZlclkgPj0gdGhpcy5saW5lSGVpZ2h0IC8gMikge1xuICAgICAgdGhpcy5jdXJyZW50WSArPSBNYXRoLmZsb29yKHRoaXMuZGlmZmVyWSAvIHRoaXMubGluZUhlaWdodCk7XG4gICAgICBpZiAodGhpcy5jdXJyZW50WSA+PSAwKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFkgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFyZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBoYXNLZXkgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udGFyZ2V0SWQgPT09IGV2ZW50LnRhcmdldC5pZCkge1xuICAgICAgICAgIGhhc0tleSA9IHRydWU7XG4gICAgICAgICAgaXRlbS50YXJnZXRJZCA9IGV2ZW50LnRhcmdldC5pZDtcbiAgICAgICAgICBpdGVtLmN1cnJlbnRZID0gdGhpcy5jdXJyZW50WTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIWhhc0tleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0LnB1c2goeyB0YXJnZXRJZDogZXZlbnQudGFyZ2V0LmlkLCBjdXJyZW50WTogdGhpcy5jdXJyZW50WSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldC5wdXNoKHsgdGFyZ2V0SWQ6IGV2ZW50LnRhcmdldC5pZCwgY3VycmVudFk6IHRoaXMuY3VycmVudFkgfSk7XG4gICAgfVxuICAgIHRoaXMuZG9tLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7dGhpcy5jdXJyZW50WSAqIHRoaXMubGluZUhlaWdodH1weClgO1xuICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGguYWJzKHRoaXMuY3VycmVudFkgLyAxKSk7IC8vIMOowq7CsMOlwr3ClcOlwr3Ck8OlwonCjcOkwr3CjcOnwqfCu8OlwpzCqMOmwpXCsMOnwrvChMOkwrjCrcOnwprChMOnwrTCosOlwrzClSzDpcK/woXDqcKhwrvDpcKPwpbDpsKVwrTDr8K8wozDpcKQwqbDpcKIwpnDpMK8wprDpcKHwrrDp8KOwrDDpsK1wq7Dp8KCwrnDpsKVwrBcbiAgICB0aGlzLmN1cnJlbnRfdGltZVt0aGlzLmluZGV4QXJyYXlbcGFyc2VJbnQoZXZlbnQudGFyZ2V0LmlkLCAwKV1dID0gdGhpcy5yZXN1bHRBcnJbXG4gICAgICB0aGlzLmluZGV4QXJyYXlbcGFyc2VJbnQoZXZlbnQudGFyZ2V0LmlkLCAwKV1cbiAgICBdID0gdGhpcy5kYXRhW3BhcnNlSW50KGV2ZW50LnRhcmdldC5pZCwgMCldW3RoaXMuaW5kZXhdO1xuICAgIGlmICh0aGlzLmp1ZGdlVGltZSh0aGlzLmN1cnJlbnRfdGltZSwgdGhpcy5tYXhfZGF0ZSkpIHtcbiAgICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLmN1cnJlbnRfdGltZSA9IHRoaXMubWF4X2RhdGUuc2xpY2UoMCwgdGhpcy5pbmRleEFycmF5Lmxlbmd0aCk7XG4gICAgICB0aGlzLnJlc3VsdEFyciA9IHRoaXMuY3VycmVudF90aW1lO1xuICAgICAgdGhpcy5vcHRpb25zLm9uVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmhhbmRsZVJlc2x1dCgpKTtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5qdWRnZVRpbWUodGhpcy5taW5fZGF0ZSwgdGhpcy5jdXJyZW50X3RpbWUpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRUaW1lID0gdGhpcy5jdXJyZW50X3RpbWUgPSB0aGlzLm1pbl9kYXRlLnNsaWNlKDAsIHRoaXMuaW5kZXhBcnJheS5sZW5ndGgpO1xuICAgICAgdGhpcy5yZXN1bHRBcnIgPSB0aGlzLmN1cnJlbnRUaW1lO1xuICAgICAgdGhpcy5vcHRpb25zLm9uVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmhhbmRsZVJlc2x1dCgpKTtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEN1cnJlbnRTZWxlY3RlZCgwLCB0aGlzLmRpZmZlclkgPCAwLCB0aGlzLmluZGV4KTtcbiAgICAgIHRoaXMub3B0aW9ucy5vblZhbHVlQ2hhbmdlLmVtaXQodGhpcy5oYW5kbGVSZXNsdXQoKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIG9wdGlvbnM6IERhdGVQaWNrZXJPcHRpb25zLFxuICAgIHB1YmxpYyBsb2NhbGVQcm92aWRlclNlcnZpY2U6IExvY2FsZVByb3ZpZGVyU2VydmljZVxuICApIHsgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5pbml0UmVzdWx0KCk7XG4gICAgdGhpcy5jaGVja1RpbWUoKTtcbiAgICB0aGlzLmluaXRSZWFkeSgpO1xuICAgIHRoaXMuZ2V0SW5pdFZhbHVlSW5kZXgoKTtcbiAgfVxuXG4gIHJlbG9hZFBpY2tlcigpIHtcbiAgICBpZiAoIXRoaXMucGlja2VyIHx8IHRoaXMucGlja2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGlja2VyID0gdGhpcy5waWNrZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGlmICh0aGlzLmN1cnJlbnRQaWNrZXIgJiYgdGhpcy5jdXJyZW50UGlja2VyLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNlbGYuc2VsZWN0ZWRUYXJnZXQuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHNlbGYuY3VycmVudFBpY2tlci5jaGlsZHJlbltpXS5jaGlsZHJlblsyXS5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAuM3MnO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaXRlbS5jdXJyZW50WSwgMCk7XG4gICAgICAgICAgc2VsZi5jdXJyZW50UGlja2VyLmNoaWxkcmVuW2ldLmNoaWxkcmVuWzJdLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7aW5kZXggKiBzZWxmLmxpbmVIZWlnaHR9cHgpYDtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBsb2NhbGVQcm92aWRlcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoc2VsZi5vcHRpb25zLmxvY2FsZSB8fCBzZWxmLm9wdGlvbnMubG9jYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlbGYubG9jYWxlUHJvdmlkZXJTZXJ2aWNlLnNldExvY2FsZShzZWxmLm9wdGlvbnMubG9jYWxlKTtcbiAgICB9XG4gICAgc2VsZi5sb2NhbGVQcm92aWRlclNlcnZpY2UubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHNlbGYudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgc2VsZi5vcHRpb25zLmxvY2FsZSA9IHNlbGYubG9jYWxlUHJvdmlkZXJTZXJ2aWNlLmdldExvY2FsZSgpO1xuICAgICAgc2VsZi5sb2NhbGVOZXcgPSBzZWxmLmxvY2FsZVByb3ZpZGVyU2VydmljZS5nZXRMb2NhbGVTdWJPYmooJ0RhdGVQaWNrZXInKTtcbiAgICAgIHNlbGYub3B0aW9ucy5va1RleHQgPSBzZWxmLmxvY2FsZU5ldy5va1RleHQ7XG4gICAgICBzZWxmLm9wdGlvbnMuZGlzbWlzc1RleHQgPSBzZWxmLmxvY2FsZU5ldy5kaXNtaXNzVGV4dDtcbiAgICAgIHNlbGYuaW5pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgdHJhbnNmb3JtRGF0ZUZvcm1hdChkYXRlKTogYW55IHtcbiAgICBpZiAoIWRhdGUgfHwgZGF0ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICd5eXl5LW1tLWRkLUhILU1NJ1xuICAgICAgICAucmVwbGFjZSgneXl5eScsIGRhdGUuZ2V0RnVsbFllYXIoKSArICcnKVxuICAgICAgICAucmVwbGFjZSgnbW0nLCBkYXRlLmdldE1vbnRoKCkgKyAxICsgJycpXG4gICAgICAgIC5yZXBsYWNlKCdkZCcsIGRhdGUuZ2V0RGF0ZSgpICsgJycpXG4gICAgICAgIC5yZXBsYWNlKCdISCcsIGRhdGUuZ2V0SG91cnMoKSArICcnKVxuICAgICAgICAucmVwbGFjZSgnTU0nLCBkYXRlLmdldE1pbnV0ZXMoKSArICcnKTtcbiAgICB9XG4gIH1cblxuICBwcmVaZXJvKHZhbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsIDwgMTAgPyAnMCcgKyB2YWwgOiB2YWwgKyAnJztcbiAgfVxuXG4gIGdldEluaXRWYWx1ZUluZGV4KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBbXTtcbiAgICB0aGlzLmluZGV4QXJyYXkubWFwKChpbmRleCwgaSkgPT4ge1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goKGl0ZW0sIGopID0+IHtcbiAgICAgICAgaXRlbS5mb3JFYWNoKChpdGVtMSwgaykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUaW1lW2luZGV4XSA9PT0gaXRlbTEgJiYgaSA9PT0gaikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldC5wdXNoKHsgdGFyZ2V0SWQ6IGAke2l9YCwgY3VycmVudFk6IC1rIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbG9hZFBpY2tlcigpO1xuICB9XG5cbiAgY2hlY2tNb2RlKG1vZGUpIHtcbiAgICB0aGlzLm1vZGVTd2l0Y2ggPSBbMSwgMSwgMSwgMSwgMSwgMV07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgdGhpcy5tb2RlU3dpdGNoID0gWzEsIDEsIDEsIDAsIDAsIDBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVzZTEySG91cnMpIHtcbiAgICAgICAgICB0aGlzLm1vZGVTd2l0Y2ggPSBbMCwgMCwgMCwgMSwgMSwgMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlU3dpdGNoID0gWzAsIDAsIDAsIDEsIDEsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVzZTEySG91cnMpIHtcbiAgICAgICAgICB0aGlzLm1vZGVTd2l0Y2ggPSBbMSwgMSwgMSwgMSwgMSwgMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlU3dpdGNoID0gWzEsIDEsIDEsIDEsIDEsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHRoaXMubW9kZVN3aXRjaCA9IFsxLCAwLCAwLCAwLCAwXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHRoaXMubW9kZVN3aXRjaCA9IFsxLCAxLCAwLCAwLCAwXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgdGVtcEluZGV4QXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubW9kZVN3aXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMubW9kZVN3aXRjaFtpXSA+IDApIHtcbiAgICAgICAgdGVtcEluZGV4QXJyYXkucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbG9zID0gdGVtcEluZGV4QXJyYXlbdGVtcEluZGV4QXJyYXkubGVuZ3RoIC0gMV0gLSB0ZW1wSW5kZXhBcnJheVswXSArIDE7XG4gICAgdGhpcy5pbmRleEFycmF5ID0gdGVtcEluZGV4QXJyYXk7XG4gIH1cblxuICBpbml0UmVzdWx0KCkge1xuICAgIHRoaXMucmVzdWx0QXJyID0gW107XG4gICAgaWYgKHRoaXMuY3VycmVudFRpbWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50X3RpbWUgPSB0aGlzLmN1cnJlbnRUaW1lO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2xvczsgaSsrKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLmN1cnJlbnRUaW1lW2ldO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09PSAndGltZScpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRBcnIgPSB0aGlzLmN1cnJlbnRUaW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXN1bHRBcnIucHVzaChyZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoZWNrVGltZSgpIHtcbiAgICBjb25zdCBtaW5fRGF0ZSA9IHRoaXMudHJhbnNmb3JtRGF0ZUZvcm1hdCh0aGlzLm9wdGlvbnMubWluRGF0ZSkuc3BsaXQoJy0nKTtcbiAgICBpZiAobWluX0RhdGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5taW5fZGF0ZSA9IG1pbl9EYXRlLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGl0ZW0sIDApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1heF9EYXRlID0gdGhpcy50cmFuc2Zvcm1EYXRlRm9ybWF0KHRoaXMub3B0aW9ucy5tYXhEYXRlKS5zcGxpdCgnLScpO1xuICAgIGlmIChtYXhfRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm1heF9kYXRlID0gbWF4X0RhdGUubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoaXRlbSwgMCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbWluX2RhdGUgPSB0aGlzLm1pbl9kYXRlO1xuICAgIGNvbnN0IG1heF9kYXRlID0gdGhpcy5tYXhfZGF0ZTtcbiAgICBjb25zdCBjdXJyZW50X3RpbWUgPSB0aGlzLmN1cnJlbnRfdGltZTtcbiAgICB0aGlzLmxvY2FsTWluRGF0ZSA9IFtdO1xuICAgIGlmICh0aGlzLmxvY2FsTWluRGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmluZGV4QXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHRoaXMubG9jYWxNaW5EYXRlLnB1c2gobWluX2RhdGVbdGhpcy5pbmRleEFycmF5W2luZGV4XV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvY2FsTWF4RGF0ZSA9IFtdO1xuICAgIGlmICh0aGlzLmxvY2FsTWF4RGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmluZGV4QXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHRoaXMubG9jYWxNYXhEYXRlLnB1c2gobWF4X2RhdGVbdGhpcy5pbmRleEFycmF5W2luZGV4XV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmluZGV4QXJyYXkubGVuZ3RoID09PSB0aGlzLmxvY2FsTWluRGF0ZS5sZW5ndGggJiZcbiAgICAgIHRoaXMubG9jYWxNaW5EYXRlLmxlbmd0aCA9PT0gdGhpcy5sb2NhbE1heERhdGUubGVuZ3RoICYmXG4gICAgICB0aGlzLmxvY2FsTWF4RGF0ZS5sZW5ndGggPT09IHRoaXMuY3VycmVudFRpbWUubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgX2luZGV4QXJyYXlJbmRleCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubW9kZVN3aXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5tb2RlU3dpdGNoW2ldID09PSAwKSB7XG4gICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIG1pbl9kYXRlW2ldID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICBtYXhfZGF0ZVtpXSA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIG1pbl9kYXRlW2ldID0gbmV3IERhdGUoKS5nZXRNb250aCgpICsgMTtcbiAgICAgICAgICAgICAgbWF4X2RhdGVbaV0gPSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbWluX2RhdGVbaV0gPSBuZXcgRGF0ZSgpLmdldERhdGUoKTtcbiAgICAgICAgICAgICAgbWF4X2RhdGVbaV0gPSBuZXcgRGF0ZSgpLmdldERhdGUoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIG1pbl9kYXRlW2ldID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICBtYXhfZGF0ZVtpXSA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIG1pbl9kYXRlW2ldID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIG1heF9kYXRlW2ldID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBtaW5fZGF0ZVtpXSA9IDA7XG4gICAgICAgICAgICAgIG1heF9kYXRlW2ldID0gMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB0aGlzLmxvY2FsTWluRGF0ZVtfaW5kZXhBcnJheUluZGV4XSA9IG1pbl9kYXRlW2ldID1cbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsTWluRGF0ZVtfaW5kZXhBcnJheUluZGV4XSA+PSAxOTAwXG4gICAgICAgICAgICAgICAgICA/IHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPSBtYXhfZGF0ZVtpXSA9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPj0gMTkwMFxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XVxuICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgKyAxO1xuICAgICAgICAgICAgICBjdXJyZW50X3RpbWVbaV0gPSB0aGlzLmN1cnJlbnRUaW1lW19pbmRleEFycmF5SW5kZXhdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbE1pbkRhdGVbX2luZGV4QXJyYXlJbmRleF0gPSBtaW5fZGF0ZVtpXSA9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbE1pbkRhdGVbX2luZGV4QXJyYXlJbmRleF0gPiAwICYmIHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdIDw9IDEyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdXG4gICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxNYXhEYXRlW19pbmRleEFycmF5SW5kZXhdID0gbWF4X2RhdGVbaV0gPVxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxNYXhEYXRlW19pbmRleEFycmF5SW5kZXhdID4gMCAmJiB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XSA8PSAxMlxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XVxuICAgICAgICAgICAgICAgICAgOiAxMjtcbiAgICAgICAgICAgICAgY3VycmVudF90aW1lW2ldID0gdGhpcy5jdXJyZW50VGltZVtfaW5kZXhBcnJheUluZGV4XTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdID0gbWluX2RhdGVbaV0gPVxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdID4gMCAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbE1pbkRhdGVbX2luZGV4QXJyYXlJbmRleF0gPD0gbmV3IERhdGUobWluX2RhdGVbMF0sIG1pbl9kYXRlWzFdLCAwKS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5sb2NhbE1pbkRhdGVbX2luZGV4QXJyYXlJbmRleF1cbiAgICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPSBtYXhfZGF0ZVtpXSA9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPiAwICYmXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XSA8PSBuZXcgRGF0ZShtYXhfZGF0ZVswXSwgbWF4X2RhdGVbMV0sIDApLmdldERhdGUoKVxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XVxuICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZShtYXhfZGF0ZVswXSwgbWF4X2RhdGVbMV0sIDApLmdldERhdGUoKTtcbiAgICAgICAgICAgICAgY3VycmVudF90aW1lW2ldID0gdGhpcy5jdXJyZW50VGltZVtfaW5kZXhBcnJheUluZGV4XTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdID0gbWluX2RhdGVbaV0gPVxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdID49IDAgJiYgdGhpcy5sb2NhbE1pbkRhdGVbX2luZGV4QXJyYXlJbmRleF0gPD0gMjNcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5sb2NhbE1pbkRhdGVbX2luZGV4QXJyYXlJbmRleF1cbiAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2UxMkhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPSBtYXhfZGF0ZVtpXSA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XSA+PSAwICYmIHRoaXMubG9jYWxNYXhEYXRlW19pbmRleEFycmF5SW5kZXhdIDw9IDExXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiAxMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XSA9IG1heF9kYXRlW2ldID1cbiAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxNYXhEYXRlW19pbmRleEFycmF5SW5kZXhdID49IDAgJiYgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPD0gMjNcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsTWF4RGF0ZVtfaW5kZXhBcnJheUluZGV4XVxuICAgICAgICAgICAgICAgICAgICA6IDIzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnRfdGltZVtpXSA9IHRoaXMuY3VycmVudFRpbWVbX2luZGV4QXJyYXlJbmRleF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICB0aGlzLmxvY2FsTWluRGF0ZVtfaW5kZXhBcnJheUluZGV4XSA9IG1pbl9kYXRlW2ldID1cbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsTWluRGF0ZVtfaW5kZXhBcnJheUluZGV4XSA+PSAwICYmIHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdIDw9IDU5XG4gICAgICAgICAgICAgICAgICA/IHRoaXMubG9jYWxNaW5EYXRlW19pbmRleEFycmF5SW5kZXhdXG4gICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxNYXhEYXRlW19pbmRleEFycmF5SW5kZXhdID0gbWF4X2RhdGVbaV0gPVxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxNYXhEYXRlW19pbmRleEFycmF5SW5kZXhdID49IDAgJiYgdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF0gPD0gNTlcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5sb2NhbE1heERhdGVbX2luZGV4QXJyYXlJbmRleF1cbiAgICAgICAgICAgICAgICAgIDogNTk7XG4gICAgICAgICAgICAgIGN1cnJlbnRfdGltZVtpXSA9IHRoaXMuY3VycmVudFRpbWVbX2luZGV4QXJyYXlJbmRleF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfaW5kZXhBcnJheUluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluVCA9IG5ldyBEYXRlKG1pbl9kYXRlWzBdLCBtaW5fZGF0ZVsxXSwgbWluX2RhdGVbMl0sIG1pbl9kYXRlWzNdLCBtaW5fZGF0ZVs0XSkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgbWF4VCA9IG5ldyBEYXRlKG1heF9kYXRlWzBdLCBtYXhfZGF0ZVsxXSwgbWF4X2RhdGVbMl0sIG1heF9kYXRlWzNdLCBtYXhfZGF0ZVs0XSkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgY3VyVCA9IG5ldyBEYXRlKFxuICAgICAgICBjdXJyZW50X3RpbWVbMF0sXG4gICAgICAgIGN1cnJlbnRfdGltZVsxXSxcbiAgICAgICAgY3VycmVudF90aW1lWzJdLFxuICAgICAgICBjdXJyZW50X3RpbWVbM10sXG4gICAgICAgIGN1cnJlbnRfdGltZVs0XVxuICAgICAgKS5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gbWluVCA8PSBjdXJUICYmIGN1clQgPD0gbWF4VDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGp1ZGdlVGltZShhcnIxLCBhcnIyKSB7XG4gICAgbGV0IGRhdGUxO1xuICAgIGxldCBkYXRlMjtcbiAgICBkYXRlMSA9IGFycjEuc2xpY2UoMCwgMykuam9pbignLScpICsgJyAnICsgYXJyMS5zbGljZSgzLCA1KS5qb2luKCc6Jyk7XG4gICAgZGF0ZTIgPSBhcnIyLnNsaWNlKDAsIDMpLmpvaW4oJy0nKSArICcgJyArIGFycjIuc2xpY2UoMywgNSkuam9pbignOicpO1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlMSkuZ2V0VGltZSgpID49IG5ldyBEYXRlKGRhdGUyKS5nZXRUaW1lKCk7XG4gIH1cblxuICBqdWRnZUVxdWFsQXJyYXkoYXJyMSwgYXJyMiwgbGVuZ3RoKSB7XG4gICAgbGV0IHN0YXR1cyA9IHRydWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycjFbaV0gIT0gYXJyMltpXSkge1xuICAgICAgICBzdGF0dXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIGluaXRSZWFkeSgpIHtcbiAgICBsZXQgcmVhbElkeCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNsb3M7IGkrKykge1xuICAgICAgcmVhbElkeCA9IHRoaXMuaW5kZXhBcnJheVtpXTtcbiAgICAgIGxldCBtaW4gPSAwO1xuICAgICAgbGV0IG1heCA9IDA7XG4gICAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICAgIHN3aXRjaCAocmVhbElkeCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgdGhpcy5pbml0RGF0YSh0ZW1wQXJyYXksIHRoaXMubG9jYWxNaW5EYXRlW2ldLCB0aGlzLmxvY2FsTWF4RGF0ZVtpXSwgdGhpcy5sb2NhbGVOZXcueWVhciwgaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtaW4gPSB0aGlzLmp1ZGdlRXF1YWxBcnJheSh0aGlzLm1pbl9kYXRlLCB0aGlzLmN1cnJlbnRfdGltZSwgMSkgPyB0aGlzLmxvY2FsTWluRGF0ZVtpXSA6IDE7XG4gICAgICAgICAgbWF4ID0gdGhpcy5qdWRnZUVxdWFsQXJyYXkodGhpcy5tYXhfZGF0ZSwgdGhpcy5jdXJyZW50X3RpbWUsIDEpID8gdGhpcy5sb2NhbE1heERhdGVbaV0gOiAxMjtcbiAgICAgICAgICB0aGlzLmluaXREYXRhKHRlbXBBcnJheSwgbWluLCBtYXgsIHRoaXMubG9jYWxlTmV3Lm1vbnRoLCBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1pbiA9IHRoaXMuanVkZ2VFcXVhbEFycmF5KHRoaXMubWluX2RhdGUsIHRoaXMuY3VycmVudF90aW1lLCAyKSA/IHRoaXMubG9jYWxNaW5EYXRlW2ldIDogMTtcbiAgICAgICAgICBtYXggPSB0aGlzLmp1ZGdlRXF1YWxBcnJheSh0aGlzLm1heF9kYXRlLCB0aGlzLmN1cnJlbnRfdGltZSwgMilcbiAgICAgICAgICAgID8gdGhpcy5sb2NhbE1heERhdGVbaV1cbiAgICAgICAgICAgIDogbmV3IERhdGUodGhpcy5jdXJyZW50X3RpbWVbMF0sIHRoaXMuY3VycmVudF90aW1lWzFdLCAwKS5nZXREYXRlKCk7XG4gICAgICAgICAgdGhpcy5pbml0RGF0YSh0ZW1wQXJyYXksIG1pbiwgbWF4LCB0aGlzLmxvY2FsZU5ldy5kYXksIGkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWluID0gdGhpcy5qdWRnZUVxdWFsQXJyYXkodGhpcy5taW5fZGF0ZSwgdGhpcy5jdXJyZW50X3RpbWUsIDMpID8gdGhpcy5sb2NhbE1pbkRhdGVbaV0gOiAwO1xuICAgICAgICAgIG1heCA9IHRoaXMuanVkZ2VFcXVhbEFycmF5KHRoaXMubWF4X2RhdGUsIHRoaXMuY3VycmVudF90aW1lLCAzKSA/IHRoaXMubG9jYWxNYXhEYXRlW2ldIDogMjM7XG4gICAgICAgICAgdGhpcy5pbml0RGF0YSh0ZW1wQXJyYXksIG1pbiwgbWF4LCB0aGlzLmxvY2FsZU5ldy5ob3VyLCBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1pbiA9IHRoaXMuanVkZ2VFcXVhbEFycmF5KHRoaXMubWluX2RhdGUsIHRoaXMuY3VycmVudF90aW1lLCA0KSA/IHRoaXMubG9jYWxNaW5EYXRlW2ldIDogMDtcbiAgICAgICAgICBtYXggPSB0aGlzLmp1ZGdlRXF1YWxBcnJheSh0aGlzLm1heF9kYXRlLCB0aGlzLmN1cnJlbnRfdGltZSwgNCkgPyB0aGlzLmxvY2FsTWF4RGF0ZVtpXSA6IDU5O1xuICAgICAgICAgIHRoaXMuaW5pdERhdGEodGVtcEFycmF5LCBtaW4sIG1heCwgdGhpcy5sb2NhbGVOZXcubWludXRlLCBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1pbiA9IDA7XG4gICAgICAgICAgbWF4ID0gMTtcbiAgICAgICAgICB0aGlzLmluaXREYXRhKHRlbXBBcnJheSwgbWluLCBtYXgsICd1c2UxMkhvdXJzJywgaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW5pdERhdGEodGVtcEFyciwgbWluLCBtYXgsIHN0ciwgaWR4KSB7XG4gICAgY29uc3QgZGF0YVdpdGhTdHIgPSBbXTtcbiAgICBmb3IgKG1pbjsgbWluIDwgbWF4ICsgMTsgbWluKyspIHtcbiAgICAgIHRlbXBBcnIucHVzaChtaW4pO1xuICAgICAgZGF0YVdpdGhTdHIucHVzaChtaW4gKyBzdHIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IHRoaXMuaW5kZXhBcnJheS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgdGhpcy5kYXRhV2l0aFN0ciA9IFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IGlkeCAmJiB0aGlzLmRhdGFbaWR4XS50b1N0cmluZygpICE9PSB0ZW1wQXJyLnRvU3RyaW5nKCkpIHtcbiAgICAgIHRoaXMuZGF0YVtpZHhdID0gdGVtcEFycjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiBpZHggJiYgdGhpcy5kYXRhW2lkeF0udG9TdHJpbmcoKSA9PT0gdGVtcEFyci50b1N0cmluZygpKSB7XG4gICAgICB0aGlzLmRhdGFbaWR4XSA9IHRlbXBBcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKHRlbXBBcnIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2FsZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy5sb2NhbGUubG9jYWxlID09PSAnemhfQ04nKSB7XG4gICAgICBpZiAodGhpcy5kYXRhV2l0aFN0ci5sZW5ndGggPiBpZHggJiYgdGhpcy5kYXRhV2l0aFN0cltpZHhdLnRvU3RyaW5nKCkgIT09IGRhdGFXaXRoU3RyLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhpcy5kYXRhV2l0aFN0cltpZHhdID0gZGF0YVdpdGhTdHI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YVdpdGhTdHIubGVuZ3RoID4gaWR4ICYmIHRoaXMuZGF0YVdpdGhTdHJbaWR4XS50b1N0cmluZygpID09PSBkYXRhV2l0aFN0ci50b1N0cmluZygpKSB7XG4gICAgICAgIHRoaXMuZGF0YVdpdGhTdHJbaWR4XSA9IGRhdGFXaXRoU3RyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhV2l0aFN0ci5wdXNoKGRhdGFXaXRoU3RyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhV2l0aFN0ciA9IHRoaXMuZGF0YTtcbiAgICB9XG4gIH1cblxuICBvaygpIHtcbiAgICB0aGlzLm9wdGlvbnMub25Pay5lbWl0KHRoaXMuaGFuZGxlUmVzbHV0KCkpO1xuICAgIHRoaXMuc2V0VHJhbnNpdGlvbk5hbWUoKTtcbiAgfVxuXG4gIGhhbmRsZVJlc2x1dCgpIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0ZXRpbWUnIHx8IHRoaXMub3B0aW9ucy5tb2RlID09PSAndGltZScpIHtcbiAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLnJlc3VsdEFycjtcbiAgICAgIHJlc3VsdCA9IHRlbXAuc2xpY2UoMCwgMykuam9pbignLScpICsgJyAnICsgdGVtcC5zbGljZSgzLCA1KS5qb2luKCc6Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucmVzdWx0QXJyLm1hcCh2ID0+IHYpLmpvaW4oJy0nKTtcbiAgICB9XG4gICAgdGhpcy5yZXN1bHREYXRlID0gbmV3IERhdGUocmVzdWx0LnJlcGxhY2UoLy0vZywgJy8nKSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5EYXRlLmdldFRpbWUoKSA+IHRoaXMucmVzdWx0RGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIGlmICh0aGlzLnJlc3VsdEFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnJlc3VsdEFyci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdEFyciA9IHRoaXMubWluX2RhdGU7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IHRoaXMucmVzdWx0QXJyO1xuICAgICAgICAgIHRoaXMuY3VycmVudF90aW1lID0gdGhpcy5jdXJyZW50VGltZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5yZXN1bHREYXRlID0gdGhpcy5vcHRpb25zLm1pbkRhdGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc3VsdERhdGU7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uRGlzbWlzcy5lbWl0KCk7XG4gICAgdGhpcy5zZXRUcmFuc2l0aW9uTmFtZSgpO1xuICB9XG5cbiAgc2V0VHJhbnNpdGlvbk5hbWUoKSB7XG4gICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9ICdhbS1zbGlkZS11cC1sZWF2ZSBhbS1zbGlkZS11cC1sZWF2ZS1hY3RpdmUnO1xuICAgIHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLWZhZGUtbGVhdmUgYW0tZmFkZS1sZWF2ZS1hY3RpdmUnO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zLmhpZGVQaWNrZXIoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgc2V0Q3VycmVudFNlbGVjdGVkKGNoZWNrSWR4LCBzdGEsIGluZGV4VCkge1xuICAgIGlmIChjaGVja0lkeCA+PSB0aGlzLmNsb3MgLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSBudWxsO1xuICAgIGlmIChzdGEpIHtcbiAgICAgIHN0YXR1cyA9IHRoaXMuanVkZ2VFcXVhbEFycmF5KHRoaXMubWluX2RhdGUsIHRoaXMucmVzdWx0QXJyLCBjaGVja0lkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0dXMgPSB0aGlzLmp1ZGdlRXF1YWxBcnJheSh0aGlzLm1heF9kYXRlLCB0aGlzLnJlc3VsdEFyciwgY2hlY2tJZHggKyAxKTtcbiAgICB9XG4gICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgIGxldCBtaW4gPSAwO1xuICAgICAgbGV0IG1heCA9IDA7XG4gICAgICBsZXQgc3RyID0gJyc7XG4gICAgICBjb25zdCByZWFsSWR4ID0gdGhpcy5pbmRleEFycmF5W2NoZWNrSWR4XTtcbiAgICAgIHN3aXRjaCAocmVhbElkeCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbWluID0gMTtcbiAgICAgICAgICBtYXggPSAxMjtcbiAgICAgICAgICBzdHIgPSAnw6bCnMKIJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1pbiA9IDE7XG4gICAgICAgICAgbWF4ID0gbmV3IERhdGUodGhpcy5jdXJyZW50X3RpbWVbMF0sIHRoaXMuY3VycmVudF90aW1lWzFdLCAwKS5nZXREYXRlKCk7XG4gICAgICAgICAgc3RyID0gJ8OmwpfCpSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtaW4gPSAwO1xuICAgICAgICAgIG1heCA9IDIzO1xuICAgICAgICAgIHN0ciA9ICfDpsKXwrYnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWluID0gMDtcbiAgICAgICAgICBtYXggPSA1OTtcbiAgICAgICAgICBzdHIgPSAnw6XCiMKGJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbml0UmFuZ2VBcnIobWluLCBtYXgsIGluZGV4VCwgY2hlY2tJZHggKyAxLCBzdHIpO1xuICAgIH1cbiAgICB0aGlzLnNldEN1cnJlbnRTZWxlY3RlZChjaGVja0lkeCArIDEsIHN0YSwgaW5kZXhUKTtcbiAgfVxuXG4gIGluaXRSYW5nZUFycihtaW4sIG1heCwgaW5kZXhULCBjaGVja0lkeCwgc3RyKSB7XG4gICAgY29uc3QgcmVhbElkeCA9IHRoaXMuaW5kZXhBcnJheVtjaGVja0lkeF07XG4gICAgY29uc3QgYXJyID0gW107XG4gICAgbGV0IHRhcmdldExvbmcgPSAwO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSBtaW47IGluZGV4IDwgbWF4ICsgMTsgaW5kZXgrKykge1xuICAgICAgYXJyLnB1c2goaW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChhcnIuaW5kZXhPZih0aGlzLnJlc3VsdEFycltjaGVja0lkeF0pID09IC0xKSB7XG4gICAgICBpZiAoLXRoaXMuc2VsZWN0ZWRUYXJnZXRbY2hlY2tJZHhdLmN1cnJlbnRZID4gbWF4IC0gbWluKSB7XG4gICAgICAgIGluZGV4VCA9IG1heCAtIG1pbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldFtjaGVja0lkeF0uY3VycmVudFkgPSAtaW5kZXhUO1xuICAgICAgfVxuICAgICAgdGFyZ2V0TG9uZyA9IC1hcnIubGVuZ3RoICogdGhpcy5saW5lSGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRMb25nID0gLWFyci5pbmRleE9mKHRoaXMucmVzdWx0QXJyW2NoZWNrSWR4XSkgKiB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0W2NoZWNrSWR4XS5jdXJyZW50WSA9IC1hcnIuaW5kZXhPZih0aGlzLnJlc3VsdEFycltjaGVja0lkeF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhW2NoZWNrSWR4XS50b1N0cmluZygpICE9PSBhcnIudG9TdHJpbmcoKSkge1xuICAgICAgdGhpcy5jdXJyZW50X3RpbWVbcmVhbElkeF0gPSAtdGFyZ2V0TG9uZyAvIHRoaXMubGluZUhlaWdodCArIDE7XG4gICAgICB0aGlzLnJlc3VsdEFycltjaGVja0lkeF0gPSAtdGFyZ2V0TG9uZyAvIHRoaXMubGluZUhlaWdodCArIDE7XG4gICAgICB0aGlzLmRhdGFbY2hlY2tJZHhdID0gYXJyO1xuICAgICAgdGhpcy5kYXRhV2l0aFN0cltjaGVja0lkeF0gPVxuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlLmxvY2FsZSA9PT0gJ3poX0NOJ1xuICAgICAgICAgID8gYXJyLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtICsgc3RyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgOiBhcnI7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGkgPj0gY2hlY2tJZHgpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBpY2tlci5jaGlsZHJlbltpXS5jaGlsZHJlblsyXS5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGl0ZW0uY3VycmVudFksIDApO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGlja2VyLmNoaWxkcmVuW2ldLmNoaWxkcmVuWzJdLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7aW5kZXggKiB0aGlzLmxpbmVIZWlnaHR9cHgpYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXZlbnRUYXJnZXQoZXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyB8fFxuICAgICAgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScgfHxcbiAgICAgIGV2ZW50LnR5cGUgPT09ICdtb3VzZXVwJyB8fFxuICAgICAgZXZlbnQudHlwZSA9PT0gJ21vdXNlbGVhdmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSkge1xuICAgICAgICByZXR1cm4gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvY2FsZVByb3ZpZGVyKCk7XG4gICAgdGhpcy5jaGVja01vZGUodGhpcy5vcHRpb25zLm1vZGUpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy50cmFuc2Zvcm1EYXRlRm9ybWF0KHRoaXMub3B0aW9ucy52YWx1ZSkuc3BsaXQoJy0nKTtcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50VGltZSA9IHZhbHVlLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGl0ZW0sIDApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucmVsb2FkUGlja2VyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IHpoX0NOIH0gZnJvbSAnLi4vbG9jYWxlLXByb3ZpZGVyL2xhbmd1YWdlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0RhdGVQaWNrZXJWaWV3LCBuem0tZGF0ZS1waWNrZXItdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyVmlld0NvbXBvbmVudCBleHRlbmRzIERhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIG1vZGU6IHN0cmluZyA9ICdkYXRlJztcbiAgQElucHV0KClcbiAgbWluRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKDIwMDAsIDUsIDEsIDAsIDAsIDApO1xuICBASW5wdXQoKVxuICBtYXhEYXRlOiBEYXRlID0gbmV3IERhdGUoMjAzMCwgMSwgMSwgMjMsIDU5LCA1OSk7XG4gIEBJbnB1dCgpXG4gIHZhbHVlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgaW5kaWNhdG9yU3R5bGU6IG9iamVjdCA9IHt9O1xuICBASW5wdXQoKVxuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubG9jYWxlO1xuICB9XG4gIHNldCBsb2NhbGUodmFsdWUpIHtcbiAgICB0aGlzLm9wdGlvbnMubG9jYWxlID0gdmFsdWU7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tcGlja2VyJylcbiAgYW1QaWNrZXIgPSB0cnVlO1xuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgdGhpcy5vcHRpb25zLm1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG4gICAgdGhpcy5vcHRpb25zLm1heERhdGUgPSB0aGlzLm1heERhdGU7XG4gICAgdGhpcy5vcHRpb25zLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgICB0aGlzLm9wdGlvbnMubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25WYWx1ZUNoYW5nZSA9IHRoaXMub25WYWx1ZUNoYW5nZTtcbiAgICB0aGlzLmNoZWNrTW9kZSh0aGlzLm9wdGlvbnMubW9kZSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRyYW5zZm9ybURhdGVGb3JtYXQodGhpcy5vcHRpb25zLnZhbHVlKS5zcGxpdCgnLScpO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRUaW1lID0gdmFsdWUubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoaXRlbSwgMCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5pbml0UmVzdWx0KCk7XG4gICAgdGhpcy5jaGVja1RpbWUoKTtcbiAgICB0aGlzLmluaXRSZWFkeSgpO1xuICAgIHRoaXMuZ2V0SW5pdFZhbHVlSW5kZXgoKTtcbiAgfVxuXG4gIHJlbG9hZFBpY2tlcigpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGlja2VyKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZWxmLnNlbGVjdGVkVGFyZ2V0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICBzZWxmLmN1cnJlbnRQaWNrZXIuY2hpbGRyZW5baV0uY2hpbGRyZW5bMl0uc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gLjNzJztcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGl0ZW0uY3VycmVudFksIDApO1xuICAgICAgICAgIHNlbGYuY3VycmVudFBpY2tlci5jaGlsZHJlbltpXS5jaGlsZHJlblsyXS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke2luZGV4ICogc2VsZi5saW5lSGVpZ2h0fXB4KWA7XG4gICAgICAgIH0pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2NhbGVQcm92aWRlcigpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY3VycmVudFBpY2tlciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMucmVsb2FkUGlja2VyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IGNoYW5nZXMudmFsdWUuY3VycmVudFZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRyYW5zZm9ybURhdGVGb3JtYXQodGhpcy5vcHRpb25zLnZhbHVlKS5zcGxpdCgnLScpO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IHZhbHVlLm1hcChpdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaXRlbSwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5qdWRnZUVxdWFsQXJyYXkodGhpcy5jdXJyZW50VGltZSwgdGhpcy5yZXN1bHRBcnIsIHRoaXMucmVzdWx0QXJyLmxlbmd0aCkgfHxcbiAgICAgICAgdGhpcy5qdWRnZUVxdWFsQXJyYXkodGhpcy5jdXJyZW50VGltZSwgdGhpcy5taW5fZGF0ZSwgdGhpcy5jdXJyZW50VGltZS5sZW5ndGgpIHx8XG4gICAgICAgIHRoaXMuanVkZ2VUaW1lKHRoaXMuY3VycmVudFRpbWUsIHRoaXMubWF4X2RhdGUpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubW9kZSB8fCBjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlIHx8IGNoYW5nZXMuZGlzYWJsZWQgfHwgY2hhbmdlcy5sb2NhbGUpIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbGUtcHJvdmlkZXIuc2VydmljZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2xvY2FsZVByb3ZpZGVyJ1xufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGVQcm92aWRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9jYWxlOiBMb2NhbGVQcm92aWRlclNlcnZpY2UpIHt9XG5cbiAgdHJhbnNmb3JtKGtleVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5nZXRMb2NhbGVWYWx1ZShrZXlQYXRoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB6aF9DTiBmcm9tICcuL2xhbmd1YWdlcy96aF9DTic7XG5pbXBvcnQgeyBMb2NhbGVQcm92aWRlclBpcGUgfSBmcm9tICcuL2xvY2FsZS1wcm92aWRlci5waXBlJztcbmltcG9ydCB7IExPQ0FMX1BST1ZJREVSX1RPS0VOIH0gZnJvbSAnLi9sb2NhbGUtcHJvdmlkZXIudG9rZW4nO1xuaW1wb3J0IHsgTE9DQUxFX1BST1ZJREVSX1NFUlZJQ0VfUFJPVklERVIgfSBmcm9tICcuL2xvY2FsZS1wcm92aWRlci5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW10sXG4gIGRlY2xhcmF0aW9uczogW0xvY2FsZVByb3ZpZGVyUGlwZV0sXG4gIGV4cG9ydHM6IFtMb2NhbGVQcm92aWRlclBpcGVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IExPQ0FMX1BST1ZJREVSX1RPS0VOLCB1c2VWYWx1ZTogemhfQ04gfSwgTE9DQUxFX1BST1ZJREVSX1NFUlZJQ0VfUFJPVklERVJdXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsZVByb3ZpZGVyTW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIEluamVjdG9yLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlck9wdGlvbnMgfSBmcm9tICcuL2RhdGUtcGlja2VyLW9wdGlvbnMucHJvdmlkZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbRGF0ZVBpY2tlcl0nXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgcGlja2VyOiBDb21wb25lbnRSZWY8RGF0ZVBpY2tlckNvbXBvbmVudD47XG4gIHByaXZhdGUgX2V2ZW50TGlzdGVuZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgbW9kZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtaW5EYXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIG1heERhdGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgdXNlMTJIb3VyczogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgdmFsdWU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBASW5wdXQoKVxuICBtYXNrOiBib29sZWFuO1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBva1RleHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgZGlzbWlzc1RleHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGxvY2FsZTogYW55O1xuICBASW5wdXQoKVxuICBhcHBlbmRUb0JvZHk6IGJvb2xlYW47XG4gIEBPdXRwdXQoKVxuICBvblZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIEBPdXRwdXQoKVxuICBvblZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIG9uT2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgb25EaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHRvZ2dsZVBpY2tlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGlja2VyKSB7XG4gICAgICB0aGlzLnNob3dQaWNrZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9lbG06IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM6IERhdGVQaWNrZXJPcHRpb25zLFxuICAgIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBzaG93UGlja2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5waWNrZXIpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgdGhpcy5fZGVmYXVsdE9wdGlvbnMsIHtcbiAgICAgICAgaGlkZVBpY2tlcjogKGV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvcHRpb25hbFBhcmFtczogQXJyYXk8a2V5b2YgRGF0ZVBpY2tlckRpcmVjdGl2ZT4gPSBbXG4gICAgICAgICdtb2RlJyxcbiAgICAgICAgJ21pbkRhdGUnLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdtYXNrJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ29rVGV4dCcsXG4gICAgICAgICdkaXNtaXNzVGV4dCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdsb2NhbGUnLFxuICAgICAgICAnYXBwZW5kVG9Cb2R5JyxcbiAgICAgICAgJ29uT2snLFxuICAgICAgICAnb25EaXNtaXNzJyxcbiAgICAgICAgJ29uVmFsdWVDaGFuZ2UnXG4gICAgICBdO1xuICAgICAgb3B0aW9uYWxQYXJhbXMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1twYXJhbV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgKG9wdGlvbnMgYXMgYW55KVtwYXJhbV0gPSB0aGlzW3BhcmFtXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PERhdGVQaWNrZXJDb21wb25lbnQ+ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxuICAgICAgICBEYXRlUGlja2VyQ29tcG9uZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBEYXRlUGlja2VyT3B0aW9ucyxcbiAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9uc1xuICAgICAgICB9XG4gICAgICBdKTtcbiAgICAgIHRoaXMucGlja2VyID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnksXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoLFxuICAgICAgICBjaGlsZEluamVjdG9yXG4gICAgICApO1xuICAgICAgaWYgKG9wdGlvbnMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGlja2VyKSB7XG4gICAgICB0aGlzLnBpY2tlci5kZXN0cm95KCk7XG4gICAgICBkZWxldGUgdGhpcy5waWNrZXI7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmlzT3Blbikge1xuICAgICAgaWYgKGNoYW5nZXMuaXNPcGVuLmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNob3dQaWNrZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9kYXRlLXBpY2tlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlck9wdGlvbnMgfSBmcm9tICcuL2RhdGUtcGlja2VyLW9wdGlvbnMucHJvdmlkZXInO1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXJNb2R1bGUgfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIExvY2FsZVByb3ZpZGVyTW9kdWxlXSxcbiAgZXhwb3J0czogW0RhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaWNrZXJEaXJlY3RpdmVdLFxuICBkZWNsYXJhdGlvbnM6IFtEYXRlUGlja2VyQ29tcG9uZW50LCBEYXRlUGlja2VyRGlyZWN0aXZlXSxcbiAgZW50cnlDb21wb25lbnRzOiBbRGF0ZVBpY2tlckNvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW0RhdGVQaWNrZXJPcHRpb25zLCBMb2NhbGVQcm92aWRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlck1vZHVsZSB7fVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRlUGlja2VyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXItdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXJNb2R1bGUgfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLm1vZHVsZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGF0ZVBpY2tlck1vZHVsZSwgTG9jYWxlUHJvdmlkZXJNb2R1bGVdLFxuICBleHBvcnRzOiBbRGF0ZVBpY2tlclZpZXdDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtEYXRlUGlja2VyVmlld0NvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW0xvY2FsZVByb3ZpZGVyTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyVmlld01vZHVsZSB7fVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyL2hlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFdlZWtQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vd2Vlay1wYW5lbC93ZWVrLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2NvbmZpcm0tcGFuZWwvY29uZmlybS1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2luZ2xlTW9udGhDb21wb25lbnQgfSBmcm9tICcuL3NpbmdsZS1tb250aC9zaW5nbGUtbW9udGguY29tcG9uZW50JztcbmltcG9ydCB7IFNob3J0Y3V0UGFuZWxDb21wb25lbnQgfSBmcm9tICcuL3Nob3J0Y3V0LXBhbmVsL3Nob3J0Y3V0LXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyVmlld01vZHVsZSB9IGZyb20gJy4uL2RhdGUtcGlja2VyLXZpZXcvZGF0ZS1waWNrZXItdmlldy5tb2R1bGUnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uTW9kdWxlLCBEYXRlUGlja2VyVmlld01vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIEhlYWRlckNvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICAgIFdlZWtQYW5lbENvbXBvbmVudCxcbiAgICBTaW5nbGVNb250aENvbXBvbmVudCxcbiAgICBDb25maXJtUGFuZWxDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBTaG9ydGN1dFBhbmVsQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBIZWFkZXJDb21wb25lbnQsXG4gICAgRGF0ZVBpY2tlckNvbXBvbmVudCxcbiAgICBXZWVrUGFuZWxDb21wb25lbnQsXG4gICAgU2luZ2xlTW9udGhDb21wb25lbnQsXG4gICAgQ29uZmlybVBhbmVsQ29tcG9uZW50LFxuICAgIFRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgU2hvcnRjdXRQYW5lbENvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEVsZW1lbnRSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdQb3BvdmVySXRlbSwgbnptLXBvcG92ZXItaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3BvdmVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBwcmVmaXhDbHM6ICdhbS1wb3BvdmVyJyxcbiAgICBkaXNhYmxlZDogZmFsc2VcbiAgfTtcbiAgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9zdHlsZTtcbiAgcHJpdmF0ZSBfaWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBnZXQgaWNvbigpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5faWNvbjtcbiAgfVxuICBzZXQgaWNvbih2YWx1ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX2ljb24gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICB9XG4gIHNldCBzdHlsZSh2YWx1ZSkge1xuICAgIHRoaXMuX3N0eWxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXBvcG92ZXItaXRlbScpXG4gIGFtUG9wb3Zlckl0ZW06IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXBvcG92ZXItaXRlbS1hY3RpdmUnKVxuICBnZXQgYW1Qb3BvdmVySXRlbUFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0FjdGl2ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXBvcG92ZXItaXRlbS1kaXNhYmxlZCcpXG4gIGdldCBhbVBvcG92ZXJJdGVtRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFByb3BzLmRpc2FibGVkO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hzdGFydCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIHRvdWNoU3RhcnQoZSkge1xuICAgIHRoaXMuc2VsZWN0LmVtaXQoKTtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge31cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUG9wb3Zlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uTW9kdWxlXSxcbiAgZXhwb3J0czogW1BvcG92ZXJJdGVtQ29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbUG9wb3Zlckl0ZW1Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJJdGVtTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnRmxleCwgbnptLWZsZXgnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxleC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRmxleENvbXBvbmVudCB7XG4gIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBwcmVmaXhDbHM6ICdhbS1mbGV4Ym94JyxcbiAgICBhbGlnbjogJ2NlbnRlcidcbiAgfTtcblxuICAvLyBfd3JhcENscyA9IHt9O1xuICBwcml2YXRlIF9kaXJlY3Rpb246IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF93cmFwOiBzdHJpbmc7XG4gIHByaXZhdGUgX2p1c3RpZnk6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9hbGlnbkNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXJlY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLl9kaXJlY3Rpb24gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgd3JhcCh2YWx1ZSkge1xuICAgIHRoaXMuX3dyYXAgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQganVzdGlmeSh2YWx1ZSkge1xuICAgIHRoaXMuX2p1c3RpZnkgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYWxpZ24odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhbGlnbkNvbnRlbnQodmFsdWUpIHtcbiAgICB0aGlzLl9hbGlnbkNvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveCcpXG4gIGFtRmxleGJveDogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC1kaXItcm93JylcbiAgZ2V0IGFtRmxleGJveERpclJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlyZWN0aW9uID09PSAncm93JztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtZGlyLXJvdy1yZXZlcnNlJylcbiAgZ2V0IGFtRmxleGJveERpclJvd1JldmVyc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbiA9PT0gJ3Jvdy1yZXZlcnNlJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtZGlyLWNvbHVtbicpXG4gIGdldCBhbUZsZXhib3hEaXJDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2NvbHVtbic7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWRpci1jb2x1bW4tcmV2ZXJzZScpXG4gIGdldCBhbUZsZXhib3hEaXJDb2x1bW5SZXZlcnNlKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXJlY3Rpb24gPT09ICdjb2x1bW4tcmV2ZXJzZSc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LW5vd3JhcCcpXG4gIGdldCBhbUZsZXhib3hOb3dyYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXAgPT09ICdub3dyYXAnO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC13cmFwJylcbiAgZ2V0IGFtRmxleGJveFdyYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXAgPT09ICd3cmFwJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtd3JhcC1yZXZlcnNlJylcbiAgZ2V0IGFtRmxleGJveFdyYXBSZXZlcnNlKCkge1xuICAgIHJldHVybiB0aGlzLl93cmFwID09PSAnd3JhcC1yZXZlcnNlJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtanVzdGlmeS1zdGFydCcpXG4gIGdldCBhbUZsZXhib3hKdXN0aWZ5U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2p1c3RpZnkgPT09ICdzdGFydCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWp1c3RpZnktY2VudGVyJylcbiAgZ2V0IGFtRmxleGJveEp1c3RpZnlDZW50ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2p1c3RpZnkgPT09ICdjZW50ZXInO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC1qdXN0aWZ5LWVuZCcpXG4gIGdldCBhbUZsZXhib3hKdXN0aWZ5RW5kKCkge1xuICAgIHJldHVybiB0aGlzLl9qdXN0aWZ5ID09PSAnZW5kJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtanVzdGlmeS1iZXR3ZWVuJylcbiAgZ2V0IGFtRmxleGJveEp1c3RpZnlCZXR3ZWVuKCkge1xuICAgIHJldHVybiB0aGlzLl9qdXN0aWZ5ID09PSAnYmV0d2Vlbic7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWp1c3RpZnktYXJvdW5kJylcbiAgZ2V0IGFtRmxleGJveEFsaWduQXJvdW5kKCkge1xuICAgIHJldHVybiB0aGlzLl9qdXN0aWZ5ID09PSAnYXJvdW5kJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtYWxpZ24tc3RhcnQnKVxuICBnZXQgYW1GbGV4Ym94QWxpZ25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdzdGFydCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWFsaWduLWNlbnRlcicpXG4gIGdldCBhbUZsZXhib3hBbGlnbkNlbnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdjZW50ZXInO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC1hbGlnbi1lbmQnKVxuICBnZXQgYW1GbGV4Ym94QWxpZ25FbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAnZW5kJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtYWxpZ24tYmFzZWxpbmUnKVxuICBnZXQgYW1GbGV4Ym94QWxpZ25CYXNlbGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdiYXNlbGluZSc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWFsaWduLXN0cmV0Y2gnKVxuICBnZXQgYW1GbGV4Ym94QWxpZ25TdHJldGNoKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9PT0gJ3N0cmV0Y2gnO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC1hbGlnbi1jb250ZW50LXN0YXJ0JylcbiAgZ2V0IGFtRmxleGJveEFsaWduQ29udGVudFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLl9hbGlnbkNvbnRlbnQgPT09ICdzdGFydCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWFsaWduLWNvbnRlbnQtY2VudGVyJylcbiAgZ2V0IGFtRmxleGJveEFsaWduQ290ZW50Q2VudGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGlnbkNvbnRlbnQgPT09ICdjZW50ZXInO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC1hbGlnbi1jb250ZW50LWVuZCcpXG4gIGdldCBhbUZsZXhib3hBbGlnbkNvbnRlbnRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWduQ29udGVudCA9PT0gJ2VuZCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWFsaWduLWNvbnRlbnQtYmV0d2VlbicpXG4gIGdldCBhbUZsZXhib3hBbGlnbkNvbnRlbnRCZXR3ZWVuKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGlnbkNvbnRlbnQgPT09ICdiZXR3ZWVuJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWZsZXhib3gtYWxpZ24tY29udGVudC1hcm91bmQnKVxuICBnZXQgYW1GbGV4Ym94QWxpZ25Db250ZW50QXJvdW5kKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGlnbkNvbnRlbnQgPT09ICdhcm91bmQnO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZmxleGJveC1hbGlnbi1jb250ZW50LXN0cmV0Y2gnKVxuICBnZXQgYW1GbGV4Ym94QWxpZ25Db250ZW50U3RyZXRjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxpZ25Db250ZW50ID09PSAnc3RyZXRjaCc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0ZsZXhJdGVtLCBuem0tZmxleC1pdGVtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRmxleEl0ZW1Db21wb25lbnQge1xuICBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcHJlZml4Q2xzOiAnYW0tZmxleGJveCcsXG4gICAgYWxpZ246ICdjZW50ZXInXG4gIH07XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1mbGV4Ym94LWl0ZW0nKVxuICBmbGV4Ym94SXRlbTogYm9vbGVhbiA9IHRydWU7XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZsZXhDb21wb25lbnQsIEZsZXhJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9mbGV4LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbRmxleENvbXBvbmVudCwgRmxleEl0ZW1Db21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtGbGV4Q29tcG9uZW50LCBGbGV4SXRlbUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgRmxleE1vZHVsZSB7fVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVGVtcGxhdGVSZWYsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0dyaWQsIG56bS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB3cmFwQ2xzID0ge307XG4gIGl0ZW1DbHMgPSB7fTtcbiAgY2Fyb3VzZWxQcm9wcyA9IHtcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBkcmFnZ2luZzogZmFsc2VcbiAgfTtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIGRhdGE6IFtdLFxuICAgIGhhc0xpbmU6IHRydWUsXG4gICAgaXNDYXJvdXNlbDogZmFsc2UsXG4gICAgY29sdW1uTnVtOiA0LFxuICAgIGNhcm91c2VsTWF4Um93OiAyLFxuICAgIHByZWZpeENsczogJ2FtLWdyaWQnLFxuICAgIHNxdWFyZTogdHJ1ZSxcbiAgICBpdGVtU3R5bGU6IHt9XG4gIH07XG4gIGNhcm91c2VsRGF0YSA9IFtdO1xuICBjYXJvdXNlbERhdGFUbXAgPSBbXTtcbiAgZ3JpZERhdGEgPSBbXTtcblxuICBwcml2YXRlIF9kYXRhID0gW107XG5cbiAgQElucHV0KClcbiAgY29sdW1uTnVtOiBudW1iZXIgPSA0O1xuICBASW5wdXQoKVxuICBjYXJvdXNlbE1heFJvdzogbnVtYmVyID0gMjtcbiAgQElucHV0KClcbiAgaXRlbVN0eWxlOiBvYmplY3QgPSB7fTtcbiAgQElucHV0KClcbiAgc3F1YXJlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgaGFzTGluZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGdldCBpc0Nhcm91c2VsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRQcm9wcy5pc0Nhcm91c2VsO1xuICB9XG4gIHNldCBpc0Nhcm91c2VsICh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmlzQ2Fyb3VzZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICBASW5wdXQoKVxuICBhY3RpdmVTdHlsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKHZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG4gIEBPdXRwdXQoKVxuICBPbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWdyaWQnKVxuICBhbUdyaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWdyaWQtc3F1YXJlJylcbiAgZ2V0IGFtR3JpZFNxdWFyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZSA9PT0gdGhpcy5zcXVhcmU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1ncmlkLWxpbmUnKVxuICBnZXQgYW1HcmlkTGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZSA9PT0gdGhpcy5oYXNMaW5lO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZ3JpZC1jYXJvdXNlbCcpXG4gIGdldCBhbUdyaWRDYXJvdXNlbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZSA9PT0gdGhpcy5pc0Nhcm91c2VsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGlzVGVtcGxhdGVSZWYodmFsdWU6IHt9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBpc1VSTCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuaW5kZXhPZignaHR0cCcpID49IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpbml0KCkge1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxlbmd0aCkgfHwgMDtcbiAgICBsZXQgcm93Q291bnQgPSBNYXRoLmNlaWwoZGF0YUxlbmd0aCAvIHRoaXMuY29sdW1uTnVtKTtcbiAgICBsZXQgcm93c0FycjtcbiAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMuaXNDYXJvdXNlbCkge1xuICAgICAgaWYgKHJvd0NvdW50ICUgdGhpcy5jYXJvdXNlbE1heFJvdyAhPT0gMCkge1xuICAgICAgICByb3dDb3VudCA9IHJvd0NvdW50ICsgdGhpcy5jYXJvdXNlbE1heFJvdyAtIChyb3dDb3VudCAlIHRoaXMuY2Fyb3VzZWxNYXhSb3cpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFnZUNvdW50ID0gTWF0aC5jZWlsKHJvd0NvdW50IC8gdGhpcy5jYXJvdXNlbE1heFJvdyk7XG4gICAgICByb3dzQXJyID0gdGhpcy5nZXRSb3dzKHJvd0NvdW50LCBkYXRhTGVuZ3RoKTtcbiAgICAgIGlmIChwYWdlQ291bnQgPD0gMSkge1xuICAgICAgICB0aGlzLmNhcm91c2VsUHJvcHMgPSB7XG4gICAgICAgICAgZG90czogZmFsc2UsXG4gICAgICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhcm91c2VsUHJvcHMgPSB7XG4gICAgICAgICAgZG90czogdHJ1ZSxcbiAgICAgICAgICBkcmFnZ2luZzogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5jYXJvdXNlbERhdGFUbXAgPSB0aGlzLmdldENhcm91c2VsRGF0YShyb3dzQXJyLCBwYWdlQ291bnQsIHJvd0NvdW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncmlkRGF0YSA9IHRoaXMuZ2V0Um93cyhyb3dDb3VudCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2Fyb3VzZWxEYXRhKHJvd3NBcnI6IGFueVtdLCBwYWdlQ291bnQ6IG51bWJlciwgcm93Q291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2VzQXJyOiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IHBhZ2VDb3VudDsgcGFnZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhZ2VSb3dzOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IHRoaXMuY2Fyb3VzZWxNYXhSb3c7IGlpKyspIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBwYWdlSW5kZXggKiB0aGlzLmNhcm91c2VsTWF4Um93ICsgaWk7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IHJvd0NvdW50KSB7XG4gICAgICAgICAgcGFnZVJvd3MucHVzaChyb3dzQXJyW3Jvd0luZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gw6fCqcK6w6jCisKCw6fCgsK5w6TCuMK6w6TCusKGw6fCocKuw6TCv8Kdw6bCnMKrw6XCsMK+w6nCocK1w6fCmsKEw6bCnMKAw6XCkMKOw6bCnMKqw6XCiMKww6XCusKVw6fCmsKEw6jCocKMw6bCnMKJw6XCusKVw6fCusK/KMOmwqDCt8OlwrzCj8OkwrjCrWxhc3QtY2hpbGTDpMK8wprDpsKywqHDp8K6wr8pXG4gICAgICAgICAgcGFnZVJvd3MucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFnZXNBcnIucHVzaChwYWdlUm93cyk7XG4gICAgfVxuICAgIHJldHVybiBwYWdlc0FycjtcbiAgfVxuXG4gIGdldFJvd3Mocm93Q291bnQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29sdW1uTnVtID0gdGhpcy5jb2x1bW5OdW07XG4gICAgY29uc3Qgcm93QXJyID0gbmV3IEFycmF5KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICByb3dBcnJbaV0gPSBuZXcgQXJyYXkoKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uTnVtOyBqKyspIHtcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gaSAqIGNvbHVtbk51bSArIGo7XG4gICAgICAgIGlmIChkYXRhSW5kZXggPCBkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgcm93QXJyW2ldW2pdID0gdGhpcy5fZGF0YVtkYXRhSW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvd0FycltpXVtqXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd0FycjtcbiAgfVxuXG4gIGNsaWNrKGRhdGEsIGluZGV4KSB7XG4gICAgY29uc3Qgb3V0cHV0RGF0YSA9IHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBpbmRleDogaW5kZXhcbiAgICB9O1xuICAgIHRoaXMuT25DbGljay5lbWl0KG91dHB1dERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pdGVtQ2xzID0ge1xuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYWN0aXZlLWl0ZW1gXTogZmFsc2VcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgSW5qZWN0aW9uVG9rZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgSU5URVJGQUNFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ0ludGVyZmFjZVRva2VuJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tUb3VjaEZlZWRiYWNrXSdcbn0pXG5leHBvcnQgY2xhc3MgVG91Y2hGZWVkYmFja0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHJpdmF0ZSBfY2xhc3NOYW1lO1xuICBASW5wdXQoKSBjbGFzc05hbWU6IEFycmF5PHN0cmluZz47XG4gIEBJbnB1dCgpIGFjdGl2ZVN0eWxlID0gdHJ1ZTtcbiAgQE91dHB1dCgpIGNsaWNrU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xpY2tFbmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7XG5cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgdG91Y2hTdGFydCgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVTdHlsZSkge1xuICAgICAgdGhpcy5hZGRDbGFzcyh0aGlzLl9jbGFzc05hbWUpO1xuICAgICAgdGhpcy5jbGlja1N0YXJ0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICB0b3VjaEVuZCgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVTdHlsZSkge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcyh0aGlzLl9jbGFzc05hbWUpO1xuICAgICAgdGhpcy5jbGlja0VuZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBIb3N0TGlzdGVuZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdUb3VjaEZlZWRCYWNrJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUb3VjaEZlZWRCYWNrQ29tcG9uZW50IHtcbiAgQElucHV0KCkgYWN0aXZlQ2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGFjdGl2ZVN0eWxlID0gdHJ1ZTtcblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgdG91Y2hTdGFydCgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVTdHlsZSkge1xuICAgICAgdGhpcy5fcmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsZS5uYXRpdmVFbGVtZW50LCB0aGlzLmFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIHRvdWNoRW5kKCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZVN0eWxlKSB7XG4gICAgICB0aGlzLl9yZW5kZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYWN0aXZlQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGU6IEVsZW1lbnRSZWYsIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyKSB7fVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBvcHVwU2VydmljZSB7XG4gIHN0YXRpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmID0gbnVsbDtcbiAgc3RhdGljIG92ZXJsYXk6IE92ZXJsYXkgPSBudWxsO1xuICBzdGF0aWMgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIF9vdmVybGF5OiBPdmVybGF5LFxuICAgIHB1YmxpYyBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgICBQb3B1cFNlcnZpY2Uudmlld0NvbnRhaW5lclJlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWY7XG4gICAgUG9wdXBTZXJ2aWNlLm92ZXJsYXkgPSB0aGlzLl9vdmVybGF5O1xuICB9XG5cbiAgc3RhdGljIHNob3dQb3B1cChjb21wb25lbnQsIGNoaWxkSW5qZWN0b3I/OiBJbmplY3Rvcik6IHZvaWQge1xuICAgIGxldCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoKTtcbiAgICBvdmVybGF5Q29uZmlnLmhhc0JhY2tkcm9wID0gdHJ1ZTtcbiAgICBQb3B1cFNlcnZpY2Uub3ZlcmxheVJlZiA9IFBvcHVwU2VydmljZS5vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcbiAgICBQb3B1cFNlcnZpY2Uub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIFBvcHVwU2VydmljZS5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIFBvcHVwU2VydmljZS5vdmVybGF5UmVmLmF0dGFjaChuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgUG9wdXBTZXJ2aWNlLnZpZXdDb250YWluZXJSZWYsIGNoaWxkSW5qZWN0b3IpKTtcbiAgfVxuXG4gIHN0YXRpYyBoaWRlUG9wdXAoKTogdm9pZCB7XG4gICAgaWYgKFBvcHVwU2VydmljZS5vdmVybGF5UmVmKSB7XG4gICAgICBQb3B1cFNlcnZpY2Uub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRvdWNoRmVlZGJhY2tEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZS90b3VjaC1mZWVkYmFjay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVG91Y2hGZWVkQmFja0NvbXBvbmVudCB9IGZyb20gJy4vZGlyZWN0aXZlL3RvdWNoLWZlZWRiYWNrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3B1cFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvcHVwLnNlcnZpY2UnO1xuZXhwb3J0IHsgUG9wdXBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wb3B1cC5zZXJ2aWNlJztcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1RvdWNoRmVlZGJhY2tEaXJlY3RpdmUsIFRvdWNoRmVlZEJhY2tDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtUb3VjaEZlZWRiYWNrRGlyZWN0aXZlLCBUb3VjaEZlZWRCYWNrQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbUG9wdXBTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDb3JlTW9kdWxlIHsgfVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnLi4vZmxleC9mbGV4Lm1vZHVsZSc7XG5pbXBvcnQgeyBDYXJvdXNlbE1vZHVsZSB9IGZyb20gJy4uL2Nhcm91c2VsL2Nhcm91c2VsLm1vZHVsZSc7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi4vY29yZS9jb3JlLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtGbGV4TW9kdWxlLCBJY29uTW9kdWxlLCBDb21tb25Nb2R1bGUsIENhcm91c2VsTW9kdWxlLCBDb3JlTW9kdWxlXSxcbiAgZXhwb3J0czogW0dyaWRDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtHcmlkQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBHcmlkTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQFBpcGUoeyBuYW1lOiAnc2FmZUhUTUwnIH0pXG5leHBvcnQgY2xhc3MgU2FmZUhUTUxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3Nhbml0aXplZDogRG9tU2FuaXRpemVyKSB7fVxuXG4gIHRyYW5zZm9ybSh2YWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplZC5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh2YWx1ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNhZmVIVE1MUGlwZSB9IGZyb20gJy4vc2F2ZS1odG1sJztcbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBTYWZlSFRNTFBpcGVcbiAgXSxcbiAgZXhwb3J0czogW1NhZmVIVE1MUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgTmdab3Jyb0FudGRNb2JpbGVQaXBlc01vZHVsZSB7fVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQWN0aW9uU2hlZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLXNoZWV0LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25TaGVldENvbXBvbmVudCB7XG4gIHByb3BzID0ge1xuICAgIHByZWZpeENsczogJ2FtLWFjdGlvbi1zaGVldCcsXG4gICAgY2FuY2VsQnV0dG9uVGV4dDogJ8Olwo/ClsOmwrbCiCdcbiAgfTtcbiAgZmxhZzogc3RyaW5nID0gJyc7XG4gIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgbWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHRyYW5zaXRpb25OYW1lOiBzdHJpbmcgPSAnJztcbiAgbWFza1RyYW5zaXRpb25OYW1lOiBzdHJpbmcgPSAnJztcbiAgYWN0aXZlQ2xhc3NOYW1lID0gW2Ake3RoaXMucHJvcHMucHJlZml4Q2xzfS1idXR0b24tbGlzdC1pdGVtLWFjdGl2ZWBdO1xuICBvblByZXNzO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBzaG93U2hhcmUoZmxhZykge1xuICAgIGNvbnN0IGNscyA9IHsgW2Ake3RoaXMucHJvcHMucHJlZml4Q2xzfS1zaGFyZWBdOiBmbGFnID09PSAnU0hBUkUnIH07XG4gICAgcmV0dXJuIGNscztcbiAgfVxuXG4gIGlzVGVtcGxhdGVSZWYodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0FycmF5KG9wdGlvbnM6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDAgJiYgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJy4uL2NvcmUvY29yZS5tb2R1bGUnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJy4uL2xpc3QvbGlzdC5tb2R1bGUnO1xuaW1wb3J0IHsgTmdab3Jyb0FudGRNb2JpbGVQaXBlc01vZHVsZSB9IGZyb20gJy4uL3BpcGVzL25nLXpvcnJvLWFudGQtbW9iaWxlLnBpcGVzLm1vZHVsZSc7XG5pbXBvcnQgeyBBY3Rpb25TaGVldENvbXBvbmVudCB9IGZyb20gJy4vYWN0aW9uLXNoZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaW5nQmxhbmtNb2R1bGUgfSBmcm9tICcuLi93aW5nLWJsYW5rL3dpbmctYmxhbmsubW9kdWxlJztcbmltcG9ydCB7IFdoaXRlU3BhY2VNb2R1bGV9IGZyb20gJy4uL3doaXRlLXNwYWNlL3doaXRlLXNwYWNlLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nWm9ycm9BbnRkTW9iaWxlUGlwZXNNb2R1bGUsIExpc3RNb2R1bGUsIFdoaXRlU3BhY2VNb2R1bGUsIFdpbmdCbGFua01vZHVsZSwgQ29yZU1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEFjdGlvblNoZWV0Q29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBY3Rpb25TaGVldENvbXBvbmVudFxuICBdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtBY3Rpb25TaGVldENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uU2hlZXRNb2R1bGUgeyB9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEhvc3RCaW5kaW5nLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBPbkNoYW5nZUV2ZW50IHtcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdTZWdtZW50ZWRDb250cm9sLCBuei1zZWdtZW50ZWQtY29udHJvbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWdtZW50ZWQtY29udHJvbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2VnbWVudGVkQ29udHJvbENvbXBvbmVudCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXNlZ21lbnQnO1xuXG4gIEBJbnB1dCgpXG4gIHRpbnRDb2xvcjogc3RyaW5nID0gJyMyREI3RjUnO1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBzZWxlY3RlZEluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKVxuICB2YWx1ZXM6IEFycmF5PHN0cmluZz5bXTtcbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8T25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICByb2xlID0gJ3RhYmxpc3QnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXNlZ21lbnQnKVxuICBhbVNlZ21lbnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXNlZ21lbnQtZGlzYWJsZWQnKVxuICBnZXQgYW1EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBvbkNsaWNrKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgaW5kZXggIT09IHRoaXMuc2VsZWN0ZWRJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyBzZWxlY3RlZEluZGV4OiBpbmRleCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTZWdtZW50ZWRDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9zZWdtZW50ZWQtY29udHJvbC5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbU2VnbWVudGVkQ29udHJvbENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtTZWdtZW50ZWRDb250cm9sQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBTZWdtZW50ZWRDb250cm9sTW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1RleHRhcmVhSXRlbSAsIG56bS10ZXh0YXJlYS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHRhcmVhLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRhcmVhSXRlbSksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGV4dGFyZWFJdGVtIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tdGV4dGFyZWEnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIGxhYmVsQ2xzOiBvYmplY3Q7XG4gIGNvbnRyb2xDbHM6IG9iamVjdDtcbiAgY2xlYXJDbHM6IG9iamVjdDtcbiAgaGFzQ291bnQ6IGJvb2xlYW47XG4gIGNoYXJhY3Rlckxlbmd0aDogbnVtYmVyO1xuICBpc1RpdGxlU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgbWF4TGVuZ3RoOiBudW1iZXIgPSBJbmZpbml0eTtcblxuICBwcml2YXRlIF9wcmVmaXhMaXN0Q2xzID0gJ2FtLWxpc3QnO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2VkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcm93czogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBfY291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbGFiZWxOdW1iZXI6IG51bWJlciA9IDU7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF90aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzQ2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNDbGlja2luZ0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndGV4dCcpXG4gIHRleHRSZWY7XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgfVxuICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgc2V0IGNsZWFyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3dzO1xuICB9XG4gIHNldCByb3dzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9yb3dzID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICB9XG4gIHNldCBlcnJvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Vycm9yID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbGFiZWxOdW1iZXIodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xhYmVsTnVtYmVyID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gIH1cbiAgc2V0IGNvdW50KHZhbHVlKSB7XG4gICAgdGhpcy5fY291bnQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHRoaXMuc2V0Q2hhcmFjdGVyTGVuZ3RoKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC5uYW1lID0gdGhpcy5fbmFtZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYXV0b0hlaWdodCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9IZWlnaHQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICB9XG4gIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gICAgdGhpcy5pc1RpdGxlU3RyaW5nID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5pc1RpdGxlU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb2N1cyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mb2N1cykge1xuICAgICAgdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuaW5wdXRGb2N1cygnJyk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBhdXRvRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Gb2N1cztcbiAgfVxuICBzZXQgYXV0b0ZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0ZvY3VzID0gdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc2V0Q2xzKCkge1xuICAgIHRoaXMuaGFzQ291bnQgPSB0aGlzLl9jb3VudCA+IDAgJiYgdGhpcy5fcm93cyA+IDE7XG4gICAgdGhpcy53cmFwQ2xzID0ge1xuICAgICAgW2Ake3RoaXMuX3ByZWZpeExpc3RDbHN9LWl0ZW1gXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taXRlbWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kaXNhYmxlZGBdOiB0aGlzLl9kaXNhYmxlZCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZXJyb3JgXTogdGhpcy5fZXJyb3IsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWZvY3VzYF06IHRoaXMuX2ZvY3VzLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1pdGVtLXNpbmdsZS1saW5lYF06IHRoaXMuX3Jvd3MgPT09IDEgJiYgIXRoaXMuX2F1dG9IZWlnaHQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhcy1jb3VudGBdOiB0aGlzLmhhc0NvdW50XG4gICAgfTtcbiAgICB0aGlzLmxhYmVsQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbGBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0yYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAyLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0zYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAzLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC00YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA0LFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC01YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA1LFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC02YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA2LFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC03YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA3XG4gICAgfTtcbiAgICB0aGlzLmNvbnRyb2xDbHMgPSB7IFtgJHt0aGlzLnByZWZpeENsc30tY29udHJvbGBdOiB0cnVlIH07XG4gICAgdGhpcy5jbGVhckNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2xlYXItYWN0aXZlYF06IHRoaXMuX2lzQ2xpY2tpbmdDbGVhclxuICAgIH07XG4gIH1cbiAgc2V0Q2hhcmFjdGVyTGVuZ3RoKCkge1xuICAgIHRoaXMuY2hhcmFjdGVyTGVuZ3RoID0gdGhpcy5jb3VudFN5bWJvbHModGhpcy5fdmFsdWUpO1xuICAgIGlmICh0aGlzLl9jb3VudCA+IDApIHtcbiAgICAgIHRoaXMubWF4TGVuZ3RoID0gdGhpcy5fY291bnQgLSB0aGlzLmNoYXJhY3Rlckxlbmd0aCArICh0aGlzLl92YWx1ZSA/IHRoaXMuX3ZhbHVlLmxlbmd0aCA6IDApO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlKGUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGU7XG4gICAgdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB0aGlzLnNldENoYXJhY3Rlckxlbmd0aCgpO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBpbnB1dEZvY3VzKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9jdXMgPSB0cnVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub25Gb2N1cy5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dEJsdXIodmFsdWUsIGV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIHRoaXMub25CbHVyLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy5faXNDbGVhciA9IGZhbHNlO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBjbGVhcklucHV0KCkge1xuICAgIHRoaXMuX2lzQ2xpY2tpbmdDbGVhciA9IHRydWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgICB0aGlzLmlucHV0Q2hhbmdlKCcnKTtcbiAgICAgIHRoaXMuaW5wdXRGb2N1cyh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLl9pc0NsaWNraW5nQ2xlYXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBlcnJvckNsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5vbkVycm9yQ2xpY2spIHtcbiAgICAgIHRoaXMub25FcnJvckNsaWNrLmVtaXQoZSk7XG4gICAgfVxuICB9XG4gIHJlQWxpZ25IZWlnaHQoKSB7XG4gICAgY29uc3QgdGV4dGFyZWFEb20gPSB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0ZXh0YXJlYURvbS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB0ZXh0YXJlYURvbS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYURvbS5zY3JvbGxIZWlnaHR9cHhgO1xuICB9XG5cbiAgY291bnRTeW1ib2xzKHRleHQgPSAnJykge1xuICAgIGNvbnN0IHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFxcbi9nO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVnZXhBc3RyYWxTeW1ib2xzLCAnXycpLmxlbmd0aDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5zZXRDaGFyYWN0ZXJMZW5ndGgoKTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLl9hdXRvSGVpZ2h0ICYmIHRoaXMuX2ZvY3VzKSB7XG4gICAgICB0aGlzLnJlQWxpZ25IZWlnaHQoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZXh0YXJlYUl0ZW0gfSBmcm9tICcuL3RleHRhcmVhLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW1RleHRhcmVhSXRlbV0sXG4gIGRlY2xhcmF0aW9uczogW1RleHRhcmVhSXRlbSBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVGV4dGFyZWFJdGVtTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBUYWJQYW5lbFBvc2l0aW9uU3RhdGUgPVxuICB8ICdjZW50ZXItd2l0aC1hbmltYXRpb24nXG4gIHwgJ2NlbnRlci13aXRob3V0LWFuaW1hdGlvbidcbiAgfCAndG9wLXdpdGgtYW5pbWF0aW9uJ1xuICB8ICd0b3Atd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4J1xuICB8ICd0b3Atd2l0aG91dC1hbmltYXRpb24nXG4gIHwgJ2xlZnQtd2l0aC1hbmltYXRpb24nXG4gIHwgJ2xlZnQtd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4J1xuICB8ICdsZWZ0LXdpdGhvdXQtYW5pbWF0aW9uJ1xuICB8ICdib3R0b20td2l0aC1hbmltYXRpb24nXG4gIHwgJ2JvdHRvbS13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnXG4gIHwgJ2JvdHRvbS13aXRob3V0LWFuaW1hdGlvbidcbiAgfCAncmlnaHQtd2l0aC1hbmltYXRpb24nXG4gIHwgJ3JpZ2h0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCdcbiAgfCAncmlnaHQtd2l0aG91dC1hbmltYXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdUYWJQYW5lLCBuem0tdGFiLXBhbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLXBhbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtgOmhvc3Qge3RvdWNoLWFjdGlvbjogYXV0b31gXSxcbiAgaG9zdDoge1xuICAgICdbQHRyYW5zbGF0ZVRhYlBhbmVdJzogJ3Bvc2l0aW9uJyxcbiAgICAnKEB0cmFuc2xhdGVUYWJQYW5lLnN0YXJ0KSc6ICdvblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoJGV2ZW50KScsXG4gICAgJyhAdHJhbnNsYXRlVGFiUGFuZS5kb25lKSc6ICdvblRyYW5zbGF0ZVRhYkNvbXBsZXRlKCRldmVudCknXG4gIH0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCd0cmFuc2xhdGVUYWJQYW5lJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdsZWZ0LXdpdGgtYW5pbWF0aW9uJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKScsXG4gICAgICAgICAgdHJhbnNpdGlvbjogJy4zcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSknXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdsZWZ0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAnei1pbmRleCc6IDEwMCxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCknLFxuICAgICAgICAgIHRyYW5zaXRpb246ICcuM3MgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpJ1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdsZWZ0LXdpdGhvdXQtYW5pbWF0aW9uJywgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKScgfSkpLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdyaWdodC13aXRoLWFuaW1hdGlvbicsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKScsXG4gICAgICAgICAgdHJhbnNpdGlvbjogJy4zcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSknXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdyaWdodC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgJ3otaW5kZXgnOiAxMDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMTAwJSwgMCwgMCknLFxuICAgICAgICAgIHRyYW5zaXRpb246ICcuM3MgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpJ1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdyaWdodC13aXRob3V0LWFuaW1hdGlvbicsIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKScgfSkpLFxuICAgICAgc3RhdGUoXG4gICAgICAgICd0b3Atd2l0aC1hbmltYXRpb24nLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApJyxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnLjNzIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSdcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ3RvcC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgJ3otaW5kZXgnOiAxMDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApJyxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnLjNzIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSdcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZSgndG9wLXdpdGhvdXQtYW5pbWF0aW9uJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCknIH0pKSxcbiAgICAgIHN0YXRlKFxuICAgICAgICAnYm90dG9tLXdpdGgtYW5pbWF0aW9uJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsIDEwMCUsIDApJyxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnLjNzIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSdcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2JvdHRvbS13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgJ3otaW5kZXgnOiAxMDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMTAwJSwgMCknLFxuICAgICAgICAgIHRyYW5zaXRpb246ICcuM3MgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpJ1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdib3R0b20td2l0aG91dC1hbmltYXRpb24nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsIDEwMCUsIDApJyB9KSksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2NlbnRlci13aXRoLWFuaW1hdGlvbicsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAnei1pbmRleCc6IDEwMCxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgwLCAwLCAwKScsXG4gICAgICAgICAgdHJhbnNpdGlvbjogJy4zcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSknXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoJ2NlbnRlci13aXRob3V0LWFuaW1hdGlvbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMCwgMCknIH0pKVxuICAgIF0pXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFiUGFuZSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXRhYnMtcGFuZSc7XG4gIHRpbnRDb2xvcjogc3RyaW5nID0gJyMxMDhlZTknO1xuICB1bnNlbGVjdGVkVGludENvbG9yOiBzdHJpbmcgPSAnIzg4OCc7XG4gIGFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzVGl0bGVTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93VGFiUGFuZWxDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHBvc2l0aW9uOiBUYWJQYW5lbFBvc2l0aW9uU3RhdGU7XG5cbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICB9XG4gIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4pIHtcbiAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSAhKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpO1xuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtcGFuZS13cmFwJylcbiAgcGFuZVdyYXA6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtcGFuZS13cmFwLWFjdGl2ZScpXG4gIGdldCB3cmFwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtcGFuZS13cmFwLWluYWN0aXZlJylcbiAgZ2V0IHdyYXBJbmFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYWN0aXZlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG9uVHJhbnNsYXRlVGFiU3RhcnRlZChlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICAoZS50b1N0YXRlID09ICdjZW50ZXItd2l0aC1hbmltYXRpb24nIHx8XG4gICAgICAgIGUudG9TdGF0ZSA9PSAnY2VudGVyLXdpdGhvdXQtYW5pbWF0aW9uJyB8fFxuICAgICAgICBlLnRvU3RhdGUgPT0gJ2xlZnQtd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JyB8fFxuICAgICAgICBlLnRvU3RhdGUgPT0gJ3JpZ2h0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCcgfHxcbiAgICAgICAgZS50b1N0YXRlID09ICd0b3Atd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JyB8fFxuICAgICAgICBlLnRvU3RhdGUgPT0gJ2JvdHRvbS13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnKSAmJlxuICAgICAgKHRoaXMucG9zaXRpb24gPT0gJ2NlbnRlci13aXRoLWFuaW1hdGlvbicgfHxcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9PSAnY2VudGVyLXdpdGhvdXQtYW5pbWF0aW9uJyB8fFxuICAgICAgICB0aGlzLnBvc2l0aW9uID09ICdsZWZ0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCcgfHxcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9PSAncmlnaHQtd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JyB8fFxuICAgICAgICB0aGlzLnBvc2l0aW9uID09ICd0b3Atd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JyB8fFxuICAgICAgICB0aGlzLnBvc2l0aW9uID09ICdib3R0b20td2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JylcbiAgICApIHtcbiAgICAgIHRoaXMuc2hvd1RhYlBhbmVsQ29udGVudCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25UcmFuc2xhdGVUYWJDb21wbGV0ZShlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBlLnRvU3RhdGUgIT09ICdjZW50ZXItd2l0aC1hbmltYXRpb24nICYmXG4gICAgICBlLnRvU3RhdGUgIT09ICdjZW50ZXItd2l0aG91dC1hbmltYXRpb24nICYmXG4gICAgICBlLnRvU3RhdGUgIT09ICdsZWZ0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCcgJiZcbiAgICAgIGUudG9TdGF0ZSAhPT0gJ3JpZ2h0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCcgJiZcbiAgICAgIGUudG9TdGF0ZSAhPT0gJ3RvcC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnICYmXG4gICAgICBlLnRvU3RhdGUgIT09ICdib3R0b20td2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JyAmJlxuICAgICAgdGhpcy5wb3NpdGlvbiAhPT0gJ2NlbnRlci13aXRoLWFuaW1hdGlvbicgJiZcbiAgICAgIHRoaXMucG9zaXRpb24gIT09ICdjZW50ZXItd2l0aG91dC1hbmltYXRpb24nICYmXG4gICAgICB0aGlzLnBvc2l0aW9uICE9PSAnbGVmdC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnICYmXG4gICAgICB0aGlzLnBvc2l0aW9uICE9PSAncmlnaHQtd2l0aC1hbmltYXRpb24td2l0aC1oaWdoZXItemluZGV4JyAmJlxuICAgICAgdGhpcy5wb3NpdGlvbiAhPT0gJ3RvcC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnICYmXG4gICAgICB0aGlzLnBvc2l0aW9uICE9PSAnYm90dG9tLXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCdcbiAgICApIHtcbiAgICAgIHRoaXMuc2hvd1RhYlBhbmVsQ29udGVudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBEb0NoZWNrLFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIFRlbXBsYXRlUmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJQYW5lIH0gZnJvbSAnLi90YWItcGFuZS5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBUYWJEaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuZXhwb3J0IHR5cGUgVGFiQmFyUG9zaXRpb25UeXBlID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG5leHBvcnQgaW50ZXJmYWNlIE9uQ2hhbmdlRXZlbnQge1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdUYWJzLCBuem0tdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWJzIGltcGxlbWVudHMgRG9DaGVjaywgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXRhYnMnO1xuICBzZWxlY3RlZEtleTogbnVtYmVyID0gMDtcbiAga2V5VG9TZWxlY3Q6IG51bWJlciA9IDA7XG4gIHBhbmVNb3ZlU3R5bGU6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgX3N0YXJ0VGltZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdmVsb2NpdHlUaHJlc2hvbGQ6IG51bWJlciA9IDAuMztcbiAgcHJpdmF0ZSBfdGFiRGlyZWN0aW9uOiBUYWJEaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCc7XG4gIHByaXZhdGUgX3RhYkJhclBvc2l0aW9uOiBUYWJCYXJQb3NpdGlvblR5cGUgPSAndG9wJztcblxuICBAQ29udGVudENoaWxkcmVuKFRhYlBhbmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgdGFiUGFuZXM6IFF1ZXJ5TGlzdDxUYWJQYW5lPjtcblxuICBAVmlld0NoaWxkKCdUYWJDb250ZW50JylcbiAgdGFiQ29udGVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnVGFic0JhclN3aXBlJylcbiAgdGFic0JhclN3aXBlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdEZWZhdWx0VGFiQmFyJylcbiAgZGVmYXVsdFRhYkJhcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnVGFic0JhckNvbnRhaW5lcicpXG4gIHRhYnNCYXJDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgcGFnZTogbnVtYmVyID0gNTtcbiAgQElucHV0KClcbiAgc3dpcGVhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgdXNlT25QYW46IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBhbmltYXRlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHRhYkJhclVuZGVybGluZVN0eWxlOiBvYmplY3Q7XG4gIEBJbnB1dCgpXG4gIGRpc3RhbmNlVG9DaGFuZ2VUYWI6IG51bWJlciA9IDAuMztcbiAgQElucHV0KClcbiAgdGFiQmFyQWN0aXZlVGV4dENvbG9yOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KClcbiAgdGFiQmFySW5hY3RpdmVUZXh0Q29sb3I6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICByZW5kZXJUYWJCYXI6IFRlbXBsYXRlUmVmPHZvaWQ+ID0gbnVsbDtcbiAgQElucHV0KClcbiAgdGFiQmFyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI0ZGRic7XG4gIEBJbnB1dCgpXG4gIHRhYkJhclRleHRTdHlsZTogb2JqZWN0ID0ge307XG4gIC8qKiBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzIwODEwIHJlc29sdmVkICoqL1xuICBASW5wdXQoKVxuICB0YWJQYW5lc0NvbXBvbmVudDogUXVlcnlMaXN0PFRhYlBhbmU+ID0gbnVsbDtcbiAgQElucHV0KClcbiAgZ2V0IGFjdGl2ZVRhYigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5O1xuICB9XG4gIHNldCBhY3RpdmVUYWIodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMua2V5VG9TZWxlY3QgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdGFiQmFyUG9zaXRpb24oKTogVGFiQmFyUG9zaXRpb25UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiQmFyUG9zaXRpb247XG4gIH1cbiAgc2V0IHRhYkJhclBvc2l0aW9uKHBvc2l0aW9uOiBUYWJCYXJQb3NpdGlvblR5cGUpIHtcbiAgICB0aGlzLl90YWJCYXJQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRoaXMuYW1UYWJzVG9wID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbVRhYnNMZWZ0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYW1UYWJzUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbVRhYnNCb3R0b20gPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5hbVRhYnNUb3AgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbVRhYnNMZWZ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbVRhYnNSaWdodCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFtVGFic0JvdHRvbSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRoaXMuYW1UYWJzVG9wID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYW1UYWJzTGVmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFtVGFic1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYW1UYWJzQm90dG9tID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHRoaXMuYW1UYWJzVG9wID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYW1UYWJzTGVmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFtVGFic1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbVRhYnNCb3R0b20gPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHRhYkRpcmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiRGlyZWN0aW9uO1xuICB9XG4gIHNldCB0YWJEaXJlY3Rpb24oZGlyZWN0aW9uOiBUYWJEaXJlY3Rpb24pIHtcbiAgICB0aGlzLl90YWJEaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICB0aGlzLmFtVGFic0hvcml6b250YWwgPSB0cnVlO1xuICAgICAgICB0aGlzLmFtVGFic1ZlcnRpY2FsID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICB0aGlzLmFtVGFic0hvcml6b250YWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbVRhYnNWZXJ0aWNhbCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxPbkNoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KClcbiAgb25UYWJDbGljazogRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxPbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGFicycpXG4gIGFtVGFiczogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGFicy10b3AnKVxuICBhbVRhYnNUb3A6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtbGVmdCcpXG4gIGFtVGFic0xlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10YWJzLXJpZ2h0JylcbiAgYW1UYWJzUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10YWJzLWJvdHRvbScpXG4gIGFtVGFic0JvdHRvbTogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtdmVydGljYWwnKVxuICBhbVRhYnNWZXJ0aWNhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtaG9yaXpvbnRhbCcpXG4gIGFtVGFic0hvcml6b250YWw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBjbGlja1RhYihpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRLZXkgIT09IGluZGV4KSB7XG4gICAgICB0aGlzLmtleVRvU2VsZWN0ID0gaW5kZXg7XG4gICAgICB0aGlzLm9uVGFiQ2xpY2suZW1pdCh7IGluZGV4OiB0aGlzLmtleVRvU2VsZWN0IH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEN1cnJlbnRUYWJQYW5lcygpOiBRdWVyeUxpc3Q8VGFiUGFuZT4ge1xuICAgIHJldHVybiB0aGlzLnRhYlBhbmVzQ29tcG9uZW50IHx8IHRoaXMudGFiUGFuZXM7XG4gIH1cblxuICBvblRvdWNoU3RhcnQoZXZlbnQpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBldmVudC50aW1lU3RhbXA7XG4gICAgaWYgKHRoaXMuZ2V0Q3VycmVudFRhYlBhbmVzKCkgJiYgdGhpcy5nZXRDdXJyZW50VGFiUGFuZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoJ2hvcml6b250YWwnID09PSB0aGlzLl90YWJEaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3NpdGlvbiA9XG4gICAgICAgICAgZXZlbnQgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIH0gZWxzZSBpZiAoJ3ZlcnRpY2FsJyA9PT0gdGhpcy5fdGFiRGlyZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPVxuICAgICAgICAgIGV2ZW50ICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5nZXRDdXJyZW50VGFiUGFuZXMoKSAmJiB0aGlzLmdldEN1cnJlbnRUYWJQYW5lcygpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICgnaG9yaXpvbnRhbCcgPT09IHRoaXMuX3RhYkRpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9zdGFydFBvc2l0aW9uO1xuICAgICAgICBpZiAoZGlzdGFuY2UgPCAwICYmIHRoaXMuYWN0aXZlVGFiID09PSB0aGlzLmdldEN1cnJlbnRUYWJQYW5lcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPiAwICYmIHRoaXMuYWN0aXZlVGFiID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZlbG9jaXR5IMOlwrDCj8OkwrrCjsOpwpjCiMOlwoDCvMOmwonCjcOowq7CpMOkwrjCusOmwpjCr3BhbsOmwpPCjcOkwr3CnFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5nZXRWZWxvY2l0eShkaXN0YW5jZSwgZXZlbnQudGltZVN0YW1wIC0gdGhpcy5fc3RhcnRUaW1lKSA8PSB0aGlzLl92ZWxvY2l0eVRocmVzaG9sZCAmJlxuICAgICAgICAgIHRoaXMudXNlT25QYW4gJiZcbiAgICAgICAgICB0aGlzLnN3aXBlYWJsZSAmJlxuICAgICAgICAgIHRoaXMuYW5pbWF0ZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wYW5lTW92ZVN0eWxlID0gJ3RyYW5zbGF0ZTNkKCcgKyBkaXN0YW5jZSArICdweCwgMCwgMCApJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgndmVydGljYWwnID09PSB0aGlzLl90YWJEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy5fc3RhcnRQb3NpdGlvbjtcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgMCAmJiB0aGlzLmFjdGl2ZVRhYiA9PT0gdGhpcy5nZXRDdXJyZW50VGFiUGFuZXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID4gMCAmJiB0aGlzLmFjdGl2ZVRhYiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5nZXRWZWxvY2l0eShkaXN0YW5jZSwgZXZlbnQudGltZVN0YW1wIC0gdGhpcy5fc3RhcnRUaW1lKSA8PSB0aGlzLl92ZWxvY2l0eVRocmVzaG9sZCAmJlxuICAgICAgICAgIHRoaXMudXNlT25QYW4gJiZcbiAgICAgICAgICB0aGlzLnN3aXBlYWJsZSAmJlxuICAgICAgICAgIHRoaXMuYW5pbWF0ZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wYW5lTW92ZVN0eWxlID0gJ3RyYW5zbGF0ZTNkKDAsICcgKyBkaXN0YW5jZSArICdweCwgMCApJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5nZXRDdXJyZW50VGFiUGFuZXMoKSAmJiB0aGlzLmdldEN1cnJlbnRUYWJQYW5lcygpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICgnaG9yaXpvbnRhbCcgPT09IHRoaXMuX3RhYkRpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9zdGFydFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBkaXN0YW5jZVRvQ2hhbmdlVGFiUHggPSB0aGlzLnRhYkNvbnRlbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAqIHRoaXMuZGlzdGFuY2VUb0NoYW5nZVRhYjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmdldFZlbG9jaXR5KGRpc3RhbmNlLCBldmVudC50aW1lU3RhbXAgLSB0aGlzLl9zdGFydFRpbWUpIDw9IHRoaXMuX3ZlbG9jaXR5VGhyZXNob2xkICYmXG4gICAgICAgICAgICAodGhpcy51c2VPblBhbiAmJiB0aGlzLnN3aXBlYWJsZSAmJiBNYXRoLmFicyhkaXN0YW5jZSkgPiBkaXN0YW5jZVRvQ2hhbmdlVGFiUHgpKSB8fFxuICAgICAgICAgICh0aGlzLmdldFZlbG9jaXR5KGRpc3RhbmNlLCBldmVudC50aW1lU3RhbXAgLSB0aGlzLl9zdGFydFRpbWUpID4gdGhpcy5fdmVsb2NpdHlUaHJlc2hvbGQgJiZcbiAgICAgICAgICAgICh0aGlzLnN3aXBlYWJsZSAmJiBNYXRoLmFicyhkaXN0YW5jZSkgPiBkaXN0YW5jZVRvQ2hhbmdlVGFiUHggLyAyKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGRpc3RhbmNlIDwgMCAmJiB0aGlzLmFjdGl2ZVRhYiA8IHRoaXMuZ2V0Q3VycmVudFRhYlBhbmVzKCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5rZXlUb1NlbGVjdCsrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPiAwICYmIHRoaXMuYWN0aXZlVGFiID4gMCkge1xuICAgICAgICAgICAgdGhpcy5rZXlUb1NlbGVjdC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhbmVNb3ZlU3R5bGUgPSAndHJhbnNsYXRlM2QoMCwgMCwgMCApJztcbiAgICAgIH0gZWxzZSBpZiAoJ3ZlcnRpY2FsJyA9PT0gdGhpcy5fdGFiRGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuX3N0YXJ0UG9zaXRpb247XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9DaGFuZ2VUYWJQeCA9IHRoaXMudGFiQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAqIHRoaXMuZGlzdGFuY2VUb0NoYW5nZVRhYjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmdldFZlbG9jaXR5KGRpc3RhbmNlLCBldmVudC50aW1lU3RhbXAgLSB0aGlzLl9zdGFydFRpbWUpIDw9IHRoaXMuX3ZlbG9jaXR5VGhyZXNob2xkICYmXG4gICAgICAgICAgICAodGhpcy51c2VPblBhbiAmJiB0aGlzLnN3aXBlYWJsZSAmJiAgTWF0aC5hYnMoZGlzdGFuY2UpID4gZGlzdGFuY2VUb0NoYW5nZVRhYlB4KSkgfHxcbiAgICAgICAgICAodGhpcy5nZXRWZWxvY2l0eShkaXN0YW5jZSwgZXZlbnQudGltZVN0YW1wIC0gdGhpcy5fc3RhcnRUaW1lKSA+IHRoaXMuX3ZlbG9jaXR5VGhyZXNob2xkICYmXG4gICAgICAgICAgICAodGhpcy5zd2lwZWFibGUgJiYgTWF0aC5hYnMoZGlzdGFuY2UpID4gZGlzdGFuY2VUb0NoYW5nZVRhYlB4IC8gMikpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChkaXN0YW5jZSA8IDAgJiYgdGhpcy5hY3RpdmVUYWIgPCB0aGlzLmdldEN1cnJlbnRUYWJQYW5lcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMua2V5VG9TZWxlY3QrKztcbiAgICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID4gMCAmJiB0aGlzLmFjdGl2ZVRhYiA+IDApIHtcbiAgICAgICAgICAgIHRoaXMua2V5VG9TZWxlY3QtLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYW5lTW92ZVN0eWxlID0gJ3RyYW5zbGF0ZTNkKDAsIDAsIDAgKSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuc2VsZWN0VGFiUGFuZSh0aGlzLmtleVRvU2VsZWN0KTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gdGhpcy5rZXlUb1NlbGVjdDtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAodGhpcy5rZXlUb1NlbGVjdCAhPT0gdGhpcy5zZWxlY3RlZEtleSAmJiB0aGlzLmdldEN1cnJlbnRUYWJQYW5lcygpICYmIHRoaXMuZ2V0Q3VycmVudFRhYlBhbmVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RUYWJQYW5lKHRoaXMua2V5VG9TZWxlY3QpO1xuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHRoaXMua2V5VG9TZWxlY3Q7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyBpbmRleDogdGhpcy5zZWxlY3RlZEtleSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFRhYlBhbmUoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGtleVRvU2VsZWN0ID0gTWF0aC5taW4odGhpcy5nZXRDdXJyZW50VGFiUGFuZXMoKS5sZW5ndGggLSAxLCBNYXRoLm1heChpbmRleCB8fCAwLCAwKSk7XG4gICAgdGhpcy5nZXRDdXJyZW50VGFiUGFuZXMoKS5mb3JFYWNoKCh0YWJQYW5lOiBUYWJQYW5lLCBpbmRleEtleTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoa2V5VG9TZWxlY3QgPCBpbmRleEtleSkge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRlZCkge1xuICAgICAgICAgIGlmICgnaG9yaXpvbnRhbCcgPT09IHRoaXMuX3RhYkRpcmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGtleVRvU2VsZWN0ID09PSBpbmRleEtleSAtIDEpIHtcbiAgICAgICAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICdyaWdodC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICdyaWdodC13aXRoLWFuaW1hdGlvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICgndmVydGljYWwnID09PSB0aGlzLl90YWJEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChrZXlUb1NlbGVjdCA9PT0gaW5kZXhLZXkgLSAxKSB7XG4gICAgICAgICAgICAgIHRhYlBhbmUucG9zaXRpb24gPSAnYm90dG9tLXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YWJQYW5lLnBvc2l0aW9uID0gJ2JvdHRvbS13aXRoLWFuaW1hdGlvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgnaG9yaXpvbnRhbCcgPT09IHRoaXMuX3RhYkRpcmVjdGlvbikge1xuICAgICAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICdyaWdodC13aXRob3V0LWFuaW1hdGlvbic7XG4gICAgICAgICAgfSBlbHNlIGlmICgndmVydGljYWwnID09PSB0aGlzLl90YWJEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRhYlBhbmUucG9zaXRpb24gPSAnYm90dG9tLXdpdGhvdXQtYW5pbWF0aW9uJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5VG9TZWxlY3QgPiBpbmRleEtleSkge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRlZCkge1xuICAgICAgICAgIGlmICgnaG9yaXpvbnRhbCcgPT09IHRoaXMuX3RhYkRpcmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGtleVRvU2VsZWN0ID09PSBpbmRleEtleSArIDEpIHtcbiAgICAgICAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICdsZWZ0LXdpdGgtYW5pbWF0aW9uLXdpdGgtaGlnaGVyLXppbmRleCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YWJQYW5lLnBvc2l0aW9uID0gJ2xlZnQtd2l0aC1hbmltYXRpb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoJ3ZlcnRpY2FsJyA9PT0gdGhpcy5fdGFiRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoa2V5VG9TZWxlY3QgPT09IGluZGV4S2V5ICsgMSkge1xuICAgICAgICAgICAgICB0YWJQYW5lLnBvc2l0aW9uID0gJ3RvcC13aXRoLWFuaW1hdGlvbi13aXRoLWhpZ2hlci16aW5kZXgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICd0b3Atd2l0aC1hbmltYXRpb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoJ2hvcml6b250YWwnID09PSB0aGlzLl90YWJEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRhYlBhbmUucG9zaXRpb24gPSAnbGVmdC13aXRob3V0LWFuaW1hdGlvbic7XG4gICAgICAgICAgfSBlbHNlIGlmICgndmVydGljYWwnID09PSB0aGlzLl90YWJEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRhYlBhbmUucG9zaXRpb24gPSAndG9wLXdpdGhvdXQtYW5pbWF0aW9uJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGVkKSB7XG4gICAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICdjZW50ZXItd2l0aC1hbmltYXRpb24nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhYlBhbmUucG9zaXRpb24gPSAnY2VudGVyLXdpdGhvdXQtYW5pbWF0aW9uJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGtleVRvU2VsZWN0ICE9PSBpbmRleEtleSkge1xuICAgICAgICB0YWJQYW5lLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFiUGFuZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWZWxvY2l0eShkZWx0YURpc3RhbmNlLCBkZWx0YVRpbWUpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoZGVsdGFEaXN0YW5jZSAvIGRlbHRhVGltZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBBZnRlclZpZXdJbml0LFxuICBDb250ZW50Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFRhYkJhclBvc2l0aW9uVHlwZSA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdEZWZhdWx0VGFiQmFyLCBuem0tZGVmYXVsdC10YWItYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlZmF1bHQtdGFiLWJhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRhYkJhckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS10YWJzLWRlZmF1bHQtYmFyJztcbiAgaW5rQmFyU3R5bGU6IG9iamVjdCA9IHt9O1xuICB0YWJzQmFyU3R5bGU6IG9iamVjdCA9IHt9O1xuICBzaG93UHJldjogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93TmV4dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEtleTogbnVtYmVyID0gMDtcbiAgaW5rQmFyT2ZmU2V0OiBudW1iZXIgPSAwO1xuICBpbmtCYXJMZW5ndGg6IG51bWJlciA9IDA7XG4gIHRhYkJhck5hdlN3aXBlZFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICB0YWJCYXJOYXZTd2lwaW5nUG9zaXRpb246IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBAQ29udGVudENoaWxkcmVuKCdUYWJUaXRsZScpXG4gIHRhYlRpdGxlczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBWaWV3Q2hpbGQoJ1RhYnNCYXJTd2lwZScpXG4gIHRhYnNCYXJTd2lwZTogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKVxuICBwYWdlOiBudW1iZXIgPSA1O1xuICBASW5wdXQoKVxuICBhbmltYXRlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHRhYkJhclVuZGVybGluZVN0eWxlOiBvYmplY3Q7XG4gIEBJbnB1dCgpXG4gIHRhYkJhckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNGRkYnO1xuICBASW5wdXQoKVxuICB0YWJCYXJQb3NpdGlvbjogVGFiQmFyUG9zaXRpb25UeXBlID0gJ3RvcCc7XG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVUYWIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEtleTtcbiAgfVxuICBzZXQgYWN0aXZlVGFiKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT09IHRoaXMuc2VsZWN0ZWRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBpbmRleDtcbiAgICAgIGlmICh0aGlzLnRhYlRpdGxlcyAmJiB0aGlzLnRhYlRpdGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0VGFiQmFyU3R5bGVDZW50ZXIoKTtcbiAgICAgICAgdGhpcy5zZXRJbmtCYXJTdGF0dXModGhpcy5zZWxlY3RlZEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10YWJzLXRhYi1iYXItd3JhcCcpXG4gIHRhYkJhcldyYXAgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XG5cbiAgb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKCd0b3AnID09PSB0aGlzLnRhYkJhclBvc2l0aW9uIHx8ICdib3R0b20nID09PSB0aGlzLnRhYkJhclBvc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zdGFydFBvc2l0aW9uID0gZXZlbnQgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3RhcnRQb3NpdGlvbiA9IGV2ZW50ICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICgndG9wJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbiB8fCAnYm90dG9tJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbikge1xuICAgICAgdGhpcy5zZXRUYWJCYXJOYXZTd2lwaW5nUG9zaXRpb24oXG4gICAgICAgIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9zdGFydFBvc2l0aW9uLFxuICAgICAgICB0aGlzLnRhYlRpdGxlcy5maXJzdC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgICB0aGlzLnRhYnNCYXJTd2lwZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy50YWJzQmFyU3R5bGUgPSB7XG4gICAgICAgIHRyYW5zaXRpb246ICcwbXMnLFxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgnICsgdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gKyAncHgsIDBweCwgMHB4KScsXG4gICAgICAgIHdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKCcgKyB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiArICdweCwgMHB4LCAwcHgpJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRUYWJCYXJOYXZTd2lwaW5nUG9zaXRpb24oXG4gICAgICAgIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkgLSB0aGlzLl9zdGFydFBvc2l0aW9uLFxuICAgICAgICB0aGlzLnRhYlRpdGxlcy5maXJzdC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgdGhpcy50YWJzQmFyU3dpcGUubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICAgICk7XG4gICAgICB0aGlzLnRhYnNCYXJTdHlsZSA9IHtcbiAgICAgICAgdHJhbnNpdGlvbjogJzBtcycsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiArICdweCwgMHB4KScsXG4gICAgICAgIHdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiArICdweCwgMHB4KSdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaEVuZCgpIHtcbiAgICB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uID0gdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb247XG4gIH1cblxuICBvbkNvbnRlbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5zZXRUYWJzU3R5bGUoKTtcbiAgICB0aGlzLnNldElua0JhclN0YXR1cyh0aGlzLmFjdGl2ZVRhYik7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXRUYWJzU3R5bGUoKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEtleSA+IDApIHtcbiAgICAgIHRoaXMuc2V0VGFiQmFyU3R5bGVDZW50ZXIoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRJbmtCYXJTdGF0dXModGhpcy5zZWxlY3RlZEtleSk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhYnNTdHlsZSgpIHtcbiAgICBpZiAodGhpcy50YWJUaXRsZXMgJiYgdGhpcy50YWJUaXRsZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCd0b3AnID09PSB0aGlzLnRhYkJhclBvc2l0aW9uIHx8ICdib3R0b20nID09PSB0aGlzLnRhYkJhclBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMudGFiVGl0bGVzLmZvckVhY2goKHRhYlRpdGxlOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRhYlRpdGxlLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgdGhpcy5nZXRUYWJTaXplKHRoaXMucGFnZSwgdGhpcy50YWJUaXRsZXMubGVuZ3RoKSArICclJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJUaXRsZXMuZm9yRWFjaCgodGFiVGl0bGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGFiVGl0bGUubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgdGhpcy5nZXRUYWJTaXplKHRoaXMucGFnZSwgdGhpcy50YWJUaXRsZXMubGVuZ3RoKSArICclJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFiQmFyU3R5bGVDZW50ZXIoKSB7XG4gICAgaWYgKCd0b3AnID09PSB0aGlzLnRhYkJhclBvc2l0aW9uIHx8ICdib3R0b20nID09PSB0aGlzLnRhYkJhclBvc2l0aW9uKSB7XG4gICAgICB0aGlzLnNldFRhYkJhck5hdlN3aXBlZFBvc2l0aW9uKHRoaXMudGFiVGl0bGVzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsIHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgdGhpcy50YWJzQmFyU3R5bGUgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKCcgKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgJ3B4LCAwcHgsIDBweCknLFxuICAgICAgICB3ZWJraXRUcmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgnICsgdGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArICcsIDBweCwgMHB4KSdcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0VGFiQmFyTmF2U3dpcGVkUG9zaXRpb24odGhpcy50YWJUaXRsZXMuZmlyc3QubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQsIHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgIHRoaXMudGFic0JhclN0eWxlID0ge1xuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgwLCAnICsgdGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArICdweCwgMHB4KScsXG4gICAgICAgIHdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgJ3B4LCAwcHgpJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldElua0JhclN0YXR1cyhrZXk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnRhYlRpdGxlcyAmJiB0aGlzLnRhYlRpdGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoJ3RvcCcgPT09IHRoaXMudGFiQmFyUG9zaXRpb24gfHwgJ2JvdHRvbScgPT09IHRoaXMudGFiQmFyUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5pbmtCYXJPZmZTZXQgPSB0aGlzLnRhYlRpdGxlcy50b0FycmF5KClba2V5XS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgIHRoaXMuaW5rQmFyTGVuZ3RoID0gdGhpcy50YWJUaXRsZXMudG9BcnJheSgpW2tleV0ubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aDtcbiAgICAgICAgdGhpcy5pbmtCYXJTdHlsZSA9IHtcbiAgICAgICAgICB3aWR0aDogdGhpcy5pbmtCYXJMZW5ndGgsXG4gICAgICAgICAgbGVmdDogKHRoaXMuc2VsZWN0ZWRLZXkgKiAxMDApIC8gdGhpcy5wYWdlICsgJyUnXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5pbmtCYXJTdHlsZSwgdGhpcy50YWJCYXJVbmRlcmxpbmVTdHlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlua0Jhck9mZlNldCA9IHRoaXMudGFiVGl0bGVzLnRvQXJyYXkoKVtrZXldLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICB0aGlzLmlua0Jhckxlbmd0aCA9IHRoaXMudGFiVGl0bGVzLnRvQXJyYXkoKVtrZXldLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0O1xuICAgICAgICB0aGlzLmlua0JhclN0eWxlID0ge1xuICAgICAgICAgIGhlaWdodDogdGhpcy5pbmtCYXJMZW5ndGgsXG4gICAgICAgICAgdG9wOiAodGhpcy5zZWxlY3RlZEtleSAqIDEwMCkgLyB0aGlzLnBhZ2UgKyAnJSdcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmlua0JhclN0eWxlLCB0aGlzLnRhYkJhclVuZGVybGluZVN0eWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbihzd2lwaW5nRGlzdGFuY2U6IG51bWJlciwgc3dpcGluZ0l0ZW1MZW5ndGg6IG51bWJlciwgdmlld3BvcnRMZW5ndGg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgc3dpcGluZ0Rpc3RhbmNlID4gMCkge1xuICAgICAgdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gPSAwO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgc3dpcGluZ0Rpc3RhbmNlIDxcbiAgICAgIHZpZXdwb3J0TGVuZ3RoIC0gc3dpcGluZ0l0ZW1MZW5ndGggKiB0aGlzLnRhYlRpdGxlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uID0gdmlld3BvcnRMZW5ndGggLSBzd2lwaW5nSXRlbUxlbmd0aCAqIHRoaXMudGFiVGl0bGVzLmxlbmd0aDtcbiAgICAgIHRoaXMuc2hvd05leHQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gPSB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgc3dpcGluZ0Rpc3RhbmNlO1xuICAgICAgdGhpcy5zaG93TmV4dCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiA8IDApIHtcbiAgICAgIHRoaXMuc2hvd1ByZXYgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dQcmV2ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJCYXJOYXZTd2lwZWRQb3NpdGlvbihzd2lwaW5nSXRlbUxlbmd0aDogbnVtYmVyLCB2aWV3cG9ydExlbmd0aDogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RlZEtleSA+PSBNYXRoLmZsb29yKHRoaXMucGFnZSAvIDIpICYmXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5IDw9IHRoaXMudGFiVGl0bGVzLmxlbmd0aCAtIDEgLSBNYXRoLmZsb29yKHRoaXMucGFnZSAvIDIpXG4gICAgKSB7XG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uID0gdmlld3BvcnRMZW5ndGggLyAyIC0gc3dpcGluZ0l0ZW1MZW5ndGggKiAodGhpcy5zZWxlY3RlZEtleSArIDEgLyAyKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRLZXkgPCBNYXRoLmZsb29yKHRoaXMucGFnZSAvIDIpKSB7XG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiA9IHZpZXdwb3J0TGVuZ3RoIC0gc3dpcGluZ0l0ZW1MZW5ndGggKiB0aGlzLnRhYlRpdGxlcy5sZW5ndGg7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uIDwgMCkge1xuICAgICAgdGhpcy5zaG93UHJldiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1ByZXYgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyBzd2lwaW5nSXRlbUxlbmd0aCAqIHRoaXMudGFiVGl0bGVzLmxlbmd0aCAtIHZpZXdwb3J0TGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93TmV4dCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd05leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRhYlNpemUgPSAocGFnZTogbnVtYmVyLCB0YWJMZW5ndGg6IG51bWJlcikgPT4gMTAwIC8gTWF0aC5taW4ocGFnZSwgdGFiTGVuZ3RoKTtcbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2ZXJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL29ic2VydmVycyc7XG5pbXBvcnQgeyBUYWJzIH0gZnJvbSAnLi90YWJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJQYW5lIH0gZnJvbSAnLi90YWItcGFuZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdFRhYkJhckNvbXBvbmVudCB9IGZyb20gJy4vZGVmYXVsdC10YWItYmFyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE9ic2VydmVyc01vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1RhYlBhbmUsIFRhYnMsIERlZmF1bHRUYWJCYXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbVGFiUGFuZSwgVGFicywgRGVmYXVsdFRhYkJhckNvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW11cbn0pXG5leHBvcnQgY2xhc3MgVGFic01vZHVsZSB7fVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBIb3N0QmluZGluZyxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgT3B0aW9uYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJQYW5lIH0gZnJvbSAnLi4vdGFicy90YWItcGFuZS5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9uUHJlc3NFdmVudCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdUYWJCYXJUYWIsIG56bS10YWItYmFyLXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWItYmFyLXRhYi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFiQmFyVGFiIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXRhYi1iYXItdGFiJztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGludENvbG9yOiBzdHJpbmcgPSAnIzEwOGVlOSc7XG4gIHVuc2VsZWN0ZWRUaW50Q29sb3I6IHN0cmluZyA9ICcjODg4JztcblxuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpXG4gIGRvdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBiYWRnZTogbnVtYmVyIHwgc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KClcbiAgaWNvbjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD4gPSBudWxsO1xuICBASW5wdXQoKVxuICBzZWxlY3RlZEljb246IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+ID0gbnVsbDtcbiAgQE91dHB1dCgpXG4gIG9uUHJlc3M6IEV2ZW50RW1pdHRlcjxPblByZXNzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxPblByZXNzRXZlbnQ+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10YWItYmFyLXRhYicpXG4gIHRhYkJhclRhYjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHVibGljIHRhYlBhbmU6IFRhYlBhbmUpIHt9XG5cbiAgaXNUZW1wbGF0ZVJlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLnRhYlBhbmUuYWN0aXZlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnRpbnRDb2xvciA9IHRoaXMudGFiUGFuZS50aW50Q29sb3I7XG4gICAgdGhpcy51bnNlbGVjdGVkVGludENvbG9yID0gdGhpcy50YWJQYW5lLnVuc2VsZWN0ZWRUaW50Q29sb3I7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgQWZ0ZXJDb250ZW50SW5pdCwgSW5wdXQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFiUGFuZSB9IGZyb20gJy4uL3RhYnMvdGFiLXBhbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYkJhclRhYiB9IGZyb20gJy4vdGFiLWJhci10YWIuY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgVGFiQmFyUG9zaXRpb25UeXBlID0gJ3RvcCcgfCAnYm90dG9tJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnVGFiQmFyLCBuem0tdGFiLWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWItYmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJCYXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tdGFiLWJhcic7XG5cbiAgcHJpdmF0ZSBfdGludENvbG9yOiBzdHJpbmcgPSAnIzEwOGVlOSc7XG4gIHByaXZhdGUgX3Vuc2VsZWN0ZWRUaW50Q29sb3I6IHN0cmluZyA9ICcjODg4JztcblxuICBAQ29udGVudENoaWxkcmVuKFRhYlBhbmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgdGFiUGFuZXM6IFF1ZXJ5TGlzdDxUYWJQYW5lPjtcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJCYXJUYWIsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgdGFiQmFyVGFiczogUXVlcnlMaXN0PFRhYkJhclRhYj47XG5cbiAgQElucHV0KClcbiAgaGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGFjdGl2ZVRhYjogbnVtYmVyID0gMDtcbiAgQElucHV0KClcbiAgYmFyVGludENvbG9yOiBzdHJpbmcgPSAnd2hpdGUnO1xuICBASW5wdXQoKVxuICB0YWJCYXJQb3NpdGlvbjogVGFiQmFyUG9zaXRpb25UeXBlID0gJ2JvdHRvbSc7XG4gIEBJbnB1dCgpXG4gIGdldCB0aW50Q29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGludENvbG9yO1xuICB9XG4gIHNldCB0aW50Q29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMuX3RpbnRDb2xvciA9IGNvbG9yO1xuICAgIGlmICh0aGlzLnRhYkJhclRhYnMgJiYgdGhpcy50YWJCYXJUYWJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFiQmFyVGFicy5mb3JFYWNoKCh0YWJCYXJUYWI6IFRhYkJhclRhYikgPT4ge1xuICAgICAgICB0YWJCYXJUYWIudGludENvbG9yID0gdGhpcy5fdGludENvbG9yO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB1bnNlbGVjdGVkVGludENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Vuc2VsZWN0ZWRUaW50Q29sb3I7XG4gIH1cbiAgc2V0IHVuc2VsZWN0ZWRUaW50Q29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMuX3Vuc2VsZWN0ZWRUaW50Q29sb3IgPSBjb2xvcjtcbiAgICBpZiAodGhpcy50YWJCYXJUYWJzICYmIHRoaXMudGFiQmFyVGFicy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRhYkJhclRhYnMuZm9yRWFjaCgodGFiQmFyVGFiOiBUYWJCYXJUYWIpID0+IHtcbiAgICAgICAgdGFiQmFyVGFiLnVuc2VsZWN0ZWRUaW50Q29sb3IgPSB0aGlzLl91bnNlbGVjdGVkVGludENvbG9yO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10YWItYmFyJylcbiAgdGFiQmFyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc2VsZWN0VGFiUGFuZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy50YWJQYW5lcy5mb3JFYWNoKCh0YWJQYW5lOiBUYWJQYW5lLCBpbmRleEtleTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoaW5kZXggPCBpbmRleEtleSkge1xuICAgICAgICB0YWJQYW5lLnBvc2l0aW9uID0gJ3JpZ2h0LXdpdGhvdXQtYW5pbWF0aW9uJztcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiBpbmRleEtleSkge1xuICAgICAgICB0YWJQYW5lLnBvc2l0aW9uID0gJ2xlZnQtd2l0aG91dC1hbmltYXRpb24nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFiUGFuZS5wb3NpdGlvbiA9ICdjZW50ZXItd2l0aG91dC1hbmltYXRpb24nO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9PSBpbmRleEtleSkge1xuICAgICAgICB0YWJQYW5lLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFiUGFuZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnRhYkJhclRhYnMgJiYgdGhpcy50YWJCYXJUYWJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFiQmFyVGFicy5mb3JFYWNoKCh0YWJCYXJUYWI6IFRhYkJhclRhYikgPT4ge1xuICAgICAgICB0YWJCYXJUYWIuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJCYXJUYWJzLnRvQXJyYXkoKVtpbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50YWJCYXJUYWJzLnRvQXJyYXkoKVtpbmRleF0ub25QcmVzcy5lbWl0KHtcbiAgICAgICAgdGl0bGU6IHRoaXMudGFiQmFyVGFicy50b0FycmF5KClbaW5kZXhdLnRpdGxlLFxuICAgICAgICBrZXk6IHRoaXMudGFiQmFyVGFicy50b0FycmF5KClbaW5kZXhdLmtleVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuc2VsZWN0VGFiUGFuZSh0aGlzLmFjdGl2ZVRhYik7XG4gICAgdGhpcy50YWJQYW5lcy5mb3JFYWNoKCh0YWJQYW5lOiBUYWJQYW5lKSA9PiB7XG4gICAgICB0YWJQYW5lLnRpbnRDb2xvciA9IHRoaXMudGludENvbG9yO1xuICAgICAgdGFiUGFuZS51bnNlbGVjdGVkVGludENvbG9yID0gdGhpcy51bnNlbGVjdGVkVGludENvbG9yO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICcuLi90YWJzL3RhYnMubW9kdWxlJztcbmltcG9ydCB7IFRhYkJhciB9IGZyb20gJy4vdGFiLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFkZ2VNb2R1bGUgfSBmcm9tICcuLi9iYWRnZS9iYWRnZS5tb2R1bGUnO1xuaW1wb3J0IHsgVGFiQmFyVGFiIH0gZnJvbSAnLi90YWItYmFyLXRhYi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUYWJzTW9kdWxlLCBCYWRnZU1vZHVsZV0sXG4gIGV4cG9ydHM6IFtUYWJCYXIsIFRhYkJhclRhYl0sXG4gIGRlY2xhcmF0aW9uczogW1RhYkJhciwgVGFiQmFyVGFiXSxcbiAgcHJvdmlkZXJzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJCYXJNb2R1bGUge31cbiIsImltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyT3B0aW9uc0ludGVyZmFjZSB7XG4gIGRhdGE/OiBBcnJheTxhbnk+O1xuICBjb2xzPzogbnVtYmVyO1xuICBtYXNrPzogYm9vbGVhbjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIG9rVGV4dD86IHN0cmluZztcbiAgZGlzbWlzc1RleHQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgY2FzY2FkZT86IGJvb2xlYW47XG4gIGFwcGVuZFRvQm9keT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQaWNrZXJPcHRpb25zIGltcGxlbWVudHMgUGlja2VyT3B0aW9uc0ludGVyZmFjZSB7XG4gIGRhdGE/OiBBcnJheTxhbnk+ID0gW107XG4gIHZhbHVlPzogQXJyYXk8YW55PiA9IFtdO1xuICBjb2xzPzogbnVtYmVyID0gMztcbiAgbWFzaz86IGJvb2xlYW4gPSB0cnVlO1xuICB0aXRsZT86IHN0cmluZyA9ICcnO1xuICBva1RleHQ/OiBzdHJpbmcgPSAnw6fCocKuw6XCrsKaJztcbiAgZGlzbWlzc1RleHQ/OiBzdHJpbmcgPSAnw6XCj8KWw6bCtsKIJztcbiAgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIGNhc2NhZGU/OiBib29sZWFuID0gdHJ1ZTtcbiAgYXBwZW5kVG9Cb2R5PzogYm9vbGVhbiA9IGZhbHNlO1xuICBvbk9rPzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uRGlzbWlzcz86IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvblBpY2tlckNoYW5nZT86IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBpbmRpY2F0b3JTdHlsZT86IG9iamVjdCA9IHt9O1xuICBoaWRlUGlja2VyPzogKCkgPT4gdm9pZDtcbiAgY29uZmlybT86IChyZXN1bHQpID0+IHZvaWQ7XG4gIGNhbmNlbD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFBpY2tlckNhbGxCYWNrID0gKHJlc3VsdD86IGFueSkgPT4gUHJvbWlzZUxpa2U8YW55PiB8IHZvaWQ7XG4iLCJleHBvcnQgZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBsYWJlbDogJ8OlwozCl8OkwrrCrCcsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKMwpfDpMK6wqzDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCuMKcw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKlwr/DpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OlwrTCh8OmwpbCh8OlwozCuicsXG4gICAgICAgICAgICAnw6XCrsKjw6bCrcKmw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKcwp3DqcKYwrPDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCsMOlwo/CsMOlwozCuicsXG4gICAgICAgICAgICAnw6fCn8Kzw6bCmcKvw6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsK1wrfDpsK3woDDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpfCqMOlwqTCtMOmwrLCn8OlwozCuicsXG4gICAgICAgICAgICAnw6bCiMK/w6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKAwprDpcK3wp7DpcKMwronLFxuICAgICAgICAgICAgJ8OpwqHCusOkwrnCicOlwozCuicsXG4gICAgICAgICAgICAnw6bCmMKMw6XCucKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDpcKFwrTDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrnCs8OowrDCt8OlwozCuicsXG4gICAgICAgICAgICAnw6bCgMKAw6bCn8KUw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKvwobDpMK6wpHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrvCtsOlwrrChsOlwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6XCpMKpw6bCtMKlw6XCuMKCJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwqTCqcOmwrTCpcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKSwozDpcK5wrPDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCs8OkwrjCnMOlwozCuicsXG4gICAgICAgICAgICAnw6bCssKzw6jCpcK/w6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKNwpfDpcK8woDDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCs8OlwozCl8OlwozCuicsXG4gICAgICAgICAgICAnw6fCusKiw6bCocKlw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKhwpjDpsKywr3DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrHCicOmwrLCvcOlwozCuicsXG4gICAgICAgICAgICAnw6XCpMKnw6bCuMKvw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wpzDpMK4wr3DpcKMwronLFxuICAgICAgICAgICAgJ8OowqXCv8Opwp3CksOlwozCuicsXG4gICAgICAgICAgICAnw6bCtMKlw6XCjcKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKMwpfDqMK+wrDDpcKMwronLFxuICAgICAgICAgICAgJ8Omwq3CpsOmwrjChcOlwozCuicsXG4gICAgICAgICAgICAnw6XCrsKdw6XCncK7w6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKuwoHDpsKywrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Opwp3CmcOmwrXCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCk8KfICDDpcKOwr8nXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OmwrLCs8OlwozCl8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8KfwrPDpcKuwrbDpcK6woTDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nClcK/w6XCrsKJw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKhwqXDpMK4wpzDpcKMwronLFxuICAgICAgICAgICAgJ8OmwqHCpcOowqXCv8OlwozCuicsXG4gICAgICAgICAgICAnw6bClsKww6XCjcKOw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKDwoogIMOlwozCuicsXG4gICAgICAgICAgICAnw6TCusKVw6nCmcKJw6fCn8K/w6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK6wpXDqcKZwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq3Co8Olwq7CmsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCoMK+w6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKhwozDpcKUwpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwoHCtcOlwq/Cv8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCq8KYw6nCgsKRw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK3wrHDpsKzwr3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OowrXCnsOnwprCh8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCl8Kgw6bCnsKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCg8OmwrDCj8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCtcK1ICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowr7Cm8OpwpvChsOlwrjCgicsXG4gICAgICAgICAgICAnw6jCl8KBJyxcbiAgICAgICAgICAgICfDpsKZwovDpcK3wp7DpcK4woInLFxuICAgICAgICAgICAgJ8OmwpbCsMOkwrnCkMOlwrjCgicsXG4gICAgICAgICAgICAnw6nCucK/w6bCs8KJw6XCuMKCJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XClMKQw6XCscKxw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OowrfCr8Olwo3Cl8OlwozCuicsXG4gICAgICAgICAgICAnw6jCt8Kvw6XCjMKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKPwqTDpcKGwrbDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrzCgMOlwrnCs8OlwozCuicsXG4gICAgICAgICAgICAnw6bClsKwICDDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCsMOmwrbCpsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCu8KmICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrvCpsOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCucKQw6TCusKtw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK/woHDqMKlwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwo7CicOnwpTCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6XClMKQw6bCtcK3w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKBwrXDpcKMwpbDpcK4woInLFxuICAgICAgICAgICAgJ8OkwrjCsMOlwo3Cl8OlwrjCgicsXG4gICAgICAgICAgICAnw6jCv8KBw6XCrsKJw6XCuMKCJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCp8Kmw6fCmsKHw6XCssKbw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK1wrfDpsK4wq/DpcKMwronLCAnw6XCscKxw6bCtcK3w6XChcKzw6XCjMK6JywgJ8OlwozCl8OmwojCtMOmwrLCs8OlwozCuicsICfDqcKdwpLDqcK+wpnDpsK7wqHDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6bCmMKMw6nCu8KOw6XCjsK/JywgJ8OmworCmsOlwq7CgcOlwo7CvycsICfDpcKNwqLDqcK+wpnDpcKOwr8nXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKCwq/DqcKDwrjDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCgsKvw6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wpvDpcKPwrDDpcKMwronLFxuICAgICAgICAgICAgJ8OlwqTCjcOlwoXCtMOlwozCuicsXG4gICAgICAgICAgICAnw6XCs8Kww6XCs8Kww6fCn8K/w6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKCwq/DqcKDwrjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCtMOmwrzCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCiMKQw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKkwqfDpcKQwo3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrbCiSAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KjwoEgIMOlwo7CvycsXG4gICAgICAgICAgICAnw6jCgsKlw6TCucKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKwwrjDpcK5wrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoLCsSAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK4wqHDpsKzwr3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCv8OlwrnCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCpsKGw6nCmcK2w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKtwo8gIMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCm8Kyw6XCkcKow6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKtwqbDpcKuwonDpcK4woInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKCwqLDpcKPwrDDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCocKlw6TCuMKcw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKhwqXDqMKlwr/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwoLCosOlwo/CsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK0w6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKGwoXDpMK4wpjDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwp/Cj8OkwrnCocOlwo7CvycsXG4gICAgICAgICAgICAnw6nCmsKGw6XCsMKnw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK7wrsgIMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKXw6XCksKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwoHDpsKZwovDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrfCqMOpwrnCv8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6bCssKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wr/DpcKuwpfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCs8OkwrnCocOlwo7CvycsXG4gICAgICAgICAgICAnw6XCqMKBICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrjChcOmwrLCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK0w6jCpcK/w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKNwpfDpcKuwqvDpcK4woInLFxuICAgICAgICAgICAgJ8OmwrLCmcOmwrLCs8OlwrjCgidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Okwr/CncOlwq7CmsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKWwrDDpcK4woLDpcKMwronLFxuICAgICAgICAgICAgJ8OlwozCl8OlwrjCgsOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCuMKCw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsK7wqHDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrjChcOowovCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCtsKew6bCsMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKYwpzDpcK5wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwr7CkMOmwrDCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKaw6XChcK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKUwpAgIMOlwo7CvycsXG4gICAgICAgICAgICAnw6nCq8KYw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwrnDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrbCnsOmwrrCkMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCnMKbw6nCg8K9w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwonDpsKWwrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpjCkyAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKbwrLDqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowqDCoSAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKhwrrDpcK5wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3CmsOpwofCjicsXG4gICAgICAgICAgICAnw6nCm8KEw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK2wr/DpcK3wp7DpcK4woInLFxuICAgICAgICAgICAgJ8Olwq7CmsOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgICAnw6XCrsKJw6XCm8K9w6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKrwpjDp8KiwpHDpcK6wpfDpcK4woInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK8wqDDpcKuwrbDpcKPwqMnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCocKlw6TCuMKcw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKhwqXDqMKlwr/DpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7Co8OlwozClsOlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKLw6jCisKxw6XCm8Ktw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKuwqPDpcKMwpbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrzCoMOlwozCl8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCusK3w6TCv8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKywr3DpsK6wpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrDCmsOkwrnCicOlwo7CvycsXG4gICAgICAgICAgICAnw6jClMKaICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpjCs8Olwo7Cn8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCgMKAw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wofDpcKFwqjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwoDCgMOmwp3CpcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCtsK/w6nCucK/w6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK1wqTDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrTCh8OnwqTCvMOlwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwonCv8Olwr7Ct8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKPwozDpsKhwqXDpcKMwronLFxuICAgICAgICAgICAgJ8Olwo/CjMOmwrvCpsOlwozCuicsXG4gICAgICAgICAgICAnw6nCucKww6bCicKLw6jCkMKlw6XCrcKQw6fCn8K/w6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKJwr/DpcK+wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtMOpwprChsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCucKzw6bCs8KJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK7wqbDpcK5wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwprChsOlwozClsOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKww6XCrsKBw6bCu8Khw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwr3DpcKfwo7DpsK7wqHDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpvCtMOlwpzCusOmwrvCocOmwpfCj8OowpLCmcOlwo/CpMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrLCp8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKWwrDDpcKNwo7DpcKMwronLFxuICAgICAgICAgICAgJ8Oowr/CkMOmwrLCs8OlwozCuicsXG4gICAgICAgICAgICAnw6bCssKnICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Opwp3CkiAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wpzDpcKFwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrXCt8OlwoXCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6fCm8KQw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKCwoPDpcKuwoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8OnwprCrsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCkMK0w6bCocKlw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KMwq4gIMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrcKfw6bCncKRw6XCm8Kew6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKzworDpcKkwrTDpcK4woInLFxuICAgICAgICAgICAgJ8OkwrvCu8OkwrjCmMOlwrjCgicsXG4gICAgICAgICAgICAnw6nCu8KEw6nCqsKFw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKywrPDqcKXwrTDpcK4woInXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK7worDpcKdworDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Olwq7CicOmwqzCocOlwozCuicsICfDpcKbwrrDpcKuwonDpcKOwr8nLCAnw6bCsMK4w6bCuMKFw6XCjsK/JywgJ8OpwqbCmcOmwrLCs8Olwo7CvycsICfDpcKkwqfDpcKfwo7DpcKOwr8nLCAnw6bClsKHw6XCrsKJw6XCjsK/JywgJ8OlwqTCp8Olwo7CgsOlwpvCnsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDqcKcwrjDpcK3wp7DpcK4woInLCAnw6TCuMKJw6bCssKzw6XCuMKCJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCocKhw6bCsMK0w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OmwqHCg8Olwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6bCnsKjw6XCvMK6w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKtwqbDqcKCwpHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq3CpsOlwrzCusOlwo7CvycsXG4gICAgICAgICAgICAnw6nCpcK2w6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwonDpcK5wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpXChcOlwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCmcKvICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpjCnMOlwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6XChsKAw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDpsK3wrHDpcK3wp7DpcK4woInXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OlwrHCscOowqXCv8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKkwqrDpcKOwp/DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCsMKPw6XCusKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMK/wo7DpsKzwr3DpcKMwronLFxuICAgICAgICAgICAgJ8Omwp3Cj8OoworCscOlwrLCrcOlwozCuicsXG4gICAgICAgICAgICAnw6XCsMKWw6jCjcKJw6XCncKqw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wofDpsKfwo/DpsKewpfDpcKMwronLFxuICAgICAgICAgICAgJ8OmwpnCi8OmwrrCkMOlwozCuicsXG4gICAgICAgICAgICAnw6bCuMKFw6XCvsKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKYwrPDpsKbwrLDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqjChMOnwoPCpsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCj8Kkw6TCusKkw6XCuMKCJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCpMKnw6XCkMKMw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Olwp/CjiAgw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8Kfwr8gIMOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6nCg8KKw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKWwrDDqMKNwqPDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpjCs8OpwqvCmMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKpw6nClcKHw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wr/Dp8KBwrXDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwoHCtcOkwrjCmMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCtcKRw6bCusKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK3wqbDpMK6wpHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCp8OlwpDCjMOlwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwpjCs8OmwrPCicOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCn8KOICDDpcKMwronLCAnw6fCn8K/ICDDpcKMwronLCAnw6nCg8KKICDDpcKMwronLCAnw6XCucKzw6XCrsKaw6XCjsK/JywgJ8OnwpvCgiAgw6XCjsK/J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nClcK/w6bCssK7w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Olwp/CjiAgw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKDwoogIMOlwozCuicsXG4gICAgICAgICAgICAnw6nClcK/w6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKlwoTDpcKewqPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrHCr8OnwpXCmcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCucKzw6nCocK6w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK7wo7DpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqPCtsOlwoXCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6nClcK/w6XCrcKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKtwqbDpMK5wqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrLCgSAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKywoHDpsK6wpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwr3CnsOlwp/CjsOlwrjCgidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpnCi8Olwp/CjsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCn8KOICDDpcKMwronLCAnw6bCssKBw6bCsMK0w6XCjsK/JywgJ8OpwpjCs8Olwp/CjsOlwo7CvycsICfDqcKZwrXDpcK3wp3DpcKOwr8nLCAnw6bCs8K9w6XCt8Kew6XCjsK/JywgJ8OpwqvCmMOlwrnCs8OlwrjCgiddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpzClMOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCnMKUw6XCn8KOw6XCjMK6JywgJ8OlwrnCs8OpwrLCgcOlwozCuicsICfDpcKxwrHDqcKYwrTDpcKOwr8nLCAnw6XCusKUICDDpcKOwr8nLCAnw6XCj8Kzw6fCjsKJw6XCjsK/JywgJ8OmwoDCgMOkwrvCgcOlwo7CvyddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwr/Cu8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcK/wrvDpcK6wpzDpcKMwronLFxuICAgICAgICAgICAgJ8Olwo7Cn8OlwrnCs8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCrsKaw6jCpcKEw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK6wpTDpcKPwrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrvCoyAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8K5woHDpcKzwpnDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CgcOmwq3CpsOlwo7CvycsXG4gICAgICAgICAgICAnw6nCncKZw6TCucKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8Klwp7DpsKxwqDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrrClMOlwq/CqMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCssKiw6XCssKaw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKywrPDpsKbwrLDpcKOwr8nLFxuICAgICAgICAgICAgJ8Okwr/CncOlwr7Ct8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCgcKPw6XChcKzw6XCjsK/J1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCkMKVw6bCosKBw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OnwqbCu8Onwp/Cs8OlwozCuicsXG4gICAgICAgICAgICAnw6XCrcKdw6TCucKJw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKxwr7DqcKYwrPDpcK4woInLFxuICAgICAgICAgICAgJ8OmwpbCh8OmwrDCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCusKkw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrQgIMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK0ICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwp/Cs8Omwp7Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCn8Kzw6bCpcK8w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKywpogIMOlwo7CvycsXG4gICAgICAgICAgICAnw6bClsK5w6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wq3DqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrrCpMOlwo/Co8Olwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpnCi8OkwrjCrcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKmwobDpsKswqHDpcK4woInLFxuICAgICAgICAgICAgJ8OkwrvCi8OkwrzCkcOlwrjCgicsXG4gICAgICAgICAgICAnw6bCpsKGw6fCpMK+w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK3wqbDpsKdwoPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpLCjMOpwqHCusOlwo7CvycsXG4gICAgICAgICAgICAnw6bCmMKUw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKvwr/DqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCqsOowrDCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCpcKBICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCs8OpwoHCpcOlwo7CvycsXG4gICAgICAgICAgICAnw6fCgcK1w6fCn8Kzw6XCjsK/J1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMK0w6bCscK+w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OkwrjCtMOmwrHCvsOlwrjCgicsXG4gICAgICAgICAgICAnw6TCvsKvw6nCqcKsw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKcwo3DpcK3wp7DpcK4woInLFxuICAgICAgICAgICAgJ8OmwpvCssOmwrLCg8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCv8K8w6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKlwoTDpsKxwr7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrTCqsOmwrTCnsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCj8KkICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CicOmwrPCvcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCtcKuw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKQwokgIMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCucKhw6XCrsKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKSwrIgIMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKnw6XCrsKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKwwrjDpcKSwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwprCsCAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKxwr7DqMKlwr/DpcKOwr8nXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMK/wpDDpcKfwo7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCv8KQw6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKwwrjDpsK1wo7DpcK4woInLFxuICAgICAgICAgICAgJ8OmwrLCs8OmwrTCpcOlwrjCgicsXG4gICAgICAgICAgICAnw6jCisKuw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wrTDp8KMwpfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCh8Oowo3Co8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6fCu8Kbw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KowrfDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpfCu8OlwpbCnMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKPICDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwrvCmyAgw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDqcKZwobDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwp7Co8OmwpvCssOlwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6XChsKFw6jCksKZw6XCj8KkJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpHCvMOlwpLCjMOmwrXCqcOnwonCucOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKWwrDDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OlwpvCnsOmwrDCkcOlwozCuicsXG4gICAgICAgICAgICAnw6fCjsKJw6bCs8KJw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKDwoogIMOlwozCuicsXG4gICAgICAgICAgICAnw6XCnMKfw6nCu8KYw6fCicK5w6XCt8Kmw6bCl8KXJyxcbiAgICAgICAgICAgICfDpsKJwpjDpcKFwovDpsKJwpjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpLCjMOmwp7Cl8OmwqDCvMOlwrDClMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCuMKFw6bCsMK0w6bCssKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKtwqbDpcK3wp3DpcKOwr8nXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKMwoXDpcKkwrTDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCuMKcw6bCssKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKYwobDqcKDwr3DpMK8wqbDpcKMwronLFxuICAgICAgICAgICAgJ8Opwp3CksOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6fCn8Kzw6bCi8KQw6fCn8K/w6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KZwr3DpMK6wpHDp8Kfwr/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwoPCiiAgw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKcwp/DqcK7wpjDp8KJwrnDpcKPwrPDpsKXwpcnLFxuICAgICAgICAgICAgJ8OlwpvCusOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCvsK+w6XCsMKUw6fCvcKVw6jCjMKCw6bCmMKOw6XCrsKJw6jCgcKUw6XCkMKIw6bCl8KXJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCucKMw6bCtcK3w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK1wrfDpcKLwoPDpsK5wr7DpcKMwronLCAnw6bCtcK3w6XCjcKXw6XCjMK6JywgJ8OkwrnCjMOowr7CvsOlwozCuiddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowrXCpMOlwrPCsMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDp8K6wqLDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OlwoXCg8Olwq7CncOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6bCncK+w6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKYwr/DqcKywoHDp8KnwpHDpcKwwpTDpsKywoHDpsKXwpcnLFxuICAgICAgICAgICAgJ8OlwrfCtMOmwp7Cl8OlwrfCpsOmwpfClycsXG4gICAgICAgICAgICAnw6XCt8K0w6bCnsKXw6XCj8Kzw6bCl8KXJyxcbiAgICAgICAgICAgICfDpsKewpfDqMKlwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCi8OkwrvCgMOlwoXCi8OowoXCvsOmwpfClycsXG4gICAgICAgICAgICAnw6fCv8KBw6fCicKbw6fCicK5w6bCl8KXJyxcbiAgICAgICAgICAgICfDpcKWwoDDpcKWwofDpsKywoHDpsKXwpcnLFxuICAgICAgICAgICAgJ8Olwq7CgcOlwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6bClcKWw6bCscKJw6bCl8KXJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCkcK8w6TCvMKmw6jCtMKdw6XCsMKUw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OmwrXCt8OmwovCicOlwrDClMOlwrjCgicsXG4gICAgICAgICAgICAnw6bCu8Khw6bCtMKyw6nCh8KMw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKJwo7DpcKFwrDDpcKxwq/DpcK4woInLFxuICAgICAgICAgICAgJ8OnwonCmcOlwoXCi8Onwp/Cs8OlwrjCgicsXG4gICAgICAgICAgICAnw6bCoMK5w6bCssKzw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKiwp3DpcKwwpTDpcKPwqTDp8K6wrPDpcK4woInLFxuICAgICAgICAgICAgJ8OpwpjCv8Oowo3Co8OmwpfClycsXG4gICAgICAgICAgICAnw6jCjsKrw6XCisKbw6jCvsK+w6fCk8Kmw6jCvsK+w6bClsKhw6XCsMKUw6bCl8KPw6jCh8Kqw6bCssK7w6bCl8KXJyxcbiAgICAgICAgICAgICfDqcKEwoLDpMK8wqbDpsKYwqXDqMKHwqrDpsKywrvDpsKXwpcnLFxuICAgICAgICAgICAgJ8OpwoTCgsOmwrjCqcOlwoXCi8OmwpfCj8OowofCqsOmwrLCu8OmwpfClycsXG4gICAgICAgICAgICAnw6bClsKww6XCt8K0w6XCsMKUw6jCmcKOw6XCj8Kzw6bCl8KXJyxcbiAgICAgICAgICAgICfDpsKWwrDDpcK3wrTDpcKwwpTDqMKZwo7DpcK3wqbDpsKXwpcnLFxuICAgICAgICAgICAgJ8OpwpnCiMOlwrfCtMOlwrDClMOowpnCjsOmwpfClydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtMOlwq7CicOnwpvCnycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCucKMw6XChcKww6bCtcKpw6fCicK5w6XCuMKCJywgJ8OpwpjCv8OlwrDClMOlwrHCscOlwrjCgicsICfDp8KnwpHDpcKwwpTDpsKywoHDpcKPwrPDp8K/wrzDpcKJwo3DpsKXwpcnLCAnw6fCp8KRw6XCsMKUw6bCssKBw6XCj8Kzw6fCv8K8w6TCuMKtw6bCl8KXJywgJ8OmwonCjsOowrXCicOnwonCucOmwpfClycsICfDp8KqwoHDpsKzwonDpcKOwr8nXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKAwprDqMK+wr3DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6fCp8KRw6XCsMKUw6bCssKBw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKcwo3DpsKewpfDqcKDwq3DpcKLwpLDpcK4woInLFxuICAgICAgICAgICAgJ8OnwqfCkcOlwrDClMOmwrLCgcOlwrfCpsOnwr/CvMOkwrjCrcOmwpfClycsXG4gICAgICAgICAgICAnw6fCp8KRw6XCsMKUw6bCssKBw6XCt8Kmw6fCv8K8w6XCkMKOw6bCl8KXJyxcbiAgICAgICAgICAgICfDpcK8woDDqcKywoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrrCk8OkwrzCpsOmwpfClycsXG4gICAgICAgICAgICAnw6XCpcKIw6bCm8K8w6bCl8KXJyxcbiAgICAgICAgICAgICfDpsKJwo7DqcKywoHDp8KJwrnDpsKXwpcnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKUwqHDpsKewpfDqcKDwq3DpcKLwpLDp8Kbwp8nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCusKMw6jCv8Kew6bCtcKpw6fCicK5w6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKUwqHDpsKewpfDpsK1wqnDp8KJwrnDpcK4woInLFxuICAgICAgICAgICAgJ8OpwpjCv8OlwrfCtMOlwpjCjsOmwpfClycsXG4gICAgICAgICAgICAnw6jCi8KPw6XCsMK8w6fCicK5w6XCt8Kmw6bCl8KXJyxcbiAgICAgICAgICAgICfDqMKLwo/DpcKwwrzDp8KJwrnDpcKPwrPDpsKXwpcnLFxuICAgICAgICAgICAgJ8OkwrjCnMOkwrnCjMOnwo/CoMOnwqnChsOmwrLCgcOmwpfClycsXG4gICAgICAgICAgICAnw6jCpcK/w6TCucKMw6fCj8Kgw6fCqcKGw6bCssKBw6bCl8KXJyxcbiAgICAgICAgICAgICfDpcKkwqrDpMK7wobDpcKvwrrDpsKXwpcnLFxuICAgICAgICAgICAgJ8OpwpXCtsOpwrvChMOmwpfClycsXG4gICAgICAgICAgICAnw6bCrcKjw6nClcK2w6fCmcK9w6bCl8KXJyxcbiAgICAgICAgICAgICfDpsKtwqPDqMKTwp3DpsKXwpcnLFxuICAgICAgICAgICAgJ8OlwqTCmsOkwrzCpsOlwo7CvydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrnCjMOlwoXCsMOlwq/Cn8OlwrjCg8OnwpvCnycsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcKbwobDpcKuwoHDpcK4woInLFxuICAgICAgICAgICAgJ8OkwrjCsMOpwpXCh8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCjcKTw6jCtcKEw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKMwpbDpcK+wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpXChsOpwoPCvcOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK0w6XCksKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKHwonDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq/Cn8OlwpPCiMOlwrDClMOlwo/Cs8Onwr/CvMOlwonCjcOmwpfClycsXG4gICAgICAgICAgICAnw6XCr8Kfw6XCk8KIw6XCsMKUw6XCj8Kzw6fCv8K8w6TCuMKtw6bCl8KXJyxcbiAgICAgICAgICAgICfDpcKvwp/DpcKTwojDpcKwwpTDpcKPwrPDp8K/wrzDpcKQwo7DpsKXwpcnLFxuICAgICAgICAgICAgJ8OlwpvCm8Olwq3CkMOnwo7Ci8OmwpfClydcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrzCisOlwoXCi8OmwpjCrcOnwpvCnycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMKcw6jCg8Kcw6XCuMKCJywgJ8Oowr7CvsOmwovCicOnwonCucOmwpfClycsICfDpcKHwobDpsKgwrzDpcKwwpTDpsKXwpcnLCAnw6nChMKCw6bCicKYw6XChcKLw6XCicKNw6bCl8KXJywgJ8OpwoTCgsOmwonCmMOlwoXCi8OmwpfClycsICfDpsKdwq3DqcKUwqbDpsKXwpcnLCAnw6TCucKMw6XCrsKhw6bCl8KXJywgJ8OkwrzCisOpwofCkcOpwpzCjcOmwrTCm8OmwpfClyddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrfCtMOlwr3CpsOmwrfClsOlwrDClMOnwpvCnycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMK0w6bCssKzw6XCuMKCJywgJ8OkwrrClMOlwo7Cn8Olwo7CvycsICfDp8KjwrTDpcKPwqPDpcKOwr8nLCAnw6TCucKMw6bCi8KJw6fCicK5w6XCicKNw6bCl8KXJywgJ8OkwrnCjMOmwovCicOnwonCucOkwrjCrcOmwpfClycsICfDpMK5wozDpsKLwonDp8KJwrnDpcKQwo7DpsKXwpcnLCAnw6bCncKtw6nClMKmw6XCkMKOw6bCl8KXJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCmMK/w6bCi8KJw6XClsKEw6fCm8KfJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKYwr/DpsKLwonDpcKWwoTDpcK3wqbDpsKXwpcnLCAnw6nCmMK/w6bCi8KJw6XClsKEw6XCj8Kzw6bCl8KXJywgJ8OpwqLCncOmwrXCjsOnwrrCs8OmwpfClyddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6jCvsK9w6XCrsKBw6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrLCiMOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKywojDpsKywrPDpcKMwronLFxuICAgICAgICAgICAgJ8OnwprCh8OlwqfCkcOlwozCuicsXG4gICAgICAgICAgICAnw6XCksKMw6XCucKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDpMK4wpzDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpPCgcOowqXCv8OlwozCuicsXG4gICAgICAgICAgICAnw6jCi8KPw6XCrsK2w6XCscKvw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wpzDqcKZwrXDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrrCjsOmwrTCqsOlwozCuicsXG4gICAgICAgICAgICAnw6bClsKww6bCsMKRw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKzwpXDpcK6wpPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowr7CvcOkwrjCrcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCusK3w6XCucKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrDDpcKfwo7DpcKtwpDDpcKMwronLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwqTCp8Oowr/CnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKlwr/DpcKywpfDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCrcOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6bCssKZw6bCssKzw6XCj8Kjw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KUwpjDpMK6wpXDpcKtwpDDpcKMwronLFxuICAgICAgICAgICAgJ8OmwpfChcOpwqHCusOlwo/Co8OlwozCuicsXG4gICAgICAgICAgICAnw6nCh8KRw6XCt8Kew6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KTwqbDpsKIwr/DpcK6wpfDpcK4woInLFxuICAgICAgICAgICAgJ8OmwpnCrsOlwoXCsMOlwrrCl8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCusKEw6bCssKzw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKVwr/DpsK1wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Opwp7CjcOlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCk8KBw6TCuMKcw6XCjMK6JywgJ8OpwpPCgcOowqXCv8OlwozCuicsICfDp8KrwovDpcKxwrHDpcKMwronLCAnw6XCjcKDw6XCscKxw6XCjMK6JywgJ8OmwrXCt8Olwp/CjsOlwrjCgicsICfDpcKPwrDDpcKuwonDpcKOwr8nLCAnw6XCssKrw6XCssKpw6bCu8Khw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmworCmsOpwqHCusOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCocK6w6XCn8KOw6XCjMK6JywgJ8OmwpbCsMOmworCmsOlwozCuicsICfDpMK4wpzDpsK0wrLDpcKMwronLCAnw6bCnMKbw6jCisKxw6XCjMK6JywgJ8OmworCmsOpwqHCusOlwo7CvycsICfDpsK4woXDpcKOwp/DpsK7wqHDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6bClsKww6XCrsK+w6bCu8Khw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpzCrMOmwrrCqsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCucKzw6XCscKxw6XCjMK6JywgJ8OmwpjCjsOlwrHCscOlwozCuicsICfDpsK6wqrDpsK5wpbDpcKMwronLCAnw6XCjcKXw6jCisKsw6XCjMK6JywgJ8OmwpzCrMOmwrrCqsOmwrvCocOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpsKhwpPDpMK7woHDpsK7wqHDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMK5w6TCuMKcw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKMwq/DpcKFwrTDpcKMwronLCAnw6XChcKDw6XCrsKdw6XCjMK6JywgJ8OmwozCr8Olwq7CicOlwozCuicsICfDpMK4wpzDpsK4wq/DpcK4woInLCAnw6XCh8Kkw6XCn8KOw6XCuMKCJywgJ8Olwq7CvcOnwpTCuMOmwrvCocOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKUwqbDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwqTCqsOlwpLCjMOlwozCuicsICfDpcKPwqTDpcKhwpTDpcKMwronLCAnw6XCh8KMw6bCssKzw6XCjMK6JywgJ8OlwofCjMOmwrXCt8OlwrjCgicsICfDqcK7wpHDpcKxwrHDpcKOwr8nLCAnw6TCucKJw6XCjsK/JywgJ8OlwozCl8Olwq7CgcOlwrjCgicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKQwqXDpcKPwqPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OnwqvCmcOlwonCjcOlwozCuicsICfDqMKlwr/DpcK4woLDpcKMwronLCAnw6nCssKFw6nCscK8w6XCnMKIw6XCjMK6JywgJ8OowoDCgcOowr7CucOlwozCuicsICfDpcKkwqfDp8KfwrPDpsKhwqXDpcK4woInLCAnw6fCm8KWw6XCt8Kew6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwpjCnMOmwpbCsMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCtcK3w6XCt8Kew6XCjMK6JywgJ8OmwpbCsMOpwoLCscOlwozCuicsICfDpcKkwqrDpcK5wrPDpcKMwronLCAnw6bCuMKFw6bCssKzw6nCl8Kow6XCjMK6JywgJ8OnwrvChsOmwrLCs8OlwozCuicsICfDpcK9wrDDpsKtwqbDpcKOwr8nLCAnw6nCmMKcw6bClsKww6jCksKZw6XCj8Kkw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Oowr7CvcOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCmcK9w6XCocKUw6XCjMK6JywgJ8OmwpbCh8OlwpzCo8OlwozCuicsICfDpcKuwo/DpMK8wp/DpcKMwronLCAnw6XCpMKqw6XCrcKQw6bCssKzw6XCjMK6JywgJ8OlwrzCk8OpwpXCv8OlwrLCrcOlwozCuicsICfDp8KBwq/DpcKhwpTDpcK4woInLCAnw6jCvsK9w6nCmMKzw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwpvCmMOpwpTCpicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCj8KMw6XCj8Kww6XCrcKQw6XCjMK6JywgJ8OlwoXCtMOpwprChsOlwo/CsMOlwozCuicsICfDp8KbwpjDpcKxwrHDpcKOwr8nLCAnw6XCpMKnw6bCtMK8w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwpPCgcOlwrLCrcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCk8K2w6XCt8Kew6XCjMK6JywgJ8OmwrjChcOmwrLCs8OlwozCuicsICfDqMKwwoPDpcKFwrXDpcKxwrHDpcK4woInLCAnw6XCvMKAw6XCjsKfw6XCuMKCJywgJ8OpwpPCgcOlwrLCrcOlwo7CvycsICfDpsKYwozDpcKbwr7DpcKOwr8nLCAnw6jCpcK/w6TCuMKww6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpzCncOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCj8KMw6XCocKUw6XCjMK6JywgJ8Opwr7CmcOlwp/CjsOlwozCuicsICfDpcKHwozDpsK6wpDDpcK4woInLCAnw6XCjMKXw6fCpcKow6XCuMKCJywgJ8OmwpzCncOpwpjCs8Olwo7CvycsICfDpcK7wrrDpcK5wrPDpcKOwr8nLCAnw6XClsKAw6XClsKHw6bCssKBw6XCt8Kmw6fCv8K8w6jCksKZw6XCj8Kkw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowpHCq8OoworCpsOlwrLCm8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCvsKZw6bCuMKvw6XCjMK6JywgJ8Olwo3Cl8OnwqXCqMOlwozCuicsICfDqMK/wp7DpcKxwrHDpcKMwronLCAnw6XChcK0w6XCn8KOw6XCuMKCJywgJ8OnwrvCpcOkwrjCrcOlwo7CvycsICfDpcK7wrrDpsKYwozDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OlwpDCicOmwp7Cl8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKVwr/DpsKYwqXDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCnMKdw6nCmMKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKuwr3DpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrrCjMOpwoHCk8OlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XChcKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8K7wr/DpcKbwq3DpcKMwronLFxuICAgICAgICAgICAgJ8Olwo/CjMOpwpjCs8OlwozCuicsXG4gICAgICAgICAgICAnw6TCucKdw6XCj8Kww6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKmwobDpsKgwpHDpcK4woInLFxuICAgICAgICAgICAgJ8Olwr7Ct8OmwoPCoMOlwrjCgicsXG4gICAgICAgICAgICAnw6XChsKcw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKQwonDpsKewpfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowojCucOowpDCpcOlwozCuicsICfDpsKYwozDqcKCwpHDpcKMwronLCAnw6nCvsKZw6bCvcKtw6XCjMK6JywgJ8OkwrjCsMOmwrvCocOlwozCuicsICfDqMKIwpLDpcKFwrDDpcK4woInLCAnw6bCocKmw6fClMK4w6XCuMKCJywgJ8OowpvCn8OmwrLCs8OlwrjCgicsICfDp8KjwpDDp8KfwrPDpcK4woInLCAnw6bCsMK4w6XCkMKJw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpvCm8OlwrnCsycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCk8KBw6jCpcK/w6XCjMK6JywgJ8OpwpPCgcOkwrjCnMOlwozCuicsICfDpcKFwqzDpMK4wrvDpcKywq3DpcK4woInLCAnw6XCj8KMw6jCvsK9w6XCuMKCJywgJ8OmwqLCqMOmwqDCkcOlwo7CvycsICfDpMK8worDqcKAwprDpsK7wqHDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCvsK9w6bCusKQw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcK+wpnDpcKxwrHDpcKMwronLCAnw6jCpcK/w6XCrsKJw6XCjMK6JywgJ8OkwrjCnMOowr7CvcOlwo7CvycsICfDpMK4wpzDpMK4wrDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCgMKaw6XCjMKWw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpMK4wpzDpsKYwozDpcKMwronLCAnw6TCusKMw6nCgcKTw6bCscKfw6XCjMK6JywgJ8OmwqLChcOmwrLCs8Olwo/Co8OlwrjCgicsICfDqcKbwobDpcKuwonDpcK4woInLCAnw6nCgMKaw6XCjMKWw6XCjsK/JywgJ8Oowr7CicOlwo3Cl8Olwo7CvycsICfDpsKfwrPDpsKywrPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCmcK9w6XCscKxw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwqvDqcKBwpPDpsKxwp/DpcKMwronLCAnw6bCscKfw6bCusKQw6XCjMK6JywgJ8OkwrjCtMOmwrHCn8OlwrjCgicsICfDqcKdwpbDpcKuwofDpcKOwr8nLCAnw6bCisKaw6bCncK+w6XCjsK/JywgJ8OpwpXCv8OnwpnCvcOmwpzCncOpwrLCnMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKdwr7DpcKOwp/DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Olwq7CgcOmwrHCn8OlwozCuicsICfDpMK5wr7DpcKuwonDpcKOwr8nLCAnw6nClcK/w6XCssKtw6XCjsK/JywgJ8OmwonCtsOkwr3CmcOlwo7CvycsICfDpcKJwo3DqcKDwq3DpcKwwpTDp8K9wpfDpsKWwq/DqMKSwpnDpcKPwqTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCmcK9w6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK0wq7DpcKMwpfDpcKMwronLCAnw6XCpMKnw6XCrsKJw6XCuMKCJywgJ8OmwrTCrsOlwo3Cl8OlwrjCgicsICfDqcKVwofDqMK1wonDpcKOwr8nLCAnw6nCgMKaw6bCpsKGw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrvCtsOowr7CucOmwpzCncOpwrLCnMOmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCu8K2w6XCkMKJw6XCuMKCJywgJ8OlwpvCvsOkwrvCrMOlwrjCgicsICfDpsKVwqbDpcKMwpbDpcK4woInLCAnw6nCvsKZw6TCusKVw6XCuMKCJywgJ8Onwo/CssOmwpjCpcOlwrjCgicsICfDpcKSwozDqcK+wpnDpcK4woInLCAnw6XCrsKJw6XCm8K+w6XCjsK/JywgJ8OmwrHCqsOmwrjChcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6nCu8KRw6nCvsKZw6bCscKfw6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpPCiMOlwrDClMOmwrvCqMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKdwr7DpcKMwpfDpcKMwronLFxuICAgICAgICAgICAgJ8OpwoHCk8OpwofCjMOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCssKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK5wrPDpsKIwr/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwqbCmcOlwp3CisOlwozCuicsXG4gICAgICAgICAgICAnw6nCgcKTw6XCpMKWw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKRwrzDpcKFwrDDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpjCv8Olwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6XCj8KMw6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKwwprDpcK/wpfDpcK4woInLFxuICAgICAgICAgICAgJ8OkwrrClMOlwrjCuMOlwrjCgicsXG4gICAgICAgICAgICAnw6XCrsK+w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrnDpsKtwqPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoDCmsOmwrLCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCt8K0w6XCvcKmw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK7wrbDpcKvwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpzCqMOlwoXCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCvsKdw6XChcKww6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcK9wpDDqcK9wpDDpcKTwojDpcKwwpTDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCvsKZw6bCssKZw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKYwoLDpsKYwoLDpsK6wqrDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpPCgcOpwpTCi8OlwozCuicsXG4gICAgICAgICAgICAnw6XCu8K6w6XCjcKOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKvwozDpsKLwonDpcKwwpTDpcKfwrrDpcKMwronLFxuICAgICAgICAgICAgJ8OnwqLCvsOlwq3CkMOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6bCosKFw6nCh8KMw6bClsKvw6jCvsK+w6bClsKhw6XCsMKUw6bCl8KPw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKuwrfDpsKywrPDpcK4woInLFxuICAgICAgICAgICAgJ8Olwq/CjMOowqPClcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCi8Kcw6bCs8KJw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KUwpjDpcKNwpfDpcKOwr8nLFxuICAgICAgICAgICAgJ8Okwr7CncOlwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcKLw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKzwrDDpsKdwqXDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCi8OkwrjCnMOlwo7CvycsXG4gICAgICAgICAgICAnw6nCvsKZw6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcK5wqTDpcKywpfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtMOlwrHCscOlwozCuicsICfDpcK3wqXDpcKGwpzDpcKMwronLCAnw6XCjcKXw6XCscKxw6XCjMK6JywgJ8OlwoXCtMOlwq7CicOlwozCuicsICfDpcKQwpHDqcKYwrPDpcKMwronLCAnw6TCuMKcw6XCscKxw6XCjMK6JywgJ8OowpDCncOlwozCl8Olwo7CvycsICfDp8K7wqXDpsK7wqjDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCj8KMw6nCuMKtw6XCscKxJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKwwpbDpcKxwrHDpcKMwronLCAnw6XCssKtw6TCuMKcw6XCjMK6JywgJ8OlwpvCm8OmwpbCucOlwo/CsMOlwozCuicsICfDpcKuwp3DpcKxwrHDpcKMwronLCAnw6nCm8KGw6jCtMKkw6XCjsK/JywgJ8Olwq7CncOmwrjChcOlwo7CvycsICfDpcKPwovDqMKwworDpcKOwr8nLCAnw6nCpcK2w6bCssKzw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwrjCocOowqXCv8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCuMKhw6XChsKgw6XCjMK6JywgJ8OmwoHCksOlwrHCscOlwozCuicsICfDpcKfwo7DpcKtwpDDpsKywrPDpcKMwronLCAnw6bCu8K0w6nCgcKTw6XCjMK6JywgJ8OmwqLCqMOmwqDCkcOlwozCuicsICfDqcK6wrvDpcKxwrHDpcKMwronLCAnw6XCr8KGw6XCscKxw6XCuMKCJywgJ8OowpnCjsOmwp7Cl8OlwrjCgicsICfDqcK4wqHDpMK4wpzDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCpMKnw6XCusKGw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OowpDCqMOlwrDClMOlwpvCvsOlwozCuicsXG4gICAgICAgICAgICAnw6fCusKiw6XCssKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK+wpnDpcKHwqTDpcKMwronLFxuICAgICAgICAgICAgJ8Oowq7CqcOowoPCocOowrfCr8OlwozCuicsXG4gICAgICAgICAgICAnw6XCpMKnw6XCkMKMw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKewpfDp8KUwrjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowoLCh8OlwrfCnsOlwo7CvycsXG4gICAgICAgICAgICAnw6jCgsKHw6bCusKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKdwpzDpcKwwpTDpMK8wq/Dp8KJwrnDqMKSwpnDpcKPwqTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrzCisOmwpjCpcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpMK8worDpsKYwqXDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrjCpsOlwrLCrcOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCssKUw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKHwpHDpcKxwrHDpcKxwq/DpcKMwronLFxuICAgICAgICAgICAgJ8OowqXCv8Omwp7Cl8OlwozCuicsXG4gICAgICAgICAgICAnw6fCvsKOw6bCusKqw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK5wozDqcKpwqzDpsKywrPDpcKMwronLFxuICAgICAgICAgICAgJ8Onwr/CoMOlwrPCpsOlwozCuicsXG4gICAgICAgICAgICAnw6XCj8KLw6XCpcK9w6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4worDp8KUwpjDpcKywq3DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrrClMOowpDCpcOlwozCuicsXG4gICAgICAgICAgICAnw6fCusKiw6bCmMKfw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKWwrDDqcKdwpLDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrHCpMOmwpfCusOmwrLCs8OlwozCuicsXG4gICAgICAgICAgICAnw6TCucKMw6TCvMKKw6XCssKtw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKTwoHDpcKKwpvDpcK4woInLFxuICAgICAgICAgICAgJ8OlwpjCicOowo3Cq8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCicKhw6TCuMK5w6bCscKfw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OnwojCscOmwrDCkcOlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKcw6XCrsKJw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKYwrPDpsKYwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OowqXCv8Olwq7CicOlwozCuicsXG4gICAgICAgICAgICAnw6fCu8Klw6jCisKsw6bCssKzw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKuwoHDpcKuwonDpcK4woInLFxuICAgICAgICAgICAgJ8OmwrXCt8Omwp7Cl8OlwrjCgicsXG4gICAgICAgICAgICAnw6fCqcKGw6bCo8Kxw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKewpfDpcKPwqPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCnMOlwq7CgcOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCvcKzw6bCnMKow6bClsKvw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OlwpDCkcOpwpjCs8OlwozCuicsXG4gICAgICAgICAgICAnw6XCicKNw6jCv8Kbw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wpzDqcKjwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OpwoPCisOlwozCuicsXG4gICAgICAgICAgICAnw6XCkMKMw6bCscKfw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKvwozDqcKUwqbDpcK4woInLFxuICAgICAgICAgICAgJ8OmwqHCpsOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6bCisKaw6jCv8Kcw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKhwqbDpcKNwpfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCpMOlwo7Cn8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMKDw6XCj8Kww6bCssKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKhwoPDpcKxwrHDpcKMwronLCAnw6bClsKww6XChcK0w6XCjMK6JywgJ8OowozChMOlwq3CkMOmwrLCs8OlwozCuicsICfDpcKLwoPDpcKIwqnDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCu8KRw6bCssKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KIwrHDqMK+wonDpcKMwronLCAnw6XCjMKXw6XCrsKJw6XCuMKCJywgJ8OkwrrClMOlwqTCp8Oowr/CnsOmwrHCoMOlwrjCgicsICfDqcKAworDpcKFwovDpcKOwr8nLCAnw6XCq8Kpw6bCscKfw6XCjsK/JywgJ8Olwq3CmcOlwpDCtMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8K7wqXDpcKMwpbDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCjMKXw6bCnsKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKuwonDqMK+wr7DpcK4woInLFxuICAgICAgICAgICAgJ8OowoLCh8OkwrjCnMOlwrjCgicsXG4gICAgICAgICAgICAnw6bCtcK3w6TCvMKmw6XCuMKCJyxcbiAgICAgICAgICAgICfDp8K7wqXDpsKjwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCsMOowqXCv8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCmMKOw6bCsMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKdwpLDpcKGwojDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrrChsOlwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6bCnMKbw6XCpcKOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKkwqfDpcKFwrTDpcKuwonDpcKywq3DpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwpHCvMOnwo7Cm8Olwo7CvycsICfDpcKhwpTDpsKywrPDpcKOwr8nLCAnw6bCvMKgw6bCssKzw6XCjsK/JywgJ8OlwqTCp8OlwoXCtMOlwq7CicOlwrLCrcOowr7ClsOlwozCuicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6TCuMKKw6bCtcK3JyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCisOmwrXCt8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcK7woTDpsK1wqbDpcKMwronLFxuICAgICAgICAgICAgJ8Olwo3CosOmwrnCvsOlwozCuicsXG4gICAgICAgICAgICAnw6XCvsKQw6bCscKHw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKVwr/DpcKuwoHDpcKMwronLFxuICAgICAgICAgICAgJ8Opwp3CmcOlwq7CicOlwozCuicsXG4gICAgICAgICAgICAnw6bCmcKuw6nCmcKAw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKXwrjDpcKMwpfDpcKMwronLFxuICAgICAgICAgICAgJ8OowpnCucOlwo/Co8OlwozCuicsXG4gICAgICAgICAgICAnw6bCncKow6bCtcKmw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKuwp3DpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpfCtcOowqHCjMOlwozCuicsXG4gICAgICAgICAgICAnw6XCmMKJw6XCrsKaw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKdwr7DpsKxwp/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwofCkcOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6nCncKSw6bCtcKmw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKNwpfDpsKxwofDpcKMwronLFxuICAgICAgICAgICAgJ8OlwqXCicOowrTCpMOlwozCuicsXG4gICAgICAgICAgICAnw6bCtcKmw6TCuMKcw6bClsKww6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK0wofDpsKYwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6bCscKfw6jCi8KPw6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwo3Cl8OkwrrCrMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDp8KOwoTDpsKtwqbDpcKMwronLFxuICAgICAgICAgICAgJ8OnwpnCvcOkwrjCi8OlwozCuicsXG4gICAgICAgICAgICAnw6fCp8Kmw6bCt8Kuw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK7wrrDqcKCwrrDpcKMwronLFxuICAgICAgICAgICAgJ8OpwrzCk8OmwqXCvMOlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKLw6XChcKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKgwpbDqcKcwp7DpcKMwronLFxuICAgICAgICAgICAgJ8OpwpvCqMOoworCscOlwo/CsMOlwozCuicsXG4gICAgICAgICAgICAnw6bCtcKmw6XCj8Kjw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwp/DpcKuwoHDpcKMwronLFxuICAgICAgICAgICAgJ8OlwoXCrcOlwpDCiMOlwozCuicsXG4gICAgICAgICAgICAnw6bCusKnw6bCsMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKrwpjDpsK3wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowovCj8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcKHwpHDqcKYworDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrnCs8OmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6bCssKnw6bCtcKqw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKZwo7DpMK4wpjDpcKMwronLFxuICAgICAgICAgICAgJ8OlwpDCtMOkwrjCrcOlwozCuicsXG4gICAgICAgICAgICAnw6fCm8K4w6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK4wrjDp8KGwp/DpcK4woInLFxuICAgICAgICAgICAgJ8OlwrzCoMOlwq7CtsOmwrjCr8OlwrjCgicsXG4gICAgICAgICAgICAnw6bCmMKGw6XCscKxw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKQwrTDpsKxwp/DpcK4woInLFxuICAgICAgICAgICAgJ8OlwqTCqsOkwrvCk8OlwrjCgicsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCl8Kgw6nClMKhw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK0wofDpcKuwonDpcKMwronLCAnw6XCjcKXw6nClcK/w6XCjMK6JywgJ8OlwozCl8OlwqHCmMOlwozCuicsICfDpsK7wqjDpsK5wpbDpcKMwronLCAnw6nClMKhw6XCscKxw6XCjMK6JywgJ8OmwoPCoMOlwrHCscOlwozCuicsICfDpsKxwp/DqcKYwrTDpcK4woInLCAnw6XCrsKcw6XChcK0w6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrjCuMOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCksKfw6bCpcK8w6XCjMK6JywgJ8OlwqTCqcOlwq7CgcOlwozCuicsICfDpsKIwprDpcKiwoXDpcKgwrDDpcKMwronLCAnw6bClsKww6XCjMKXw6XCjMK6JywgJ8Omwq3CpsOowr/Cm8OlwozCuicsICfDqcKHwpHDpcKdwpvDpcK4woInLCAnw6bCusKnw6nCmMKzw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwpXCh8OmwrHCn8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCusKsw6XCj8Kjw6XCjMK6JywgJ8OmwrbCpsOlwrfCnsOlwozCuicsICfDpMK4wrnDpcK+wpLDpcKMwronLCAnw6TCuMK5w6nCmMKzw6XCuMKCJywgJ8OmwonCrMOkwrjCrcOlwrjCgicsICfDpcKPwqXDpcKuwrnDpcK4woInLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCjcKXw6nCgMKaw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK0wofDpcK3wp3DpcKMwronLCAnw6bCuMKvw6nCl8K4w6XCjMK6JywgJ8OpwoDCmsOlwrfCnsOlwrjCgicsICfDpcKmwoLDp8KawovDpcK4woInLCAnw6bCtcK3w6nCl8Kow6XCuMKCJywgJ8OlwpDCr8OkwrjCnMOlwrjCgicsICfDpsK1wrfDpcKuwonDpcKOwr8nLCAnw6XCpsKCw6TCuMKcw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrPCsMOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCtcK3w6nCmcK1w6XCjMK6JywgJ8OpwqvCmMOmwrjCr8OlwozCuicsICfDpcKnwpzDpcKgwrDDpcK4woInLCAnw6bCs8Kww6XChcK0w6XCuMKCJywgJ8Opwp3ClsOmwrHCn8OlwrjCgicsICfDpcKFwrTDpcKMwpbDpcK4woInLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCicKsw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK5wr/DqcKZwrXDpcKMwronLCAnw6fCu8K0w6bCicKsw6XCjMK6JywgJ8OpwoLCl8OmwrHCn8OlwozCuicsICfDpsKxwp/DqcKDwr3DpcK4woInLCAnw6TCu8Kqw6XCvsKBw6XCuMKCJywgJ8OpwqvCmMOpwoLCrsOlwrjCgicsICfDpcKuwp3DpcK6wpTDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCm8KQw6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpMK6wq3DpsK5wpbDpcKMwronLCAnw6fCm8KQw6nCg8K9w6XCjMK6JywgJ8OlwqTCp8OkwrjCsMOlwrjCgicsICfDpMK4wpzDpcKPwrDDpcK4woInLCAnw6XCu8K6w6bCucKWw6XCjsK/JywgJ8OlwrDChMOpwpjCs8Olwo7CvycsICfDqcKYwpzDpcKuwoHDpcKOwr8nLCAnw6bCu8Kow6bCtcK3w6XCjsK/JywgJ8OlwpPCjcOmwrDCtMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMK/wp7DpMK6wpHDpsK4wq/DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwpbCsMOmwrXCpsOlwozCuicsICfDpsK1wrfDpcK3wp7DpcKMwronLCAnw6jCv8Kew6TCusKRw6XCjMK6JywgJ8OkwrjCnMOmwrXCt8Olwo7CvycsICfDp8KBwozDpMK6wpHDpcKOwr8nLCAnw6jCtcKjw6bCpsKGw6XCjsK/JywgJ8OnwoHCjMOlwo3Cl8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK+wpDDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCusKRw6nCvsKZw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK8wpPDpsKlwrzDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrnCncOpwofCjMOlwozCuicsXG4gICAgICAgICAgICAnw6bCs8KJw6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMK0wr7DpsKxwqrDpcKMwronLFxuICAgICAgICAgICAgJ8OpwoLCs8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgICAnw6bClsKww6bCssKCw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKTwpzDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwp3CosOlwq7CgcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCssKbw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrfCrsOlwq7CicOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCuMKFw6bCssKzw6XCjMK6JywgJ8OmwrjChcOmwrXCpsOlwozCuicsICfDpsKlwprDpcK3wp7DpcKMwronLCAnw6bCt8Kuw6nCmMK0w6XCjMK6JywgJ8OmwrbCn8OmwrDCtMOlwo7CvycsICfDpsK0wqrDpsKzwr3DpcKOwr8nLCAnw6nCh8KRw6bCucKWw6XCjsK/JywgJ8OnwpvCscOnwpzCmcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKuwr/DqMK/woHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Olwq7Cv8Olwp/CjsOlwozCuicsICfDpcKuwr/DqMKxwqvDpcKMwronLCAnw6bCssKtw6nCmMKzw6XCjsK/JywgJ8OmwrPCl8OpwpjCs8Olwo7CvycsICfDpsKzwpfDpsK0wqrDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OmwrXCmcOmwrHCn8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKdwq3DpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCi8Kxw6XCosKFw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKlwr/DpsK5wpbDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCisOlwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKLw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwp/DpcK5wrLDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrvCqMOmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6TCvcKZw6bCncKtw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKQwqfDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrvCusOlwr7Ct8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCr8KMw6nCmMKzw6XCuMKCJyxcbiAgICAgICAgICAgICfDpMK4wrTDpcKuwonDpcK4woInLFxuICAgICAgICAgICAgJ8OmwqHCkMOlwrrCkMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCt8Kzw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKuwoHDpsKzwqLDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCtcK3w6bCm8KZw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwp/DpMK4wpzDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrHCn8OlwozCl8OlwozCuicsXG4gICAgICAgICAgICAnw6nClcKHw6bCtcK3w6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKMwpfDpMK7wpHDpcKMwronLFxuICAgICAgICAgICAgJ8OpwoTCnsOlwrfCnsOlwozCuicsXG4gICAgICAgICAgICAnw6TCvcKZw6XCp8Kaw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKFwojDpsK6wqrDpcK4woInLFxuICAgICAgICAgICAgJ8OlwqXCicOlwozClsOlwrjCgicsXG4gICAgICAgICAgICAnw6XCrsKBw6bCtcK3w6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKxwqHDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrjCqcOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcK5wr/DpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8Opwr7CmcOmwrnCvsOlwozCuicsXG4gICAgICAgICAgICAnw6fCk8Kvw6bCtcK3w6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KRwp7DpcKuwonDpcK4woInLFxuICAgICAgICAgICAgJ8OkwrnCkMOmwrjChcOlwrjCgicsXG4gICAgICAgICAgICAnw6bCsMK4w6XCmMKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK0wp7DpcKkwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCs8OpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCi8KNw6XCjcKXw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwofDpsKIwpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrPCsMOpwqHCusOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCmMKJw6XChcK0w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KnwoDDpcKfwo7DpcKMwronLCAnw6fCp8KAw6bCtMKyw6XCjMK6JywgJ8OmwrXCt8Olwq7CgcOlwrjCgicsICfDpcK5wrPDpsK5wpbDpcK4woInLCAnw6bCocKQw6TCucKhw6XCuMKCJywgJ8OlwpjCicOlwpbChMOlwo7CvycsICfDpsK1wrfDp8KbwpDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCucKWw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKQwrTDpcKFwrTDpcKMwronLCAnw6XCjcKXw6bCtcKUw6XCjMK6JywgJ8OpwpXCv8OlwoXCtMOlwo7CvycsICfDpcK+wrfDpsK4woXDpcKOwr8nLCAnw6XCrsKJw6XCkMKJw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwrvCjcOlwoXCtMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6jCtsKKw6XCn8KOw6XCjMK6JywgJ8Oowq/CuMOmwprCqMOlwrjCgicsICfDpMK4worDqMKZwp7DpcK4woInLCAnw6XCtcKKw6XCt8Kew6XCuMKCJywgJ8OnwrvCjcOlwoXCtMOlwo7CvycsICfDpsKWwrDDpsKYwozDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCh8KRw6XCjcKOw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKpwrrDpcKfwo7DpcKMwronLCAnw6nCh8KRw6TCuMKcw6XCjMK6JywgJ8OlwoXCsMOmwrrCqsOlwrjCgicsICfDpMK5wonDpMK5wozDpcK4woInLCAnw6TCuMKcw6nCmMKzw6XCuMKCJywgJ8OmwrDCuMOlwrrCt8OlwrjCgicsICfDpsKtwqbDpMK5wonDpcKOwr8nLCAnw6bCtcKmw6bCscKfw6XCjsK/JywgJ8OnwqPCkMOlwq7CicOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKhwqLDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Omwp/Cr8Olwp/CjsOlwozCuicsICfDqMKhwqLDpsKxwp/DpcKMwronLCAnw6bCscKfw6XCscKxw6XCuMKCJywgJ8Opwr7CmcOmwrjCuMOlwo7CvycsICfDpcK4wrjDpcKxwrHDpcKOwr8nLCAnw6XCvMKAw6XCjMKWw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowojCn8OlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCrsKaw6bCtcK3w6XCjMK6JywgJ8OmwpnCrsOpwpnCgMOlwozCuicsICfDpcKywrHDpcKxwrHDpcKOwr8nLCAnw6XCtcKKw6bCs8KXw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwo/CsMOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCpMKSw6bCscKfw6XCjMK6JywgJ8OpwrvChMOlwrLCqcOlwozCuicsICfDqMK3wq/DpsKhwqXDpcKMwronLCAnw6TCuMK0w6bCtcK3w6XCuMKCJywgJ8OmwrjCqcOlwrLCrcOlwrjCgicsICfDp8KOwonDp8KOwq/DpcKOwr8nLCAnw6XCpMKpw6XCj8Kww6XCjsK/JywgJ8OkwrvCmcOlwrHChcOlwo7CvycsICfDpMK4wonDqcKXwqjDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMK9w6bCsMK0w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Oowo7CssOpwoPCvcOlwozCuicsXG4gICAgICAgICAgICAnw6nCvsKZw6bCs8KJw6XCuMKCJyxcbiAgICAgICAgICAgICfDp8K8wpnDpMK6wpHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Opwp3CksOnwpTCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCusKRw6XCksKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKBwoLDpsKYwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwp3CvsOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCusKGw6XChcKDw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKZwq/DpcKuwoHDp8KVwrLDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtsOkwrvClsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDpcKuwonDpcK+wr3Dp8KcwoEnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCkMKIw6jCgsKlw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK6wpDDqcKYwrPDpcKMwronLCAnw6fCkcK2w6bCtcK3w6XCjMK6JywgJ8OowpzCgMOlwrHCscOlwozCuicsICfDpcKMwoXDpsKywrPDpcKMwronLCAnw6nClcK/w6TCuMKww6XCjsK/JywgJ8OowoLCpcOkwrjCnMOlwo7CvycsICfDqMKCwqXDqMKlwr/DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCisKcw6bCucKWw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKVwpzDpsK5wpbDpcKMwronLCAnw6XCvMKLw6bCscKfw6XCjMK6JywgJ8OpwrjCoMOmwrHCn8OlwozCuicsICfDpMK4wonDpcKxwrHDpcKMwronLCAnw6jCisKcw6bCucKWw6XCjsK/JywgJ8Olwo3Cl8OpwpnCtcOlwo7CvycsICfDp8K5woHDpsKYwozDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCmsKMw6XCn8Kgw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqMKawozDpcKxwrHDpcKMwronLCAnw6nCvsKZw6XCrcKQw6bCucKWw6XCjMK6JywgJ8OnwqbCucOkwrzCmsOlwozCuicsICfDpsK3wq7DpMK4worDpcKMwronLCAnw6bCgMKAw6jCv8Kcw6XCjsK/JywgJ8OlwpvCusOpwpXCh8Olwo7CvycsICfDpMK6wpTDpsKywrPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCt8Kuw6XCjcKXw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KUwrDDpcKuwrbDpcK6wrXDpcKMwronLCAnw6XCpMKnw6nCgMKaw6XCjMK6JywgJ8OowrDCosOlwq7CtsOpwpvChsOlwozCuicsICfDpcKFwqvDpcKFwqzDpcKxwrHDpcKMwronLCAnw6bCvcKYw6nCm8KGw6XCjMK6JywgJ8OlwofCpMOlwo/CsMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKpwqzDqcKewo3DpcKxwrHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwpvCqMOlwrHCscOlwozCuicsICfDqMKKwrHDpcKxwrHDpcKMwronLCAnw6nCh8KRw6XCrsK2w6XCusKEw6XCjMK6JywgJ8Olwr3Ck8OmwrbCgsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK3wq7DpcKMwpfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OnwpvCuMOlwrHCscOlwozCuicsICfDpsKdwpzDqcKbwobDpcKMwronLCAnw6fCg8KIw6XCscKxw6XCjMK6JywgJ8Omwr/CicOmwrrCqsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKTwpzDqcKZwrXDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwpPCnMOlwq7CmMOlwrHCscOlwozCuicsICfDp8KLwq7DpcKtwpDDpcKxwrHDpcKMwronLCAnw6nCg8KKw6XCjMK6JywgJ8OpwpPCnMOpwpnCtcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKuwonDpcK6wobDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCv8KOw6bCscKfw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDqMKnwoLDpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7CnMOnwqfCgMOlwozCuicsXG4gICAgICAgICAgICAnw6bCocKQw6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKuwr/DpsKdwr7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwp7CnsOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKqw6bCucKWw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKAwoDDpcKuwoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrLCs8OowqXCv8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCnMKbw6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK9wpzDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwrvChMOlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCscKvw6bCusKqw6XCjMK6JywgJ8OpwrvChMOlwrHCscOlwozCuicsICfDpcK+wr3DpcK3wp7DpcKMwronLCAnw6TCvMKRw6XCrsKBw6XCjsK/JywgJ8Omwq3CmcOlwo7CvycsICfDp8KlwoHDqcKXwqjDpcKOwr8nLCAnw6nCu8Kfw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrvCgcOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCkMKFw6fCkMKKw6XCjMK6JywgJ8Olwo3Cl8OowrDCr8OlwozCuicsICfDpcKkwqnDqcKVwr/DpcK4woInLCAnw6bCmMKOw6XChcKJw6XCuMKCJywgJ8OlwoXCqMOmwqTCksOlwo7CvycsICfDpsKdwqXDpcKuwonDpcKOwr8nLCAnw6XCrsKaw6jCv8Kcw6XCjsK/JywgJ8OlwofCpMOpwpjCs8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKYwpzDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwqLCjcOlwrfCnsOlwozCuicsICfDqcKiwo3DpMK4wpzDpcKMwronLCAnw6nCosKNw6bCs8KJw6XCjMK6JywgJ8OnwpXCjMOpwqbClsOlwrjCgicsICfDpMK4wrTDpsKzwonDpcKOwr8nLCAnw6nCosKNw6TCuMKKw6XCjsK/JywgJ8OpwpjCnMOlwo3Cl8Olwo7CvycsICfDpcKkwqrDpcKSwozDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCrsK/w6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKfwofDpsKhwqXDpcKMwronLCAnw6jCkMKnw6XCjsK/JywgJ8OmwrPCl8Olwo7CvycsICfDp8KgwoDDpcKxwrHDpcKOwr8nLCAnw6fCgcK1w6fCksKnw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrfCosOmwrnClsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCscKFw6XCt8Kiw6XCjMK6JywgJ8OlwpDCq8OlwrHCscOlwo7CvycsICfDpsKXwqDDpMK4wrrDpcKOwr8nLCAnw6XCusKQw6bCscKfw6XCjsK/JywgJ8OlwpLCjMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwq3DpcKuwonDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwofCkcOlwq7CicOlwozCuicsICfDqMKjwpXDpcKuwonDpcKMwronLCAnw6XCr8K/w6XCjsK/JywgJ8OpwpzCjcOlwrHCscOlwo7CvycsICfDqcKcwo3DqcKCwrHDpcKOwr8nLCAnw6jCiMKSw6XCn8KOw6XCjsK/JywgJ8OpwofCkcOlwq/CqMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK6wrPDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowrDCr8Olwp/CjsOlwozCuicsICfDpcKIwqnDqMK+wpvDpcKOwr8nLCAnw6bCtsKhw6nCmMKzw6XCjsK/JywgJ8OowpLCmcOlwp/CjsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKxwqDDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowrTCtcOmwrHCoMOlwozCuicsICfDpMK4wpzDqMKHwrPDpcKOwr8nLCAnw6fCn8Kzw6XCj8Kww6XCjsK/JywgJ8Opwp3CksOpwpjCs8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKuwqPDpcKfwo7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Olwq7Co8OlwrfCnsOlwozCuicsICfDpcKuwoHDpcKbwr3DpcK4woInLCAnw6XCucK/w6XCvsK3w6XCjsK/JywgJ8OpwoPCjsOmwrrCqsOlwo7CvycsICfDpsKzwr7DpcKOwr8nLCAnw6bCl8KMw6XCvsK3w6XCjsK/JywgJ8OnwrvCqcOmwrrCqsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpbDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6fCpsKPw6XCu8K6w6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwqbCj8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcK8wpPDpsKlwrzDpcKMwronLFxuICAgICAgICAgICAgJ8Olwo/CsMOmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6TCu8KTw6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKpwqzDpcKwwr7DpcKMwronLFxuICAgICAgICAgICAgJ8OmwpnCi8Olwq7CicOlwozCuicsXG4gICAgICAgICAgICAnw6fCpsKPw6bCuMKFw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKVwr/DpMK5wpDDpcK4woInLFxuICAgICAgICAgICAgJ8OpwpfCvcOkwr7Cr8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCl8K9w6bCuMKFw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKwwrjDpsKzwrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowr/CnsOmwrHCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCvcKXw6bCusKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDpsK9wq3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwo7CpsOpwpfCqMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCgMKdw6bCmMKOw6XCjMK6JywgJ8OmwrXCt8OmwrLCp8OlwozCuicsICfDpsK5wpbDqcKHwozDpcKMwronLCAnw6nCm8KGw6fCvsKOw6XCjMK6JywgJ8OlwpDCjMOlwq7CicOlwozCuicsICfDp8K/wpTDpcKuwonDpcKMwronLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCjsKGw6fClMKww6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKfwo7DpcKOwqLDpcKMwronLCAnw6bCtsK1w6bCscKfw6XCjMK6JywgJ8Oowo3ClMOlwp/CjsOlwozCuicsICfDp8KnwoDDpcKxwr/DpcKMwronLCAnw6TCu8KZw6bCuMK4w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCicOmwpjCjsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKiwoXDpcKIwpfDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCicOlwoXCg8OlwozCuicsXG4gICAgICAgICAgICAnw6bCsMK4w6XCrsKJw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKYwo7DpsK6wqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrDChsOkwrnCkMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKnw6fClMKww6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwoHDpcKMwpbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrvCusOlwq7CgcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCssKZw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKwwqTDpsK6wqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrjChcOmwrXCgcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCs8Kww6XCrsKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKzwonDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCssKkw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wrDDpsKzwr3DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrTCm8OmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6bCs8KJw6bCuMKvw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KfwrPDp8KLwq7DpcK4woInLFxuICAgICAgICAgICAgJ8OmwpnCi8OmwrHCn8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCrsKJw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKDwqDDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrDCuMOmwpjCpcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKJw6bCusKqw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK+wrfDpcKMwpbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwofCkcOpwpfCqMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCvMKzw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OoworCl8Olwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6nCvsKZw6bClsKHw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK+wpnDpsK1wrfDpcK4woInLFxuICAgICAgICAgICAgJ8OlwrnCs8OlwpLCjMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKXw6nCncKWw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKvwo/DpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrzCs8OmwrXCpsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKOw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wpzDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpXCv8OmwrPCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCusKRw6nCnMKEw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKNwpfDpcK5wrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCu8K2w6XCucKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK7wrrDp8KTwq/DpcK4woInLFxuICAgICAgICAgICAgJ8OpwoLCtcOmwq3CpsOlwrjCgicsXG4gICAgICAgICAgICAnw6bCrcKmw6XCpMK3w6XCscKxw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcK7wrrDqcKYwrPDpcK4woInLFxuICAgICAgICAgICAgJ8Omwp3CvsOmwrrCqsOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcKJw6bCs8K9w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKhwrrDpsKYwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrXCpsOlwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6bClMK/w6XCksKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcK+wpnDpcKywqnDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwpbCsMOnwr3Cl8OlwozCuicsICfDpsK8wrPDpcK5wrPDpcK4woInLCAnw6nClcK/w6bCscKAw6XCjsK/JywgJ8Omwq3CpsOlwrnCs8Olwo7CvycsICfDpMK4worDpsKdwq3DpcKOwr8nLCAnw6bCsMK4w6XCrsKaw6XCjsK/JywgJ8Oowr/CnsOlwp/CjsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKuwoHDpcK+wrfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowpXCicOlwp/CjsOlwozCuicsICfDp8Kmwo/DpcKuwonDpcK4woInLCAnw6fCpsKPw6nCvMKOw6XCuMKCJywgJ8Olwq/Cv8Olwq7CgcOlwo7CvycsICfDqcKcwp7DpsK1wqbDpcKOwr8nLCAnw6bCn8KYw6jCjcKjw6XCjsK/JywgJ8OlwrHCj8Olwo3Cl8Olwo7CvycsICfDpcKPwqTDp8KUwrDDpcKOwr8nLCAnw6XCkcKow6XCrsKBw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtsOkwrvClicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDpsKxwp/DqMKlwr/Dp8KcwoEnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCjcKXw6bCmMKMw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OkwrjCnMOmwrnClsOlwozCuicsXG4gICAgICAgICAgICAnw6jCpcK/w6bCucKWw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKdwpLDpMK6wpHDqMKwwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrnCvsOpwofCjMOlwozCuicsXG4gICAgICAgICAgICAnw6nCncKSw6XCscKxw6bCucKWw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKWwrDDpcK7wrrDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8OmwpjCjMOlwo7CvycsXG4gICAgICAgICAgICAnw6jCv8Kbw6jCtMKkw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwonDpMK5wonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpnCr8Olwr7Ct8OpwpXCh8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCj8Kgw6XCscKxw6XCjMK6JywgJ8OmwpjCjMOmwrHCn8OlwozCuicsICfDpMK5wpDDpcK5wrPDpcK4woInLCAnw6bCtcKuw6bCosKBw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowpDCjcOkwrnCocOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCrsKJw6bCusKQw6XCjMK6JywgJ8OmwrnCmMOkwrjCnMOlwozCuicsICfDqMKOwrLDqMKKwrHDpcKOwr8nLCAnw6TCuMKKw6bCoMKXw6XCjsK/JywgJ8OoworCpsOmwrrCqsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK5wp3DpsKxwp/DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCtcKUw6nCmMKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK6wpDDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OnwpHCnsOmwpjCjMOlwrjCgicsXG4gICAgICAgICAgICAnw6TCucKdw6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKYwp/DpcKtwpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq3CpsOlwq7CgcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCvcKtw6bCs8K9w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKwwrjDpMK/wq7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Okwr/CrsOmwrDCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCucKWw6XCj8Kjw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK+wrfDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoPCvcOmwpjCjMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bClsKww6TCvcKZw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK4wp3DpsKwwrTDpcKMwronLCAnw6XCiMKGw6XCrsKcw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwrnCsMOmwr3CrcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCnMKIw6bCucKWw6XCjMK6JywgJ8OowrTCtcOmwrrCqsOlwrjCgicsICfDpMK9wpnDpsKxwp/DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCtcKjw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OnwqvCoMOowrTCocOlwozCuicsXG4gICAgICAgICAgICAnw6fCkcKew6nCh8KRw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKNwpfDpcK6wrfDpcK4woInLFxuICAgICAgICAgICAgJ8Onwp/Cs8Olwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKJw6jCv8Kcw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK1wqPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CgcOpwoPCvcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCr8K7w6TCucKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrTDpcKbwr3DpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CmsOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKKw6fCisK5w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK6wo7DqcKDwr3DpcKOwr8nLFxuICAgICAgICAgICAgJ8Opwr7CmcOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCtMKHw6TCucKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK/wqHDpMK4wrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCqMOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKnw6TCvcKZw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK8wprDpsKYwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpDCicOlwq7CicOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKQwonDpcK3wp7DpcKMwronLFxuICAgICAgICAgICAgJ8Opwp3CksOlwo7Cn8OlwozCuicsXG4gICAgICAgICAgICAnw6TCusKVw6XChsKIw6XCscKxw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKQwonDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrDCuMOkwrjCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCsMK4w6bClsKww6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrDDpcK5wrLDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrPCsMOlwpLCjMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCs8Khw6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKBwoLDpcK3wp3DpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CicOnwqbCj8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCkMKJw6bCsMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wofDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwq7CnMOmwpjCpcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKiwoHDpcK3wp7DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCsMOlwp/CjsOlwrjCgicsXG4gICAgICAgICAgICAnw6bCqMKfw6bCoMKRw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKrwpjDpcKuwonDpcK4woInLFxuICAgICAgICAgICAgJ8OpwpPCnMOpwrzCk8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCncKWw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwpzDpMK4wrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqXCicOmwpbCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKHw6jCvcK9w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4worDqcKrwpjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmworCmsOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpMK4wrTDpcK3wp3DpcKMwronLFxuICAgICAgICAgICAgJ8Olwo3Cl8OkwrjCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCucKQw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKHwpHDpsK6wqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8Olwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKcw6TCucKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK1woTDpsK6wqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CnMOpwrvChMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCucK/w6bCmMKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK7wo7DpcK3wp3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrTCh8OkwrvCgcOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMKKw6nCpcK2w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Okwr/CocOlwrfCnsOlwozCuicsXG4gICAgICAgICAgICAnw6XCvsK3w6XChcK0w6XCuMKCJyxcbiAgICAgICAgICAgICfDpMK4worDqcKlwrbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCv8OkwrjCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6nChMKxw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKpwrrDpsK6wpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpPChcOlwrHCscOlwo7CvycsXG4gICAgICAgICAgICAnw6TCvcKZw6XCucKyw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKowqrDpcKzwrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrzCi8OpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCjsKJw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wofDpcK5wrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtsOkwrvClicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDpcKxwrHDpMK4wpzDp8KcwoEnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCtcKOw6XCjcKXw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OlwrjCgsOkwrjCrcOlwozCuicsXG4gICAgICAgICAgICAnw6XCjsKGw6TCuMKLw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqnDpsKhwqXDpcKMwronLFxuICAgICAgICAgICAgJ8OmwqfCkMOowo3Cq8OlwozCuicsXG4gICAgICAgICAgICAnw6XCjsKGw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKVwr/DpsK4woXDpcKMwronLFxuICAgICAgICAgICAgJ8OnwqvCoMOkwrjCmMOlwrjCgicsXG4gICAgICAgICAgICAnw6XCucKzw6nCmMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK1wo7DqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpXChsOmwrLCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCncKSw6XCssKbw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OlwrjCgsOlwo3Cl8OlwozCuicsXG4gICAgICAgICAgICAnw6XCuMKCw6XCjMKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKfwo7DqcKYwrPDpcKMwronLFxuICAgICAgICAgICAgJ8OlwpvCm8OmwpbCucOlwozCuicsXG4gICAgICAgICAgICAnw6bCncKOw6bCssKnw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK7woTDpcKywpvDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrTCgsOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6jCg8K2w6XCjcKXw6XCuMKCJyxcbiAgICAgICAgICAgICfDqMKDwrbDpcK3wp7DpcK4woInLFxuICAgICAgICAgICAgJ8OlwrnCs8OlwrrCpsOlwrjCgicsXG4gICAgICAgICAgICAnw6jCjsKxw6jCpcK/w6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKNwrPDpcKiwqjDpcK4woInLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrfChMOlwo3CmsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCvMKgw6XCusKXw6XCjMK6JywgJ8OkwrjCtMOmwrfChMOlwozCuicsICfDpsK3woTDpcK3wp3DpcKMwronLCAnw6XCjcKaw6XCscKxw6XCjMK6JywgJ8OlwpHCqMOmwp3CkcOlwozCuicsICfDpsKhwpPDpcKPwrDDpcKOwr8nLCAnw6nCq8KYw6nCncKSw6XCjsK/JywgJ8OmwrLCgsOmwrrCkMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKewqPDpcK6woTDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwrjCgsOkwrjCrcOlwozCuicsICfDpcKxwrHDpMK6wq3DpcKMwronLCAnw6XCs8KEw6XCn8KOw6XCjMK6JywgJ8Olwo/CsMOlwoTCv8OlwrrChMOlwozCuicsICfDqMKWwpvDpcKfwo7DpcKMwronLCAnw6bCu8KVw6XCt8Kew6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCnMOowpDCpcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMKcw6jCkMKlw6XCjMK6JywgJ8OmwrLCs8Olwo/Co8OlwozCuicsICfDpcKewqbDpcKIwqnDpcKOwr8nLCAnw6XCucK/w6nCpcK2w6XCjsK/JywgJ8OlwojCqcOmwrTCpcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8KDwp/DpcKPwrDDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCisKdw6fCvcKYw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8Kmwo/DpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OnwonCn8OlwrnCs8OlwozCuicsXG4gICAgICAgICAgICAnw6jCjsKxw6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK+wpnDpcKPwqPDpcK4woInLFxuICAgICAgICAgICAgJ8Oowo7CscOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgICAnw6jCjsKxw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKLwpvDqMK/wpzDpcK4woInLFxuICAgICAgICAgICAgJ8OowpPCrMOowo7CscOlwrjCgicsXG4gICAgICAgICAgICAnw6bCoMKWw6nCnMKew6XCuMKCJyxcbiAgICAgICAgICAgICfDpsK1wrfDqcKYwrPDpcK4woInLFxuICAgICAgICAgICAgJ8OpwpXCv8OlwrLCm8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCvcKNw6XCncKKw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Omwr3CjcOlwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6XCr8KSw6TCusKtw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKdworDpcKtwpDDpcKMwronLFxuICAgICAgICAgICAgJ8OlwqXCjsOmwpbCh8OlwozCuicsXG4gICAgICAgICAgICAnw6nCncKSw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDqMKvwrjDpcKfwo7DpcK4woInLFxuICAgICAgICAgICAgJ8Olwq/Cv8OlwoXCicOlwrjCgicsXG4gICAgICAgICAgICAnw6XCrsKJw6TCuMKYw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKrwpjDpcKvwobDpcK4woInLFxuICAgICAgICAgICAgJ8OmwpjCjMOpwoLCkcOlwrjCgicsXG4gICAgICAgICAgICAnw6bCmMKMw6TCucKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wrTDpsKcwpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrXCjsOlwq7CgcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcK4woLDpMK4wq3DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrvCu8Olwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6bCm8Kyw6nCmMKcw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKFwpbDpcK3wp7DpcK4woInLFxuICAgICAgICAgICAgJ8OpwoLCucOlwp/CjsOlwrjCgicsXG4gICAgICAgICAgICAnw6nCscK8w6XCj8Kww6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKHwpHDpMK5wqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpjCicOnwqXCpcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCvsKuw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKxwrbDpMK4worDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrPCl8OmwrDCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCosKBw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKzwrDDpcKuwonDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrPCsMOlwrHCscOlwozCuicsICfDpcKywrHDpcKywrPDpcKMwronLCAnw6bClsKww6bCs8Kww6XCuMKCJywgJ8OowoLCpcOlwp/CjsOlwrjCgicsICfDpcKuwoHDqcKYwrPDpcKOwr8nLCAnw6TCuMKcw6XCucKzw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwqjCgcOmwrXCt8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCjsKvw6fCv8Kgw6XCjMK6JywgJ8OkwrnCs8OlwrHCscOlwrjCgicsICfDpsKWwofDp8KZwrvDpcK4woInLCAnw6jCjcKjw6bCiMKQw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpfCpcOnwoXCp8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMKcw6bCuMKvw6XCjMK6JywgJ8OlwrLCmsOlwrHCscOlwozCuicsICfDpMK6wpTDqMKOwrLDpcKOwr8nLCAnw6jCjsKSw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Oowo7CscOoworCnMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6jCjsKxw6XCn8KOw6XCjMK6JywgJ8OpwpLCosOlwp/CjsOlwozCuicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK4wrTDpsKywoLDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XChcKww6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8K9wpfDpcK6woTDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCs8OkwrjCnMOlwozCuicsXG4gICAgICAgICAgICAnw6bCssKCw6XCjcKXw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKDwq/DpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrLCgsOmwrDCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6jCi8KNw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK0wrnDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCs8OpwoLCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6jCjsKSw6XCjcKXw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKSwpnDqcKYwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCtMOmwrLCrcOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCvsK3w6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Olwr7Ct8Olwp/CjsOlwozCuicsXG4gICAgICAgICAgICAnw6TCucKQw6nCmcK1w6XCuMKCJyxcbiAgICAgICAgICAgICfDp8KmwrnDpcKfwo7DpcK4woInLFxuICAgICAgICAgICAgJ8OpwpnCtcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKBw6bCtMKlw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK9wpDDpsKywrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq3CpsOlwp/CjsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCusKGw6TCusKRw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDpcKOwp/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCj8OmwrTCpcOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK0w6nCgsKRw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKBworDpcKfwo7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OkwrjCnMOmwpjCjMOlwrrCnMOlwozCuicsICfDpMK4wrTDpsK4woXDpcK4woInLCAnw6nCq8KYw6XClMKQw6XCjsK/JywgJ8OpwpjCs8OowrDCt8Olwo7CvycsICfDqMKMwozDpcK5wrPDpcKOwr8nLCAnw6jCjsKYw6XCjsK/JywgJ8OkwrjCnMOpwpjCv8Olwo7CvycsICfDpcKGwqDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCu8Kow6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK7wqjDpcKfwo7DpcKMwronLCAnw6nCgsK5w6XCucKzw6XCjsK/JywgJ8OmwrLCvsOlwozClsOlwo7CvycsICfDpsKDwqDDpsKwwpHDpcKOwr8nLCAnw6XCjcKaw6XChcK0w6XCjsK/JywgJ8OpwpjCs8Okwr/CocOlwo7CvycsICfDpsKXwqDDpsKjwqPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCj8KPw6bCs8K9w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KJwqHDpMK4wrnDpcKMwronLCAnw6nChMKEw6XCn8KOw6XCjsK/JywgJ8Olwo3ClcOlwo7CvycsICfDqcKDwpPDpcKfwo7DpcKOwr8nLCAnw6bCm8K5w6XCjsK/JywgJ8Olwq7CmsOpwpnCtsOlwo7CvycsICfDpcK3wqjDqcKHwo7DpcKOwr8nLCAnw6TCuMKcw6bCmMKOw6XCjsK/JywgJ8OmwojCkMOmwq3CpsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6bCssKzw6XCjcKXw6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwoPCkcOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpMK4wq3DpcKOwp/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwofCkcOmwrDCtMOlwozCuicsXG4gICAgICAgICAgICAnw6TCusKMw6TCuMKDw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KuwqHDpcKfwo7DpcKbwp7DpsKXwo/DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCisOowqHCl8OlwozCuicsXG4gICAgICAgICAgICAnw6bCg8Kgw6bCtcKOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcK3wqnDpMK5wonDpcK4woInLFxuICAgICAgICAgICAgJ8OmwpbCsMOpwoPCkcOlwrjCgicsXG4gICAgICAgICAgICAnw6bClsKww6XCr8KGw6XCuMKCJyxcbiAgICAgICAgICAgICfDp8KZwrvDpcKwwoHDpcK4woInLFxuICAgICAgICAgICAgJ8Oowo3CpcOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgICAnw6TCuMKtw6fCicKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK8woDDpcKwwoHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCvMKTw6bCpcK8w6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK+wpnDpMK6wq3DpcKMwronLFxuICAgICAgICAgICAgJ8OpwqHCusOmwrLCs8OlwpvCnsOmwpfCj8OlwozCuicsXG4gICAgICAgICAgICAnw6fCpsK5w6fCjsKLw6XCj8Kww6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKHwpHDpsKYwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OlwrzCgMOlwrDCgcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCsMKJw6bCsMKPw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrDDqMKAwoPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwp3CnsOlwo7CvycsXG4gICAgICAgICAgICAnw6nCgMKaw6jCrsK4w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK0wpvDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCpcK/w6XCt8Klw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKAwoHDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrbCp8OowqXCv8OlwozCuicsXG4gICAgICAgICAgICAnw6fCgMKNw6bCssKzw6XCm8Kew6bCl8KPw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsK0wpvDqcK+wpnDpcKMwronLFxuICAgICAgICAgICAgJ8OlwpDCicOlwojCqcOlwozCuicsXG4gICAgICAgICAgICAnw6XCgcKDw6XCuMKIw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKtwp/DpsK0wqXDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCncOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCvMKKw6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK0wpvDpcKuwoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrXCqcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKcw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrDDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwqDCvsOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCucKzw6nCocK2w6XCscKxw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OmwpbCsMOlwo3CjsOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKrw6TCuMKcw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsK5wpvDpsKywrPDpcKMwronLFxuICAgICAgICAgICAgJ8Onwp/Cs8Opwr7CmcOlwozCuicsXG4gICAgICAgICAgICAnw6bCscKdw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDqMKIwp7DqcKSwqLDpcK4woInLFxuICAgICAgICAgICAgJ8Olwq7CncOkwrjCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCj8K2w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKDwo/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwrLCgcOlwrHCscOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCrsKJw6nCmMKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKMwpfDpcKFwrPDpcKMwronLCAnw6bClsKHw6XCs8Kww6XCjMK6JywgJ8Omwq7Ct8OpwoPCvcOlwozCuicsICfDqcK+wpnDpcKuwonDpcKMwronLCAnw6bCnsKXw6XCt8Kew6XCuMKCJywgJ8Olwq7CicOpwpjCs8Olwo7CvycsICfDpsK7wpHDpcKOwr8nLCAnw6XChsKFw6nCu8KEw6XCjsK/JywgJ8OmwrHCpMOpwpjCtMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcK5wqTDpcKjwoHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrfCh8OmwrvCqMOlwozCuicsICfDpcKxwrHDpcKfwo7DpcKMwronLCAnw6nCucKkw6XCscKxw6XCjMK6JywgJ8OmwrXCmsOlwo7CvycsICfDpsK3wofDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bClsKww6TCucKhw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Olwo3Cq8OmwrvCqMOlwozCuicsXG4gICAgICAgICAgICAnw6fCusKiw6bCl8KXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKHwqTDpsKzwonDpcKMwronLFxuICAgICAgICAgICAgJ8OnwonCp8OpwofCjsOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKrw6jCvsKJw6XCuMKCJyxcbiAgICAgICAgICAgICfDqMK+wonDpcKOwr/DpcK4woInLFxuICAgICAgICAgICAgJ8OmwpbCsMOkwrnCocOlwo7CvycsXG4gICAgICAgICAgICAnw6jCjsK3w6XCmMKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKOwp/DqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpXCv8Olwp7Co8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCsMKBw6TCuMKYw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK7wrbDpsK0wqXDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwoTCpsOkwr3CnMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKnwqPDpsKUwr7DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCrcOnwqvCmcOlwozCuicsXG4gICAgICAgICAgICAnw6nCqcKsw6bCncKRw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKxwrHDqcKYwrPDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCgcOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCrcKfw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDpMK/wq7DpsKtwqbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrjCqcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCrcKmw6nCmcKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKNwprDp8KIwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Omwr/CrsOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCjcKOw6nCvsKZw6XCjMK6JywgJ8Omwr/CrsOpwpjCs8Olwo7CvycsICfDpcKNwpfDpMK5wpDDpcKOwr8nLCAnw6XCj8Kww6XCicKNw6XCjsK/JywgJ8OmwrjChcOkwrjCsMOlwo7CvycsICfDqMKMwoPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCrsK4w6bCmMKMw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKtwo/DqcKDwr3DpcKMwronLCAnw6fCpsK5w6XCt8Kew6XCuMKCJywgJ8OpwpXCv8OowpHCm8OlwrjCgicsICfDqMKuwrjDpsKYwozDpcKOwr8nLCAnw6nChMKiw6nCmcK1w6XCjsK/JywgJ8OowqXChMOlwp/CjsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK8wq/DpsKywrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrrCkMOmwrHCh8OlwozCuicsICfDqcKDwr7DpcKfwo7DpcKMwronLCAnw6XCj8Ksw6nCmcK1w6XCjMK6JywgJ8OkwrjCtMOpwqLCjcOlwo7CvycsICfDqMKIwp7DqcKYwrPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMKJw6nCl8Kow6XCs8Khw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK5wpbDpsK7wqjDpcKMwronLCAnw6TCucKJw6nCqcKsw6XCuMKCJywgJ8OnwoHCtcOlwq7CncOlwrjCgicsICfDpsK4wpHDpsKxwqDDpcKOwr8nLCAnw6XCjcKiw6bCsMKPw6XCjsK/JywgJ8OpwpnClcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKNwpfDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCjcKnw6nCvsKZw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKuwpvDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OpwoLCk8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgICAnw6bCocKQw6bCn8KPw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrnDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrfChcOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6nClcKHw6XCucKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKUwpDDpsKywrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8Olwo/CrMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChsKFw6TCucKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrDDqcKHwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwqTCvsOmwpfCl8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCpcK/w6XCs8Khw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKVwobDpMK4wpjDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwqLCgcOlwpvCrcOlwozCuicsICfDp8KdwqLDqcKYwrPDpcKMwronLCAnw6bCsMK4w6XCn8KOw6XCuMKCJywgJ8Olwq7CgcOpwpnCtcOlwo7CvycsICfDqMKZwp7DpcKfwo7DpcKOwr8nLCAnw6bCsMKRw6bCncKDw6XCjsK/JywgJ8OlwqTCj8OpwoLCkcOlwo7CvycsICfDpsKfwpjDpcKfwo7DpcKOwr8nLCAnw6fCncKiw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Okwr/CocOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsK1wonDpsKywrPDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrnCs8OmwqHCpcOlwozCuicsXG4gICAgICAgICAgICAnw6bCvcKiw6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK3wq7DpsK7wqjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwoHCr8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKVwobDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpvCusOlwqfCi8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCvcKXw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwonDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpHCqMOlwo/Co8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcK3wp3DpsKxwofDpcKMwronLFxuICAgICAgICAgICAgJ8OpwqHCucOlwp/CjsOlwrjCgicsXG4gICAgICAgICAgICAnw6XClcKGw6bCsMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK3wq7DqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCqsOlwrrCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCucK/w6nCgsKRw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKlwr/DpcKNwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwonCtsOmwrLCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCssKIw6TCuMKYw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKDwrjDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwqnCu8OpwqnCrMOlwrrCl8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcKpwr/DpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OnwqHCrsOlwrHCscOlwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6jClMKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4worDqMKUwqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowqXCv8OlwrnCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCs8KMw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDqMKIwobDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCncOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCgcKCw6XCucKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKtwqPDqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwoTCpsOkwr3CnMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCtcKOw6bCusKQw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtsOkwrvClicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDpsK5wpbDpcKMwpfDp8KcwoEnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCrcKmw6bCscKJw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OmwrHCn8OlwrLCuMOlwozCuicsXG4gICAgICAgICAgICAnw6bCrcKmw6bCmMKMw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwp/DpsKxwonDpcKMwronLFxuICAgICAgICAgICAgJ8OnwqHCmsOlwo/Co8OlwozCuicsXG4gICAgICAgICAgICAnw6bCscKJw6nCmMKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKdwpLDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrTCqsOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKcw6jCpcK/w6bCucKWw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwonDpcKNwpfDpcKMwronLFxuICAgICAgICAgICAgJ8OowpTCocOnwpTCuMOlwozCuicsXG4gICAgICAgICAgICAnw6bCscKfw6XCpMKPw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK7woTDqcKZwoLDpcKMwronLFxuICAgICAgICAgICAgJ8OmwpbCsMOmwrTCssOlwozCuicsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCu8KEw6fCn8Kzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcK7woTDp8KfwrPDpsK4wq/DpcKMwronLCAnw6jCpcK/w6XCocKew6XCscKxw6XCjMK6JywgJ8OkwrjCi8OpwpnChsOlwozCuicsICfDqcKTwoHDpcKxwrHDpcKMwronLCAnw6XCpMKnw6XChsK2w6XCuMKCJywgJ8OpwpjCs8OmwpbCsMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKNwoHDpcKgwrDDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwrzCoMOmwrnCvsOlwozCuicsICfDqMKMwoXDp8Kuwq3DpcKMwronLCAnw6TCuMK5w6bCscKfw6XCj8Kjw6XCuMKCJywgJ8OpwoPCp8Olwo7CvycsICfDp8KrwrnDpcKxwrHDpcKOwr8nLCAnw6bCiMK/w6XCjsK/JywgJ8OpwoPCp8OowqXCv8Olwo7CvycsICfDp8KrwrnDpsK6wqrDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCjcKGw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKywpnDpcK4woLDpcKMwronLCAnw6jCjcKGw6XCt8Kew6XCjMK6JywgJ8OmwrTCqsOmwrnClsOlwrjCgicsICfDp8KfwrPDqcKmwpbDpcK4woInLCAnw6bCncK+w6bCu8KLw6XCuMKCJywgJ8OnwpvCkcOlwojCqcOlwo7CvycsICfDpcKFwqzDpcKuwonDpcKOwr8nLCAnw6bCscKfw6nCmcK1w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwq7CnMOmwpjCjMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKlwr/DqcKZwrXDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrzCjcOlwq7CtsOlwrLCl8OlwozCuicsXG4gICAgICAgICAgICAnw6fCgsK5w6XChsKbw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KMwofDpMK6wq3DpcKMwronLFxuICAgICAgICAgICAgJ8OlwqTCt8OpwpnCtcOlwozCuicsXG4gICAgICAgICAgICAnw6XCrsKcw6nCg8K9w6XCuMKCJyxcbiAgICAgICAgICAgICfDpcK9wpPDqcKYwrPDpcK4woInLFxuICAgICAgICAgICAgJ8Omwp7CncOmwrHCn8OlwrjCgicsXG4gICAgICAgICAgICAnw6fCp8Ktw6XCvcKSw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK/wpzDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtMOlwrHCscOlwo7CvycsXG4gICAgICAgICAgICAnw6TCusKUw6XCs8Kww6XCnMKfw6XCrsK2w6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKVwr/DqcKYwrPDpcKcwp/DpcKuwrbDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowqXChMOmwqjCisOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6jCpcKEw6XCn8KOw6XCjMK6JywgJ8OmwqjCisOlwp/CjsOlwozCuicsICfDqMKlwoTDqcKYwrPDpcKMwronLCAnw6jCgMKBw6bCssKzw6XCj8Kjw6XCuMKCJywgJ8Omwp7Co8OpwpjCs8OlwrjCgicsICfDpcKuwpzDpcKfwo7DpcK4woInLCAnw6XCjcKXw6bCvMKzw6XCjsK/JywgJ8OowrDCt8Olwp/CjsOlwo7CvycsICfDpMK/wp3DpcK6wrfDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nChMKCw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKEwoLDpcKfwo7DpcKMwronLCAnw6XCjcKOw6XCrsK5w6XCjMK6JywgJ8OmwqLCgcOlwq3CkMOmwrnClsOlwozCuicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKNwobDqcKXwqjDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OkwrjCnMOlwq7CncOlwozCuicsICfDpsKOwofDpcKIwoDDpcKMwronLCAnw6nCksKfw6fCpcKlw6XCuMKCJywgJ8OkwrrCrMOlwrHCscOlwo7CvycsICfDpsKywpnDpsK0wovDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCrcKdw6bChMKfw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKtwp3DpcKNwpfDpcKMwronLCAnw6XCusKUw6XCn8KOw6XCuMKCJywgJ8Olwq7CicOpwpnChsOlwrjCgicsICfDpsKxwonDpcK3wp3DpcK4woInLCAnw6TCusKRw6bCosKmw6XCjsK/JywgJ8OlwqTCp8OmwoLCn8Olwo7CvycsICfDpcKtwp3DpsKYwozDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCu8KEw6XChsKIw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OpwrvChMOlwrfCnsOlwozCuicsXG4gICAgICAgICAgICAnw6nCusK7w6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKtwqbDp8KpwrTDpcK4woInLFxuICAgICAgICAgICAgJ8OnwrrCosOlwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6fCvcKXw6fClMKww6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK1wqDDpsKwwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowpXCssOmwpjCpcOlwo7CvycsXG4gICAgICAgICAgICAnw6nCu8KEw6bCosKFw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKLwrHDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpvCosOpwqPCjsOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCksK4w6XCrsKBw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKSwrjDpcKuwonDpcKMwronLCAnw6jCtcKkw6XCo8KBw6XCuMKCJywgJ8OlwpjCicOpwrHCvMOlwo7CvycsICfDqcKAwprDpcKxwrHDpcKOwr8nLCAnw6XCtMKHw6nCmMKzw6XCjsK/JywgJ8OpwoDCmsOlwp/CjsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKawo/DpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwpvCvsOpwoPCvcOlwozCuicsICfDpcK5wr/DpsKwwrTDpcK4woInLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCgcKpw6bClsK9w6XCnMKfw6XCrsK2w6bCl8KPw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKBwqnDpsKWwr3DpcK4woInLCAnw6XCiMKpw6XCt8Kdw6XCuMKCJywgJ8OlwrvCusOlwqfCi8Olwo7CvycsICfDpsKdwqXDpcKHwqTDpcKOwr8nLCAnw6XCt8K0w6TCuMKcw6XCjsK/JywgJ8OpwrnCpMOlwrPCsMOlwo7CvycsICfDpcKuwqPDpsKBwqnDpcKOwr8nLCAnw6XCksK4w6TCuMKww6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrvCmcOmwqHCg8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCu8KZw6bCocKDJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCpMKpw6nCl8Kow6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKkwqnDqcKXwqgnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK9wpzDpsKxwp/DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Omwr3CnMOmwrHCnyddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwqXCnsOlwobCnMOmwp7CtsOmwp7Cl8OlwozCuicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCpcKew6XChsKcw6bCnsK2w6bCnsKXw6XCjMK6J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OmwrnClsOlwo3Cl8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKVwr/DpsKywpnDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwrLCs8OpwrrCk8OlwozCuicsICfDqMKKwpnDqMKTwonDpcKMwronLCAnw6XCpMKpw6XCv8KDw6XCjMK6JywgJ8OlwrzCgMOnwqbCj8OlwozCuicsICfDqcKbwqjDqMKKwrHDpcKMwronLCAnw6bCtcKPw6nCmMKzw6XCuMKCJywgJ8OpwpXCv8OmwrLCmcOlwo7CvycsICfDpsKcwpvDpcKfwo7DpcKOwr8nLCAnw6XCrsKBw6TCucKhw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwqDCqsOmwrTCssOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCpMKpw6XChcKDw6XCjMK6JywgJ8Oowo3Ct8OlwqHCmMOlwozCuicsICfDqMKKwqbDpsK3wp7DpcKMwronLCAnw6fCn8Kzw6XCs8Kww6XCjMK6JywgJ8OpwobCtMOpwpnCtcOlwrjCgicsICfDpsKgwqrDpsK0wrLDpcKOwr8nLCAnw6fCgsKOw6nCmcK1w6XCjsK/JywgJ8OowozCtsOpwpnCtcOlwo7CvycsICfDpsKUwrjDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCucKYw6bCvcKtw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKywrPDpcKhwpjDpcKMwronLCAnw6nCm8Kow6bCucKWw6XCjMK6JywgJ8OmwrnCmMOkwrnCocOlwrjCgicsICfDqcKfwrbDpcKxwrHDpcK4woInLCAnw6bCucKYw6bCvcKtw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowqHCocOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcKbwoHDpcKzwrDDpcKMwronLFxuICAgICAgICAgICAgJ8Onwo/CoMOmwpnClsOlwozCuicsXG4gICAgICAgICAgICAnw6fCn8Kzw6nCvMKTw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKSwrjDpsK5wpjDpcKMwronLFxuICAgICAgICAgICAgJ8Olwo3Cl8OlwrLCs8OlwozCuicsXG4gICAgICAgICAgICAnw6jCgMKSw6nCmMKzw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcK4wrjDpcKuwoHDpcK4woInLFxuICAgICAgICAgICAgJ8OowqHCocOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCocKhw6TCuMKcw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKhwqHDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowqHCocOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCpcKBw6TCuMKcw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKCwrXDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCj8KMw6bCuMKFw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDp8KlwqXDpcKMwronLFxuICAgICAgICAgICAgJ8OlwozCl8OlwqHClMOlwozCuicsXG4gICAgICAgICAgICAnw6bCrcKmw6XChsKIw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKCwrXDpMK4wpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrTCnsOlwo/Co8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6nCgsK1w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8K7wqXDpcKuwoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpbCsMOlwq7CgcOlwo7CvycsXG4gICAgICAgICAgICAnw6nCgsK1w6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKawobDpcKbwp7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwp/CjsOmwq3CpcOowovCl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCssKzw6nCmMKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKywrPDqcKYwrPDpsKlwrzDpcKMwronLCAnw6TCusKRw6bCusKqw6XCjMK6JywgJ8OlwpDCm8OlwrHCscOlwozCuicsICfDpMK4wrTDpsK5wpjDpcK4woInLCAnw6bCscKow6fCvcKXw6XCuMKCJywgJ8OlwrLCs8OpwpjCs8Olwo7CvycsICfDpsK5wpjDqcKYwrTDpcKOwr8nLCAnw6XCucKzw6bCscKfw6XCjsK/JywgJ8Olwo3CjsOlwq7CucOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK4wrjDpcK+wrfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Omwq3CpsOpwpnCtcOlwozCuicsICfDqcK8wo7DpcKfwo7DpcKMwronLCAnw6bCtMKlw6XCuMKCw6XCuMKCJywgJ8Omwr7Cp8Olwo7CvycsICfDpMK4wrTDpsK+wqfDpcKOwr8nLCAnw6bCocKDw6bCusKQw6XCjsK/JywgJ8OmwrHCicOlwq/Cv8Olwo7CvycsICfDpcKuwonDpMK5wqHDpcKOwr8nLCAnw6fCn8Kzw6nCl8Kow6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrzCoMOlwq7CtsOnwpXCjMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCsMK4w6XCrsKaw6XCjMK6JywgJ8Omwq3CpsOpwpnCtcOmwrrCkMOlwozCuicsICfDpsKFwojDpcKIwqnDpcKOwr8nLCAnw6bCocKRw6bCpMKNw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwpvCisOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6jCtcKrw6XCscKxw6XCjMK6JywgJ8OowrXChMOpwpjCs8OlwozCuicsICfDpsKywoXDpsKxwp/DpcK4woInLCAnw6bCocKDw6bCscKfw6XCjsK/JywgJ8Olwo3Cl8Olwo7CvycsICfDpcKuwonDpcKMwpbDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCg8K0w6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OlwozCl8OmwrnClsOlwozCuicsXG4gICAgICAgICAgICAnw6jCi8KPw6TCu8KZw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMK1woTDpcKFwrTDpcK4woInLFxuICAgICAgICAgICAgJ8Olwq7CnMOnwqvCoMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCscKdw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwonDpMK7woHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpjCicOnwqbCvsOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK0w6bCrcKmw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKhwoLDpMK4wpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrDCuMOlwoXCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCocKCw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKwwrjDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XChsK3w6bCsMK0w6bCu8Kpw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKbwrbDqcKZwrXDpcKMwronLFxuICAgICAgICAgICAgJ8OnwqXCgcOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCk8Kdw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwoHDqMK/wpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpbCsMOnwpTCsMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKcw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKxwp/DpsKwwrjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoHCk8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCj8KMw6fCicKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKxwp/DpcKNwo7Dp8KRwrbDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwoDCgMOlwozClsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcK5wqTDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrTCqsOmwrHCn8OlwrjCgicsXG4gICAgICAgICAgICAnw6TCvMKaw6XCkMKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKywoXDqcKZwrXDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowr7CsMOmwrrCqsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCusKGw6bCtcKmw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wq3DpsKWwrnDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpbCsMOmwpnCg8Okwr7Cl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCisK3w6bCscKfw6TCvsKXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKAwprDqcKBwpPDpMK+wpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8Opwp3ClsOlwrfCnsOowovCl8OmwpfCj8Okwr7Cl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCusK7w6nCmMKzw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKowoTDpcK6wpXDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwqjChMOmwpjCn8OlwozCuicsICfDpcKGwrfDpsKwwrTDpsKxwp/DpcK4woInLCAnw6bCtsKfw6bCusKQw6XCuMKCJywgJ8OmwpbCsMOlwozClsOlwo7CvycsICfDpcKPwozDpcKzwrDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCucKYw6jCpcK/w6XCnMKfw6XCrsK2w6bCl8KPw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKQwonDqcKmwpbDpcK4woInLCAnw6XCj8Kkw6TCuMKIw6XCjsK/JywgJ8Opwr7CmcOlwrHCscOlwo7CvycsICfDpsKwwrjDqcKhwrrDpcKOwr8nLCAnw6XCh8Kkw6XCh8Kww6XCjsK/JywgJ8OmwrPCuMOmwrrCqsOlwo7CvycsICfDpMK/wp3DqcKdwpbDpcKOwr8nLCAnw6jCisKxw6XCnsKjw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtsOkwrvClicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDpcK5wr/DpMK4wpzDp8KcwoEnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCucK/w6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OowrbCisOnwqfCgMOlwozCuicsXG4gICAgICAgICAgICAnw6jCjcKUw6bCucK+w6XCjMK6JyxcbiAgICAgICAgICAgICfDpsK1wrfDp8KPwqDDpcKMwronLFxuICAgICAgICAgICAgJ8OlwqTCqcOmwrLCs8OlwozCuicsXG4gICAgICAgICAgICAnw6fCmcK9w6TCusKRw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK7woTDpcKfwpTDpcKMwronLFxuICAgICAgICAgICAgJ8OnwpXCqsOnwqbCusOlwozCuicsXG4gICAgICAgICAgICAnw6jCisKxw6nCg8K9w6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKNwpfDpsKywpnDpcKMwronLFxuICAgICAgICAgICAgJ8OowpDCncOlwrLCl8OlwozCuicsXG4gICAgICAgICAgICAnw6XCosKew6XCn8KOw6XCuMKCJyxcbiAgICAgICAgICAgICfDpMK7wo7DpcKMwpbDpcK4woInLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrfCscOlwpzCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCpsKPw6fClMKww6XCjMK6JywgJ8Onwr3Cl8OmwrnClsOlwozCuicsICfDpcKNwpfDpcKxwrHDpcKMwronLCAnw6XCrsKdw6XCrsKJw6XCjMK6JywgJ8Opwr7CmcOlwrLCl8OlwozCuicsICfDp8KbwpDDp8KUwrDDpcKMwronLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMKcw6jCjsKew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqMKOwp7DpcKfwo4nLCAnw6XCuMK4w6XCucKzJywgJ8OlwqHCmMOlwo7CpicsICfDpcKhwpjDpcKOwqYnLCAnw6XCocKYw6XCjsKmJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCrcOlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMKtw6XCscKxJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCvcKuw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK5wpjDpsKhwqXDpcKMwronLCAnw6bCvcKuw6XCrsKJw6XCjsK/JywgJ8OpwqXCtsOlwrnCs8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKPwq3DqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwqbClcOlwp/CjsOlwozCuicsICfDpsKPwq3DpMK4wpzDpcKOwr8nLCAnw6bCj8Ktw6jCpcK/w6XCjsK/JywgJ8OmwoPCoMOmwp3CpcOlwo7CvycsICfDpsKZwq7DpcKuwoHDpcK4woInLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCusKRw6bCtcKuw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpMK6wpHDpcKfwo7DpcKMwronLCAnw6bClsKww6XChcK0w6XCjsK/JywgJ8OpwoPCgcOlwo3Cl8Olwo7CvycsICfDpMK6wpHDpcKuwonDpcKOwr8nLCAnw6fCvcKXw6XCrsKaw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Onwo/CoMOmwrXCt8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCpsKZw6bCtMKyw6XCjMK6JywgJ8OmwpbCl8OpwpfCqMOlwozCuicsICfDqcKHwpHDpsK5wr7DpcKMwronLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCscKVw6XCpMK0w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKHwpHDpcK5wrPDpcKMwronLCAnw6bCv8Kgw6bCscKfw6XCjMK6JywgJ8Opwr7CmcOmwrnClsOlwozCuicsICfDpsK9wq7DqcKYwrPDpcKMwronLCAnw6bCvcKuw6XCjcKXw6XCjMK6JywgJ8Omwr7ChMOmwrXCt8OlwozCuicsICfDpcKNwpfDpsK+wrPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCn8K2w6XChcKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OmwrXCiMOmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6bCrcKmw6bCscKfw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKbwrLDpsKxwp/DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrnCkMOmwpjCjMOlwrjCgicsXG4gICAgICAgICAgICAnw6XCjcKXw6nCm8KEw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKnwovDpcKFwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrvCgcOlwozClsOlwo7CvycsXG4gICAgICAgICAgICAnw6fCv8KBw6bCusKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrDDpMK4wrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrnCs8OmwrrCkMOnwpHCtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCvcKbw6XCscKxw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KmwoXDpcKfwo7DpcKMwronLCAnw6XCjcKXw6bCtcK3w6XCjMK6JywgJ8OpwqHCusOlwr7Ct8OlwozCuicsICfDpMK4wonDpsKwwrTDpcKMwronLCAnw6nCq8KYw6bCmMKOw6XCjMK6JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrHCn8OpwpfCqMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6jCk8Ksw6bCscKfw6XCjMK6JywgJ8OmwrHCn8OmwrXCt8OlwozCuicsICfDpsKWwrDDpMK8wprDpcKMwronLCAnw6bCgcKpw6XCucKzw6XCuMKCJywgJ8Olwo/CsMOlwrHCscOlwrjCgicsICfDpcK8woDDpcK5wrPDpcK4woInLCAnw6nCucKkw6XCscKxw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrnCm8OmwrHCn8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6jCtcKkw6XCncKOw6XCjMK6JywgJ8OpwpzCnsOlwrHCscOlwozCuicsICfDpcKdwqHDpcKkwrTDpcKMwronLCAnw6nCusK7w6fCq8Kgw6XCjMK6JywgJ8OlwpDCtMOlwrfCncOlwrjCgicsICfDpcK7wonDpsKxwp/DpcK4woInLCAnw6nCm8K3w6XCt8Kew6XCuMKCJywgJ8OpwoHCgsOmwrrCqsOlwo7CvycsICfDpcK+wpDDqcKXwrvDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCjMKCw6XCkMKNw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqMKMwoLDpcKNwpfDpcKMwronLCAnw6jCjMKCw6bCuMKvw6XCjMK6JywgJ8OlwozClsOlwrfCnsOlwrjCgicsICfDpMK/wqHDpcKuwpzDpcK4woInLCAnw6nCq8KYw6XCt8Kew6XCuMKCJywgJ8OnwpTCtcOnwpnCvcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKCwofDpcK6wobDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OnwqvCr8OlwrfCnsOlwozCuicsICfDqcK8wo7DpsK5wpbDpcKMwronLCAnw6nCq8KYw6jCpsKBw6XCuMKCJywgJ8OlwpvCm8OkwrzCmsOlwrjCgicsICfDpcK5wr/DpcKuwoHDpcKOwr8nLCAnw6bCgMKAw6nCm8KGw6XCjsK/JywgJ8OlwrDCgcOlwrzCgMOlwo7CvycsICfDpcK+wrfDpcK6wobDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCg8Kgw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKDwqDDpcKfwo7DpcKMwronLCAnw6bCg8Kgw6nCmMKzw6XCjMK6JywgJ8Olwo3CmsOnwr3Cl8Olwo7CvycsICfDpsKDwqDDpMK4wpzDpcKOwr8nLCAnw6nCvsKZw6nCl8Kow6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwqLChcOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCosKFw6bCscKfw6XCjMK6JywgJ8OlwoXCtMOlwq7CgcOlwrjCgicsICfDpsKiwoXDpcKOwr8nLCAnw6XCpMKnw6XCn8KUw6XCjsK/JywgJ8OkwrjCsMOpwqHCusOlwo7CvycsICfDpMK6wpTDpcKNwo7DpcKOwr8nLCAnw6XCucKzw6jCv8Kcw6XCjsK/JywgJ8OowpXCicOlwrLCrcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKxwpXDpcKwwr7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Olwp/CjsOlwozCuicsICfDqcKZwobDpMK4wrDDpcK4woInLCAnw6bCtcK3w6TCuMKww6XCjsK/JywgJ8OpwpnChsOmwrLCs8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKywrPDpsK6wpDDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrrCkMOlwp/CjsOlwozCuicsICfDp8K0wqvDqcKHwpHDpcKOwr8nLCAnw6nCvsKZw6XCt8Kdw6XCjsK/JywgJ8Oowr/CnsOlwrnCs8Olwo7CvycsICfDpcKSwozDpcK5wrPDpcKOwr8nLCAnw6TCuMKcw6bCusKQw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwpjCs8OmwrHCn8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCscKfw6XCn8KOw6XCjMK6JywgJ8OpwpjCs8OmwpjCpcOlwrjCgicsICfDqcKYwrPDqMKlwr/DpcKOwr8nLCAnw6nCmMKzw6TCuMKcw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrjChcOowr/CnMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsK4woXDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OowovCscOlwr7Ct8OlwrjCgicsXG4gICAgICAgICAgICAnw6jCv8Kew6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDpMK9wpvDpcKGwojDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpjCs8OlwrHCscOlwo7CvycsXG4gICAgICAgICAgICAnw6bCuMKFw6bClsKww6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK/wp7DpcKxwrHDpcKjwq7DpsKXwo/Dp8KRwrbDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowr/CnsOlwo3Cl8OnwpHCtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDpcK5wr/DqMKlwr8nLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCjcKXw6XCrsKBw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Opwp3CksOnwqfCgMOlwozCuicsXG4gICAgICAgICAgICAnw6XChcK0w6XCrsKBw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKlwr/DpMK5wqHDpcKhwpjDpcKMwronLFxuICAgICAgICAgICAgJ8OowonCr8OlwrrChsOlwozCuicsXG4gICAgICAgICAgICAnw6bCscKfw6XCjcKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKCwpXDpcKuwoHDpcKMwronLFxuICAgICAgICAgICAgJ8Omwq3CpsOpwrjCo8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCmsKGw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKpwqzDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCisOmwp7Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCrsK+w6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKowqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Omwp/Cs8OlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKfwo7DpMK4wq3DpcKMwronLFxuICAgICAgICAgICAgJ8OpwrHCvMOlwrPCsMOlwozCuicsXG4gICAgICAgICAgICAnw6bCn8Kzw6XCjMKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKfwrPDpcKNwpfDpcKMwronLFxuICAgICAgICAgICAgJ8Omwp/Cs8OmwrHCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCn8Kzw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK5wr/DpcKvwqjDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowp7CjcOlwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6jCnsKNw6bCsMK0w6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wonDpsKxwp/DpMK+wpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwqHCgsOmwp7Cl8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKxwqHDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OnwqfCgMOlwrPCsMOlwozCuicsXG4gICAgICAgICAgICAnw6XCj8Kgw6XCvcKpw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4woPDpsKYwp/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwpvCgcOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6nCmMKzw6bCnMKUw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wrTDpsKhwoLDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwoHCtcOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcKow6XCt8Kew6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDpMK5wpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtMOlwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6fCgcKMw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKNwpTDpsK1wqbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowrXChMOmwrrCkMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCsMK4w6fCpsKPw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK+wpnDqMKDwpzDpcKQwoTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwoHCrcOlwp/CjsOnwpHCtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCosKnw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpMK4wofDp8KnwoDDpcKMwronLCAnw6jCncK2w6XCscKxw6XCjMK6JywgJ8OpwpXCv8OmwrTCssOlwozCuicsICfDpcKywpHDpsK6wqrDpcK4woInLCAnw6jCi8KNw6bCosKnw6XCjsK/JywgJ8OowpfCpMOlwo7CvycsICfDqMKSwpnDpcKxwrHDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCjMKXw6bCtcK3w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK1wrfDpcKfwo7DpcKMwronLCAnw6nCk8K2w6bCtcK3w6XCjMK6JywgJ8OpwpPCgcOlwrHCscOmwrjCr8OlwozCuicsICfDpcKQwojDpsK1wqbDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCmMKyw6XCn8KOw6bCuMKvw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK4wq/DpcKPwqPDpcKMwronLCAnw6nCmMKyw6XCn8KOw6XCjMK6JywgJ8OkwrjCnMOlwoXCtMOlwrjCgicsICfDpMK4worDpsKAwp3DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCksKmw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKSwqbDpcKNwpfDpcKMwronLCAnw6nCksKmw6XCjMKXw6XCjMK6JywgJ8OnwoHCtcOlwrHCscOlwo7CvycsICfDpsK1wqbDpcKMwpfDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCtMK1w6bCuMKvw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK4wq/DpcKMwpfDpcKMwronLCAnw6bCuMKvw6XCjcKXw6XCjMK6JywgJ8OowqbCg8OlwqHCmMOlwozCuicsICfDpsKhwoLDpcK5wrPDpcK4woInLCAnw6XCucKzw6XCjcKXw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Onwo7CicOmwp7Cl8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCjsKJw6XCt8Kew6XCjMK6JywgJ8OlwozCl8OmwrXCgcOlwrjCgicsICfDpcKuwrnDpcKOwr8nLCAnw6nCmcKGw6XCt8Kdw6XCjsK/JywgJ8Olwo3CmsOnwpnCvcOlwo7CvycsICfDpcKFwrTDpMK4wprDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCmcK+w6jCicKyw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8Olwo/Cs8OmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6XCh8KMw6TCusKRw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wrPDpsKewpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowqXCv8Omwp7Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCucKQw6TCuMKaw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK+wrfDpMK/wp3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpTCsMOmwp7Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6fClMKww6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKdwpbDqMKlwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpTCsMOkwrjCnMOlwo7CvycsXG4gICAgICAgICAgICAnw6nCgsKjw6XCncKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKawobDpsKewpfDpcKQwoTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowrTCusOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcKrw6bCrcKlw6XCjMK6JywgJ8OpwpLCn8OlwrHCscOlwo7CvycsICfDpsKYwq3DpcK5wrPDpcKOwr8nLCAnw6XCr8KMw6XCt8Kdw6fCkcK2w6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrLCs8OmwrHCoMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqcKHwpHDpcKfwo7DpsKxwp/DpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7CnMOlwrfCnsOlwrjCgicsXG4gICAgICAgICAgICAnw6XCpMKpw6XCs8Kow6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKHwqTDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8OkwrjCucOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKcw6XChcKww6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKDwr3DpcKuwonDp8KRwrbDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwr3Cl8Olwp/CjsOkwrvCq8Okwr3CrMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCt8K0w6nCqcKsw6fCkcK2w6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KOwq/DpsKxwp/DpsKvwpvDpcKNwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCp8OlwozClsOnwpHCtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCncKlw6XCrsK+w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrTDpcKuwr7DpcKMwronLCAnw6XCkMKIw6XCscKxw6XCuMKCJywgJ8OowrHCocOlwrfCnsOlwo7CvycsICfDpsKtwqbDpcKuwqPDpcKOwr8nLCAnw6XCv8K7w6XCn8KOw6XCjsK/JywgJ8OpwofCkcOnwqfCgMOnwpHCtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK0wofDpcK3wqbDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrHCn8OlwrfCnsOlwozCuicsICfDpcKHwq3Dp8KlwqXDpcK4woInLCAnw6XCrsKBw6bCmMKOw6XCjsK/JywgJ8OmwonCtsOnwrvCpcOlwo7CvycsICfDqcK+wpnDpcK3wp7DpcKOwr8nLCAnw6XCpMKnw6bClsKww6XCjsK/JywgJ8OlwqTCqcOnwq3CicOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpbDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6bCtcK3w6XCjcKXw6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrXCt8Olwo/Co8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCvsKZw6XCjcKOw6XCjMK6JywgJ8OnwqfCgMOowovCscOlwozCuicsICfDp8KQwrzDpcKxwrHDpcKMwronLCAnw6fCvsKOw6XChcKww6XCjMK6JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCicOkwrrCmsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMKJw6TCusKaw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrrClMOmwozCh8OlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCusKUw6bCjMKHw6XCscKxJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCkMK8w6bCtcK3w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KQwrzDpsK1wrcnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKEwovDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoTCi8OlwrfCniddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpbCh8OmwpjCjMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bClsKHw6bCmMKMJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMKHw6XCrsKBw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpMK4wofDpcKuwoEnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK4wpzDpsKWwrnDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OkwrjCnMOmwpbCuSddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Omwr7ChMOowr/CiMOlwo7CvycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCvsKEw6jCv8KIw6XCjsK/J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCrsKaw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKuwprDpcKuwonDpcKOwr8nXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKxwq/DpsKYwozDpcKOwr8nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwrHCr8OmwpjCjMOlwo7CvyddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCtMOpwqvCmMOlwo7CvycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCuMK0w6nCq8KYw6XCjsK/J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCmcK9w6bCssKZw6nCu8KOw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KZwr3DpsKywpnDqcK7wo7DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKYwozDpsKxwp/DqcK7wo7DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwpjCjMOmwrHCn8OpwrvCjsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvyddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrnCkMOkwrjCnMOpwrvCjsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCucKQw6TCuMKcw6nCu8KOw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCmcK1w6bCsMK0w6nCu8KOw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKZwrXDpsKwwrTDqcK7wo7DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK/wp3DpMK6wq3DqcK7wo7DpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Okwr/CncOkwrrCrcOpwrvCjsOmwpfCj8OowovCl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvyddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwpDCvMOkwrjCrcOpwrvCjsOmwpfCj8OowovCl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6fCkMK8w6TCuMKtw6nCu8KOw6bCl8KPw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OpwofCjcOlwrrChsOlwrjCgicsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKHwo3DpcK6wobDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCuMKdw6TCuMKtw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDpsK4wqHDpcKPwqPDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrHCn8OlwozCl8OlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCssK4w6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKMwpfDp8KiwprDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrjCncOlwozCl8OlwozCuicsXG4gICAgICAgICAgICAnw6XCt8K0w6XCjcKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKVwr/DpcKvwr/DpcKMwronLFxuICAgICAgICAgICAgJ8Olwo/CjMOmwqHCpcOlwozCuicsXG4gICAgICAgICAgICAnw6bCssKZw6XCncKqw6XCncKdw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wofDp8KbwpvDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCh8OlwrfCnsOlwozCuicsXG4gICAgICAgICAgICAnw6bCtsKqw6nCmcK1w6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK7wpTDpsKxwp/DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrDCuMOlwrfCncOlwozCuicsXG4gICAgICAgICAgICAnw6XCkMKIw6XCt8Kdw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwp/DpsK0wqXDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrnCncOpwr7CmcOlwp3CocOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCt8Kdw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8K2wqbDpsKxwp/DpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwr3CvMOlwo3Cl8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCjcKjw6bCmMKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KSwqfDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCp8OowrbCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCk8Kcw6bCosKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKiwoHDpcK5wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrzCgMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCv8Kgw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKfwo7DpcKPwqPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwp7Cq8OmwrHCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCrcKmw6nCmsKGw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wrDDqcKDwr3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqXCicOoworCgsOlwo7CvycsXG4gICAgICAgICAgICAnw6TCusKRw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK3wqvDpsK6wqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrfCq8OlwrHCscOlwo7CvycsXG4gICAgICAgICAgICAnw6fCn8Kzw6bCn8Kxw6XCnMKfw6XCrsK2w6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KnwoDDpcKxwrHDpcKcwp/DpcKuwrbDpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoXCicOpwpjCs8OlwpzCn8Olwq7CtsOmwpfCj8OowovCl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCvcKtw6bCsMK0w6jCi8KXw6bCl8KPw6XCnMKfw6XCrsK2w6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OlwpvCm8OlwrfCncOnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKIwpDDqcKDwr3DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCncKSw6fCvsKKw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKUwqbDpsKxwp/DpcKMwronLFxuICAgICAgICAgICAgJ8OpwofCkcOnwonCm8OlwozCuicsXG4gICAgICAgICAgICAnw6bCrcKmw6TCvsKvw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKIwpDDpcKNwo7DpcKMwronLFxuICAgICAgICAgICAgJ8Opwr7CmcOmwrPCicOpwqnCv8OlwozCuicsXG4gICAgICAgICAgICAnw6nCncKSw6fCmcK9w6bCscKfw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKWwrDDqcKDwr3DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrjCqcOmwrHCn8OlwozCuicsXG4gICAgICAgICAgICAnw6nCg8K9w6bCscKfw6XCoMKww6XCuMKCJyxcbiAgICAgICAgICAgICfDpcK9wq3DpcK3wp7DpcK4woInLFxuICAgICAgICAgICAgJ8OpwoLCm8OlwrTCg8OlwrjCgicsXG4gICAgICAgICAgICAnw6XCtMKHw6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKHwpHDpcKgwoLDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoPCq8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6bCtMKlw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKPwozDpsK1woHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowpLCssOmwrHCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKnw6nCgsKRw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKHwqrDqMK0wqHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwqTCp8Olwq7CicOlwozCuicsICfDqMKHwqrDpsK1woHDpMK6wpXDpcKMwronLCAnw6jCtMKhw6TCusKVw6XCjMK6JywgJ8OmwrLCv8OmwrvCqcOlwozCuicsICfDqMKNwqPDpcKOwr8nLCAnw6XCr8KMw6nCocK6w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpTCgMOmwp7CncOoworCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6TCu8KBw6XCksKMw6XCjMK6JywgJ8OnwrHCs8OmwpjCk8Olwo7CvycsICfDp8KbwpDDqMK+wrnDpcKOwr8nLCAnw6TCuMKcw6XCjMK6JywgJ8OowqXCv8OlwozCuicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKzwrjDpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrHCn8OpwpjCs8OlwozCuicsICfDp8K6wrPDpsK6wqrDpcKMwronLCAnw6nCvsKZw6nCqcKsw6bCvcKtw6XCjMK6JywgJ8OmwrPCuMOlwo7CvycsICfDpcKQwojDpsKxwp/DpcKOwr8nLCAnw6XCj8KZw6bCsMK4w6XCjsK/JywgJ8Olwo/CpMOowpTCusOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK+wrfDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwpfCjMOpwpjCs8OlwozCuicsICfDpcK5wr/DpsKxwonDpcK4woInLCAnw6TCu8KAw6nCgsKhw6XCuMKCJywgJ8OnwrvCtcOnwqvCucOlwrjCgicsICfDp8K9wpfDpsKxwp/DpcKOwr8nLCAnw6TCuMKtw6bCscKfw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwrvCtcOpwpjCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsK2wqrDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OmwrjCuMOkwrvCmcOlwozCuicsXG4gICAgICAgICAgICAnw6bCscKfw6bCssK5w6XCuMKCJyxcbiAgICAgICAgICAgICfDp8KbwpDDpMK6wq3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCicOlwo/CsMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCucKzw6bCrcKmw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwqLCk8Omwr3CvMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCjMKXw6XCt8Kdw6fCvsKMw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK5wr/DpcKFwoPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCg8Olwp3CncOlwozCuicsICfDpsKcwp3DpcKkwqnDpcKMwronLCAnw6nCncKSw6XCt8Kdw6XCjsK/JywgJ8OmwpfCusOowovCjcOlwo7CvycsICfDpcKJwpHDqcKYwoHDpcKOwr8nLCAnw6jCi8KNw6bCusKqw6XCjsK/JywgJ8OlwrjCgsOkwrjCrcOlwozCuicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKBwoLDpcKuwoHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowojCucOlwrHCscOlwozCuicsICfDpcKuwonDpcKxwoXDpcKMwronLCAnw6XCsMKEw6bCtMKqw6XCjsK/JywgJ8OowpPCrMOmwrrCqsOlwo7CvycsICfDpcKkwqfDqMKLwrHDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChsKFw6bCscKfw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK4woLDpMK4wq3DpcKMwronLCAnw6TCuMKcw6XChcK0w6XCjMK6JywgJ8OowrXChMOkwrjCrcOlwo7CvycsICfDqcKawobDpsKYwozDpcKOwr8nLCAnw6XCqMKBw6jCv8Kcw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrnCkMOlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcK4woLDpMK4wq3DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrrClMOpwoDCmsOmwqHCpcOlwozCuicsXG4gICAgICAgICAgICAnw6bCssKZw6bCucK+w6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKHwpHDpcKPwqPDpsKywrPDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrPCqMOnwpzCicOlwrHCscOlwrjCgicsXG4gICAgICAgICAgICAnw6XCpMK5w6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK6wpXDp8KgwpTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnworCjcOkwrjCusOlwo7CvycsXG4gICAgICAgICAgICAnw6bCssKQw6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKpwqzDqMK+wrnDpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrPCqMOowr7CucOlwr3CncOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCjcKXw6XChcKFJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKhwrrDpcK6wobDpcKMwronLCAnw6nCq8KYw6XCncKqw6XCjMK6JywgJ8OlwpjCicOpwpnCtcOlwozCuicsICfDqcKYwobDpMK4wq3DpcK4woInLCAnw6jCkMKlw6XCscKxw6XCjsK/JywgJ8OowpPCrMOlwq7CicOlwo7CvycsICfDpMK7wqrDqcKZwofDpcKOwr8nLCAnw6XCjcKXw6nCg8Kow6XCjsK/JywgJ8OowqXCv8OlwoXChcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8KcwonDpcKxwrHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OkwrjCnMOlwp3CocOlwozCuicsICfDpMK7woHDpcKvwr/DpcKOwr8nLCAnw6XCvcKtw6XCscKxw6XCjsK/JywgJ8OmwrTCqsOpwpvChcOlwo7CvycsICfDpMK4wrnDpsKjwrHDpcKOwr8nLCAnw6nCncKSw6fCpcKew6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwq7CnMOlwq7CvsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDp8K/wqDDpcKxwo/DpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7CnMOlwq7CvsOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK0w6bClsKHw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKNwpfDpsK6wqrDpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwo/CmcOlwo7CvycsXG4gICAgICAgICAgICAnw6nClcK/w6XCrsKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKrwpjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCn8Olwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6fCrcKgw6jCv8Kew6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKxwo/DpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrnCv8Olwq7CicOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCucK/w6XCrsKJw6XCjMK6JywgJ8Olwo3CjsOowpPCpcOlwrjCgicsICfDpcKywrPDpsKxwqDDpcKOwr8nLCAnw6nCgsK7w6bCsMK0w6XCjsK/JywgJ8Omwq3CpsOowoPCnMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMK+wr7DpcK3wp7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwoDCmsOlwrfCncOlwozCuicsICfDpMK4wofDpsK6wpDDpcK4woInLCAnw6jCvsK+w6XCjsK/JywgJ8OmwrjCoMOlwo7CvycsICfDpcKuwqPDpsKxwonDpcKOwr8nLCAnw6XCvMKAw6bCscKfw6XCjsK/JywgJ8OlwqTCp8OnwqvCucOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKbwoXDpcKuwonDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwpvCqMOlwp/CjsOlwozCuicsICfDqMKKwqbDpcKxwrHDpcKOwr8nLCAnw6fCn8Kzw6bCo8KJw6XCjsK/JywgJ8OlwpDCjcOlwrHCscOlwo7CvycsICfDpcKkwqnDpcKFwqjDpcKOwr8nLCAnw6jCjcKlw6fCu8KPw6XCjsK/JywgJ8Olwq7CncOlwoXCtMOlwo7CvycsICfDpsKxwonDpsK6wpDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCt8K0w6TCuMKtw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK3wrTDpcK3wp7DpcKMwronLCAnw6XCjcKXw6bCscKfw6XCjsK/JywgJ8OlwrnCs8OmwpjCjMOlwo7CvycsICfDqcKAwprDpsKxwp/DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCtcKEw6nCmMKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDqcKbwoHDpsKxwp/DpcKMwronLCAnw6fCrsKAw6nCmMKzw6XCuMKCJywgJ8Olwq7CicOlwrLCs8Olwo7CvycsICfDpMK5wpDDqMKHwrPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCmMK/w6XCncKdw6jCl8KPw6bCl8KPw6fCvsKMw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OpwqnCrMOlwrDClMOlwrrCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCucKdw6XCr8Kow6bCssKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8K6wqLDpcKOwp/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCtsOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6nCmMK/w6XCncKdw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KQwobDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowovCpcOlwrDClMOnwpvClsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCsMKPw6nCh8KRw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK7wpHDpsKwwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwofCkcOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6bCncK+w6bCvcKYw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKjwqTDpcKhwpjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowozCgsOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fClMKYw6XCrcKcw6jCl8KPw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OlwrrCt8Olwq7CmsOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK5w6XCt8K0w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KCwonDqcKcwo3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrnCncOpwr7CmcOlwo7CvycsXG4gICAgICAgICAgICAnw6fClMKYw6XCrcKcw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKbwoXDpsKxwp/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpbCsMOpwr7CmcOlwo7CvycsXG4gICAgICAgICAgICAnw6nCgcKTw6XCrcKaw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KZwr3Dp8KOwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpDChsOlwqHCmMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCvsK3w6bCoMK8w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK5wqHDpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwp/Cs8OmwrjCoMOlwo7CvycsXG4gICAgICAgICAgICAnw6fCqMK7w6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKJwrLDqMK+wr7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrfCtMOlwqHCmMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCs8K4w6XCrsKaw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK+wpfDqMKNwqPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwofCicOlwrHCscOlwr3CncOmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKlwr/DpsKYwozDpcK4woInLFxuICAgICAgICAgICAgJ8Onwr7CjsOlwqfCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCmMKtw6jCp8KJw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKHwpHDqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpTCmMOmwrTCm8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCuMKDw6bCi8KWw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKbwrfDpsKzwqLDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpnCrsOmwqDCvMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKBw6XCjcKXw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKWwpzDpcK+wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrzCmsOkwrjCnMOlwo7CvycsXG4gICAgICAgICAgICAnw6jCtsKKw6jCpcK/w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK8wprDp8KQwobDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpvCkMOmwrrCkMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCvsK3w6bCmMKMw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKGwpXDpcKuwoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpzCqMOpwofCjMOowpfCj8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OowrTCtcOlwrfCnsOnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMK0wrXDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCjcKXw6bCmMKOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK6wpHDpcKywqnDpcKMwronLFxuICAgICAgICAgICAgJ8OoworCscOmwrrCqsOlwozCuicsXG4gICAgICAgICAgICAnw6TCucKMw6XCvcKTw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KZwr3DpMK6wpHDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrDCj8OmwrLCs8OlwozCuicsXG4gICAgICAgICAgICAnw6bCuMKFw6nClcKHw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcK8woDDqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8Okwr/CrsOmwpbCh8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCgcKvw6fCg8K9w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwq3Dp8KbwpjDpsKwwrTDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwpLCn8OlwrHCscOlwozCuicsICfDpsKwwrTDpcKfwo7DpcKOwr8nLCAnw6fCm8KYw6XCjsK/JywgJ8OlwoXCrcOmwp7CncOnwonCucOlwozCuicsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKBwrXDpMK5wonDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6fCusKiw6jCisKxw6XCssKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKxwofDpcK3wp3DpcKMwronLFxuICAgICAgICAgICAgJ8OowrXCpMOmwrDCtMOlwrjCgicsXG4gICAgICAgICAgICAnw6TCu8KBw6bCgMKAw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKBwrXDpMK5wonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwrvCpcOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCocKQw6bCosKTw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK5wqDDpsKwwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwofCpMOlwobCiMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCrcKjw6XCrsKJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK9wpnDpcK6wobDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrnChMOmwr3CrcOlwo7CvycsXG4gICAgICAgICAgICAnw6nCgcKTw6fCnMKfw6TCu8Khw6TCvcKsw6bCl8KPw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKKwqHDpcK3wp3DpMK7wqHDpMK9wqzDpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwq7CicOpwqHCusOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDqMKlwr/Dp8KnwoDDpcKMwronLFxuICAgICAgICAgICAgJ8OmwpnCrsOlwq7CmsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCucKzw6XCncKdw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKVwofDpcKuwoHDpcK4woPDpMK+wp3DpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwrTCq8OkwrrCkcOowovCl8OmwpfCj8OlwrjCg8Okwr7CncOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcKzw6XCssKtw6XCuMKDw6TCvsKdw6bCl8KPw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKTwpzDpMK7woHDpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCk8Kcw6TCu8KBw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcK+wrfDpsKxwp/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCn8Olwo/Co8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCgMKdw6XCjcKXw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KfwrPDqcKYwqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwo7CicOlwrHCj8Okwr7Cl8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCncK+w6bCocKDw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKNwrDDpsKxwp/DpcKcwp/DpcKuwrbDpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrLCv8OmwrLCs8OlwpzCn8Olwq7CtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKHw6XCscKxw6fCicK5w6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKvwpXDqMKKwoLDpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCr8KVw6jCisKCw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcK7wpTDqMKlwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCp8OmwpbCucOlwo7CvycsXG4gICAgICAgICAgICAnw6fCu8KHw6nCh8KRw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKHwpHDpsKywpnDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowrXCq8OnwqvCoMOlwo7CvycsXG4gICAgICAgICAgICAnw6fCusKzw6nCm8KNw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKowoHDpcKuwoHDpcK9wp3DpsKXwo/DpcKbwp7DpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwrvClMOowqXCv8Olwo3Cl8OlwrjCg8Okwr7CncOmwpfCj8OowovCl8OmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK0w6TCucKJw6XCuMKCJywgJ8OmwpzCm8OowrDCn8Olwo7CvycsICfDpcKFwrTDpMK7woHDpcKOwr8nLCAnw6bCmcKuw6XCrsKJw6XCjsK/JywgJ8OlwobCjMOkwrrCqMOlwo7CvycsICfDpsKZwrTDqcKawobDpcKOwr8nLCAnw6jCtMKew6TCuMKww6XCjsK/JywgJ8Olwq7CicOpwr7CmcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcK7wpTDpMK4wpzDpcKNwpfDqMKLwpfDpsKXwo/DpMK+wpfDpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XCh8Kvw6nCh8KMw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKWwr3Dp8KnwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrvCjsOmwrHCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6nClMKmw6XCscKPw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKVwofDqMK/wpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwrrCu8OmwrHCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCj8Kww6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKkwqnDpsKfwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwrvChMOlwrnCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCpsKVw6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKJwpHDpsKywrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCicOnwqnCl8Olwo7CvycsXG4gICAgICAgICAgICAnw6nCm8K3w6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK7wo7DpcK5wrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrLCkcOlwrfCqcOlwo7CvycsXG4gICAgICAgICAgICAnw6TCuMK5w6XCr8Kow6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcK7wpTDpcKNwpfDpcK4woPDpMK+wp3DpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCg8K9w6XCjMKAw6XCuMKCJyxcbiAgICAgICAgICAgICfDp8Kmwo/DpsKzwonDpcK4woInLFxuICAgICAgICAgICAgJ8OowrTCtcOlwq7CmsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCg8Kgw6bCsMK0w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8K9wpfDp8KUwrjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpPCrsOlwq7CicOlwo7CvycsXG4gICAgICAgICAgICAnw6jCjcKUw6bCs8Kiw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK+wpnDqcKHwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrnCs8OlwqHCmMOlwo7CvycsXG4gICAgICAgICAgICAnw6nClcK/w6nCocK6w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KLwqzDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjCicOpwoPCvcOmwrDCtMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OkwrrCkcOlwo3Cl8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKYwobDpsKYwo7DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6fCm8KYw6nCvsKZw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK6wpTDpcKNwo7DpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7CmMOmwrjCocOlwozCuicsXG4gICAgICAgICAgICAnw6jCpcK/w6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wpzDpcK3wp3DpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7CicOlwq7CgcOlwrjCgicsXG4gICAgICAgICAgICAnw6XCkcKIw6jCtMKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKZwovDpcKuwoHDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq/CjMOmwrDCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKcw6jCicKvw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK1wqnDpsKYwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwp/Cs8Omwp7Cl8Olwr3CncOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCpsKEw6XCisKdw6XCvcKdw6bCl8KPw6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKvwrvDp8KUwrjDpcKbwp7DpsKXwo/DpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpvCssOpwp3ClsOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCusKSw6nCusKfw6XCjMK6JywgJ8Olwq7Co8OlwqjCgcOlwrjCgicsICfDqcKpwqzDqcK+wpnDpcKOwr8nLCAnw6bCssK+w6fCm8KKw6XCjsK/JywgJ8Olwq/CjMOmwrrCkMOlwo7CvycsICfDp8K9wpfDpcK5wrPDpcKOwr8nLCAnw6XCuMKIw6XCrsKXw6XCjsK/JywgJ8OpwpnChsOowonCr8Olwo7CvycsICfDpMK8wprDpsKzwr3DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCjsKJw6bCusKqw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OnwrrCosOlwqHClMOlwozCuicsXG4gICAgICAgICAgICAnw6bCscKfw6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK+woTDpsKxwp/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwoDCmsOmwrXCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKOw6XCrsKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKYwpPDqcKXwqjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrPCqMOlwrHCscOlwr3CncOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6XCucKzw6XCvcKdw6bCl8KPw6XCgsKjw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwoPDpsKxwp/DpcKTwojDpcKwwrzDpsKXwo/DpcK9wp3DpsKXwo/DpcKCwqPDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Okwr/CncOlwrHCscOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCmsKGw6nCmMKzw6XCjMK6JywgJ8OmwpbCvcOnwpTCuMOlwo7CvycsICfDqMKFwr7DpcKGwrLDpcKOwr8nLCAnw6nCvsKZw6nCmcK1w6XCjsK/JywgJ8OmwpjCjMOlwq7CgcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKYwq3DqcKAwprDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCmMKtw6nCmMKzw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKywoHDp8KUwrjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrfCp8Olwq7CtsOlwo7CvycsXG4gICAgICAgICAgICAnw6fCm8KQw6bCtMKlw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKkwqfDpcKFwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrDCuMOlwpbChMOlwo7CvycsXG4gICAgICAgICAgICAnw6fCu8Klw6bCscKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKVwofDqcKbwoTDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwr3CncOowonCr8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCqMKBw6TCv8Khw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKwwrTDpcKvwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrjCvcOmwrHCn8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCj8Kkw6XCn8KOw6XCjMK6JywgJ8OmwrDCuMOowoPCnMOlwo7CvycsICfDpcKNwo7DpcKdwqrDpcKOwr8nLCAnw6fCjsKJw6nCvsKZw6fCusKzw6jCpcK/w6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8Olwq7CgcOowpLCl8Olwr3CncOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKZwq7DpsK0wrHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCgMKdw6jCjMKFw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKZwq7DpsK0wrHDpcKTwojDpcKwwrzDpsKXwo/DpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqLCqMOmwrHCn8OlwpPCiMOlwrDCvMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCmcKvw6TCuMKcw6XCvcKdw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKZwq/DqMKwwrfDpcKCwqPDpsKXwo/DpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpXCh8OmwrLChcOlwr3CncOmwpfCj8OlwpPCiMOlwrDCvMOmwpfCj8OmwovCicOnwqXCnMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCscKfw6XCn8KOw6XCk8KIw6XCsMK8w6bCl8KPw6XCvcKdw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKtwp/DqMK/wp7DpcKCwqPDpsKXwo/DpsKLwonDp8KlwpzDpsKXwo/DpMK9wqTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwr7CnMOmwrLCp8OmwovCicOnwqXCnMOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCpcK/w6fCm8Kfw6TCvcKkw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK4wrTDpsKywqfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCuMK0w6fCv8KUw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKHwqTDpcK6wobDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrrCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCsMK4w6XCvsK3w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKVwofDpcK6wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo/CjMOmwrHCn8OmwovCicOnwqXCnMOmwpfCj8Okwr3CpMOmwpfCj8OlwrjCg8OmwpzCl8OmwpfCj8OlwoLCo8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6jCgMK/w6nCqcKsw6XCgsKjw6bCl8KPw6TCvcKkw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKywqfDpsK6wpDDpMK9wqTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwr7Ct8Olwq7Cj8OlwoLCo8OmwpfCj8OmwpnCr8OpwqLCh8OmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCvcKew6jCpcK/w6XCuMKCJywgJ8OnwpHCnsOkwrjCvcOlwrjCgicsICfDpsKiwoHDpsKywrPDpcKOwr8nLCAnw6fCm8KIw6bCscKfw6XCjsK/JywgJ8OpwpnCh8OlwrfCncOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKAwpLDpsKxwp/DpcKCwojDpcKDwrPDpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrPCuMOmwrDCtMOlwo7CvycsICfDp8Kmwo/DqMK0wqHDpcKOwr8nLCAnw6jCtMKhw6XCscKxw6fCi8Ksw6nCvsKZw6bCl8KPw6bCgMKSw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCsMOlwp3CqsOnwpnCvcOmwpfCj8OmwpnCrsOnwrHCs8OmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMK/wqrDpcK6wobDqMKXwo/DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwqbCmcOmwqDCvMOpwofCjMOmwovCicOlwo7CvycsICfDpcK+wrfDqcKSwqbDpcKOwr8nLCAnw6fCu8K0w6jCpcK/w6XCgsKIw6XCg8Kzw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwqTCp8OnwpDChsOnwpnCvcOmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKkwqfDp8KQwobDpcK4woInLFxuICAgICAgICAgICAgJ8OnwqXCpcOkwrrCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsK+w6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK8wqXDpsK4wqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrDCuMOlwrnCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCusKRw6nCvsKZw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK0wrHDpsK6wpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwonCkcOlwrfCncOlwo7CvycsXG4gICAgICAgICAgICAnw6nCucKkw6XCusKGw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK8wr7DpsK/wp7DpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8OmwrbCp8Olwr3CncOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCt8KNw6XCscKxw6XCvcKdw6bCl8KPw6XCm8Kew6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKlwprDqcKbwoTDpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCpcKaw6nCm8KEw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKPwozDpsKfwo/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwonCn8Olwq7CmsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKXw6XCjcKOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKnwprDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwqTCp8OlwqfCmsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCsMK4w6TCu8KBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwoPDqMKwwovDpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq3CpsOlwq7CmsOlwo7CvycsXG4gICAgICAgICAgICAnw6fCpsKEw6TCuMKww6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8K6wqLDpsKywrPDpcKTwojDpcKwwrzDpsKXwo/DpcK9wp3DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCksKZw6jCh8Kqw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4wqrDpsKXwqfDpcK4woInLFxuICAgICAgICAgICAgJ8OlwrzCgMOowr/CnMOlwrjCgicsXG4gICAgICAgICAgICAnw6fCu8K/w6bCmMKlw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK7wrrDpsKwwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8Onwp/Cs8OlwrHCj8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCvMKlw6XCi8KSw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKzwrjDqMKlwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCg8OpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6fCusKiw6bCssKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKHwpHDpcK5wrPDqMKLwpfDpsKXwo/Dp8KRwrbDpsKXwo/DpcKCwqPDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrLCs8Olwo/Co8OnwpHCtsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCscKPw6jCvsK5w6jCi8KXw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKWwofDpcKxwrHDpcKjwq7DpsKXwo/DqMKLwpfDpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwpbCh8OlwrHCscOlwo7CvycsICfDp8KgwprDpcKxwrHDpcKOwr8nLCAnw6jCpcK/w6fClcK0w6XCjsK/JywgJ8OpwrrCu8OmwqDCl8Olwp3CocOlwo7CvycsICfDqcKpwqzDpcKFwrPDpcKOwr8nLCAnw6TCuMKYw6XCjMKXw6XCjsK/JywgJ8OlwrnCv8Olwo3Cl8Olwo7CvycsICfDpcKvwozDpcKuwoHDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6jCpcK/w6XCj8KMw6fCicKIw6fCusKzw6XCgsKjw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKZwq/DpsK0wqrDpcK4woInLCAnw6XCi8KQw6bCtcK3w6XCjsK/JywgJ8OlwovCkMOowoXCisOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6jCpcK/w6jCl8KPJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwovCicOowpDCqMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCn8KOw6XChcKzw6XCjMK6JywgJ8Omwp7Cl8OlwpHCqMOlwo7CvycsICfDpcK9wpPDqcKbwoTDpcKOwr8nLCAnw6XCsMK8w6bCnMKow6XCjsK/JywgJ8OmwpvCssOmwrDCtMOlwo7CvycsICfDpcKgwobDqcK+wpnDpcK+wrfDpcK6wobDpcKOwr8nLCAnw6jCvsK+w6XCrcKcw6XCjsK/JywgJ8OlwqLCqMOnwqvCucOlwrfCpcOlwo3CocOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKCwqPDpsKbwrLDpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCgsKjw6bCm8Kyw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKYwonDqcK7wo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq/ClMOlwqbCgsOlwo7CvycsXG4gICAgICAgICAgICAnw6jCgcKCw6jCjcKjw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwonDpcKkwprDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpTCs8OmwonCjsOlwo7CvycsXG4gICAgICAgICAgICAnw6fCtMKiw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KPwq3DpsKIwojDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrfCtMOpwp3CksOlwo7CvycsXG4gICAgICAgICAgICAnw6XCsMK8w6fCjsKbw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKYwozDqcKDwr3DpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCmMKMw6nCg8K9w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKxwp/DqMK+wr7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OowrTCocOowqfCicOlwo7CvycsXG4gICAgICAgICAgICAnw6fCscK7w6TCucKMw6nCvcKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK4woHDqcKdwpLDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq/Cn8OpwpvChcOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcKrw6XCrsK/w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK3wqbDqMK0wqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OoworCksOlwrrCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCtMKbw6nCmsKGw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK+wrnDpcKdwp3DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Omwp7Cl8OoworCncOlwpzCsMOlwozCuicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCnsKXw6jCisKdw6XCjsK/JywgJ8OlwrfCpcOlwrjCg8OmwrHCn8Oowr7CvsOlwo7CvycsICfDp8KxwrPDpsKewpfDpcKOwr8nLCAnw6XCosKow6jChMKxw6XCjsK/JywgJ8OmwrPCosOlwq/ChsOlwo7CvycsICfDpcKvwp/DqcKawoXDpcKOwr8nLCAnw6bCnMKXw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrHCscOlwo3Cl8OlwpzCsMOlwozCuicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpMK5woPDpMK4wpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwonCjsOlwpvCisOlwo7CvycsXG4gICAgICAgICAgICAnw6jCtMKhw6XCmMKOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKhwpHDpsKXwqXDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpDCvMOnwrvCk8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCm8Kyw6bCncK+w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKOwqrDp8K+wo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrTCm8OmwonCjsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCisKgw6bCn8Klw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKawobDpcKtwpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpTCmcOpwoLCo8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCtcKqw6XCjcKhw6XCrcKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKXwqXDpcKWwoDDpcKIwpnDpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCl8Klw6XClsKAw6XCiMKZw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKNwpfDpsKcwqjDpsKewpfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrHCn8Olwq3CnMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCrsKaw6bCl8Klw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKQwqjDqMK/wqbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwovCicOlwq3CnMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCmMKCw6TCu8KBw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKwwqLDqcKAwprDqcKXwqjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpnCvcOmwpzCl8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCu8KBw6XCuMKDw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK6wrfDqcKpwqzDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CmsOnwrvCk8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCu8Kyw6XCt8K0w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK6wprDpMK4wpzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpDCicOpwprChsOlwo7CvycsXG4gICAgICAgICAgICAnw6jCgcKCw6bCi8KJw6bCnMKow6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKQwqjDpcKYwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrLCl8OlwrfCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCmMK/w6nCh8KMw6XCnMKww6XCjMK6JyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKZwrbDpcKwwpTDpcKOwr8nLCAnw6bCmcKuw6XChcKww6XCjsK/JywgJ8OmwpzCrcOowr7CvsOlwo7CvycsICfDpsKXwqXDpcKcwp/DpcKOwr8nLCAnw6nCncKpw6XCkMKJw6XCjsK/JywgJ8OmwpTCucOlwojCmcOlwo7CvycsICfDpsKOwqrDpcKLwqTDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8OpwpnClcOowqXCv8OnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqMKlwr/DpcKuwonDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCjsKyw6bCucKWw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKWwrDDpcKfwo7DpcKMwronLFxuICAgICAgICAgICAgJ8OnwqLCkcOmwp7Cl8OlwozCuicsXG4gICAgICAgICAgICAnw6nCm8KBw6XCocKUw6XCjMK6JyxcbiAgICAgICAgICAgICfDp8KBwp7DpsKhwqXDpcKMwronLFxuICAgICAgICAgICAgJ8OmwpzCqsOlwqTCrsOlwozCuicsXG4gICAgICAgICAgICAnw6nCmMKOw6jCicKvw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wrTDpsK9wrzDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpXCv8Olwq7CicOlwozCuicsXG4gICAgICAgICAgICAnw6nCq8KYw6nCmcK1w6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKTwp3Dp8KUwrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwojCt8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCkcKow6jCh8Kzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKTwpzDpcK3wp3DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowoDCgMOlwrfCnsOlwozCuicsICfDp8KOwovDp8KbworDpcKMwronLCAnw6XCjcKww6XCj8Kww6XCjMK6JywgJ8Olwq7CnMOlwpDCm8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKuwp3DqcK4wqHDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCuMKtw6bCu8Kow6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKHwpHDpcKPwrDDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpnCiMOkwrvCk8OlwozCuicsXG4gICAgICAgICAgICAnw6XCssKQw6XCscKxw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKHwqTDp8K/wpTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpnCh8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCpMKqw6fCmcK9w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcK6wp/DpsK4wrjDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwonCtsOpwqPCjsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKDw6nCmMKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KcwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwofCpMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCksK4w6nCmMKzw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OnwqfCpsOpwoPCvcOlwozCuicsXG4gICAgICAgICAgICAnw6bCuMKtw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKdwqjDqcKZwrXDpcKMwronLFxuICAgICAgICAgICAgJ8OlwoXCtMOlwrnCs8OlwrjCgicsXG4gICAgICAgICAgICAnw6fCpMK8w6bCs8KJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKzwr7DqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrDCuMOlwq/Cv8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKJw6XCjsKfw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK9wqzDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpfCrMOpwoLCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6nClcK/w6bCrcKmw6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK5wr7DpcKOwr8nLFxuICAgICAgICAgICAgJ8Omwq3CpsOlworCn8Olwo7CvycsXG4gICAgICAgICAgICAnw6bCt8Kzw6XCjMKWw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK4wq3DpcKNwpfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCuMK0w6bCuMKtw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKfwqnDpcKfwo7DpcK4woInLFxuICAgICAgICAgICAgJ8Olwo3CjsOpwpjCtMOlwrjCgicsXG4gICAgICAgICAgICAnw6jCksKyw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsK9wrzDpcKFwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpnCvcOmwrDCtMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCvsKEw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKNwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpDCiMOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCr8KMw6XCucKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKkwqfDqMKNwpTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrvCtsOlwq7CicOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKuwp3DpcKhwpTDpcKMwronLFxuICAgICAgICAgICAgJ8Olwq7CicOlwqHCnsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCtMKbw6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKtwpDDqcKVwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwrvChMOpwpnCtcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCu8K2w6XCt8Kdw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKvwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrvCtsOpwpXCv8Olwo7CvycsXG4gICAgICAgICAgICAnw6fClMKYw6bCs8KJw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwpzDpcK3wp3DpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwr/Cl8OkwrjCucOlwo7CvycsXG4gICAgICAgICAgICAnw6nCu8KEw6nCvsKZw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKQwrTDqMK1wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrHCicOkwrjCrcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKxwonDpcKPwrDDpcKMwronLFxuICAgICAgICAgICAgJ8OnwpXCmcOlwp3CncOlwo7CvycsXG4gICAgICAgICAgICAnw6nClcKHw6XCt8K0w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKfwo7DpcKbwrrDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwo3Cl8OpwoPCkcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCtMKLw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwoHDpcK8wrrDpcKOwr8nLFxuICAgICAgICAgICAgJ8Okwr3Cm8Olwp3CqsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCi8KJw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKlwr/DpMK5wqHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpXCpcOpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCpsKGw6bCnsKXw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OmwqbChsOpwpjCs8OlwozCuicsXG4gICAgICAgICAgICAnw6bCuMKFw6bCtsKnw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8K7wqXDpcK+wrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwqXCnsOmwpzCqMOlwo7CvycsXG4gICAgICAgICAgICAnw6TCvcKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK6wpzDqMKwwrfDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq3CkMOmwrTCssOlwo7CvycsXG4gICAgICAgICAgICAnw6nCncKWw6jCvsK5w6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKowqrDpcKxwrHDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwrHCs8OowoTCgsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCkMK0w6XCoMKhw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKuwprDqMK+wrnDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwq7CicOlwrrCt8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsKxwonDpsK7wqjDpcKMwronLFxuICAgICAgICAgICAgJ8OnwrTCq8OpwpjCs8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCssKaw6fCmsKLw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKXwqzDqcKYwrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OpwpXCh8Olwp3CqsOlwo7CvycsXG4gICAgICAgICAgICAnw6XCucKzw6XCiMKpw6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KfwrPDpsKzwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CgcOpwpnClcOlwo7CvycsXG4gICAgICAgICAgICAnw6fCmcK9w6bCssKzw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKxwonDqcKYwrTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpXChsOmwrTCm8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XClcKGw6XCt8Kew6XCjMK6JywgJ8OpwpXCh8Olwq7CicOlwo7CvycsICfDpcKxwrHDqcKYwrPDpcKOwr8nLCAnw6bCtMKbw6XCjcKXw6XCjsK/JywgJ8OlwpXChsOlwo3Cl8Olwo7CvycsICfDpMK4wrnDpcKHwqTDpcKOwr8nLCAnw6bCn8Kew6bCsMK0w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCtsOkwrvClicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICfDp8KUwpjDqMKCwoPDp8KcwoEnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcKww6XCt8Kew6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKfwo7DpcKFwrPDpcKMwronLCAnw6TCuMKDw6nCh8KMw6bCssKzw6XCjMK6JywgJ8OowqXCv8OlwpvCusOlwozCuicsICfDpcKuwonDpcKuwoHDpcKMwronLCAnw6fCusKiw6XCj8Kkw6XCjMK6JywgJ8OmwrDCuMOnwpnCu8Olwo7CvycsICfDp8KawovDpcKFwrDDpcKOwr8nLCAnw6bCpsKGw6TCuMKtw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpjCicOlwrPCqsOlwoXCs8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCmMKJw6XCs8Kqw6XChcKzw6XCuMKCJywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwofCkcOmwpjCjMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCh8KRw6XCt8Kdw6XCjMK6JywgJ8OmwrDCuMOmwpjCjMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8KZwr3DqcKTwrbDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OnwpnCvcOpwpPCtsOlwozCuicsICfDpcK5wrPDpcK3wp3DpcKMwronLCAnw6nCncKWw6jCv8Kcw6XCjsK/JywgJ8OkwrzCmsOlwq7CgcOlwo7CvycsICfDpsKZwq/DpsKzwrDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCpMKpw6bCsMK0w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsK4woXDpsKwwrTDpcKOwr8nLCAnw6fCp8Kmw6XCrsKJw6XCjsK/JywgJ8OnwpTCmMOowrDCt8Olwo7CvycsICfDpsKtwqbDpcKxwrHDpcKOwr8nLCAnw6XCvMKgw6XCrsK2w6XCt8Kdw6XCm8Kew6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwozCl8OpwoHCk8OlwozCuicsICfDp8KnwqbDpcKfwo7DpcKMwronLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCrcKmw6XCqMKBw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKHwonDpcK3wp7DpcKMwronLCAnw6bCsMKRw6XCi8Kkw6XCjsK/JywgJ8Olwo/CpMOmwrXCqsOlwo7CvycsICfDpcKkwqnDp8Klwp3DqMKXwo/DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nChcKSw6bCs8KJw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OowoLCg8OlwrfCnsOlwozCuicsXG4gICAgICAgICAgICAnw6fCjsKJw6nCl8Kow6XCuMKCJyxcbiAgICAgICAgICAgICfDpsKVwqbDp8KFwozDpcK4woInLFxuICAgICAgICAgICAgJ8OpwofCkcOlwqHClMOlwo7CvycsXG4gICAgICAgICAgICAnw6jCgsKDw6XCjMKXw6jCksKZw6XCj8Kkw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKYwr/DpcKFwovDpcKhwp7DpcKTwojDqMKQwqjDpcKFwovDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8Olwq7CicOowqXCv8Olwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCvMKgw6bCjsKWw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KUwpjDpcK3wp7DpcKMwronLCAnw6bCsMKRw6TCucKQw6XCjsK/JywgJ8OkwrjCtMOmwrPCvcOlwo7CvycsICfDqcKrwpjDpcKPwrDDpcKOwr8nLCAnw6XCscKxw6TCuMK5w6XCjsK/JywgJ8OowoLCg8Olwo3Cl8OowqPClcOlwpvCusOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcK6wobDqcKYwrPDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OowqXCv8OlwrPCsMOlwozCuicsICfDpcK6wobDpcKfwo7DpcKOwr8nLCAnw6fCjsKvw6XCjsK/JywgJ8Olwo3CjsOmwrHCoMOlwo7CvycsICfDpcKQwojDpsKwwrTDpcKOwr8nLCAnw6bCrcKjw6XCrsKBw6XCjsK/JywgJ8Olwq7CgcOlwo7CvycsICfDqcKVwofDpcKOwp/DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCucKzw6XCh8KJw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcK0wobDpcKzwpLDpcKMwronLCAnw6bCs8K+w6XCt8Kdw6XCjsK/JywgJ8OnwoHCtcOlwo/CsMOlwo7CvycsICfDpcK0wofDpMK/wqHDpcKOwr8nLCAnw6XCjcKOw6TCusKtw6XCjsK/JywgJ8OlwrrChMOmwrXCqsOlwo7CvycsICfDqcKdwpnDpcKuwoHDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCrsKaw6jCpcK/w6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKuwonDpcKuwprDpcKMwronLCAnw6nCgMKaw6bCuMKtw6XCjsK/JywgJ8OkwrjCtMOmwrTCrsOlwo7CvycsICfDpsK8wrPDpcKOwr8nLCAnw6XCssK3w6XCjsK/JywgJ8OmwrjCrcOmwrrCkMOlwo7CvycsICfDqcKZwofDqMKlwr/DpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCmcKHw6XCjcKXw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKtwqbDqcKDwr3DpcKMwronLCAnw6bCiMKQw6XCjsK/JywgJ8Olwq7ClcOmwpjCjMOlwo7CvycsICfDpcK6wrfDpcKOwr8nLCAnw6bClsKHw6XCjsK/JywgJ8OowqXCv8OlwpLCjMOlwo7CvycsICfDp8KkwrzDpcKOwr8nLCAnw6TCuMKkw6XCvcKTw6XCjsK/JywgJ8Olwr7CvcOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK4wrTDpcKkwo/DpcKbwp7DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCuMK0w6XCpMKPw6XCuMKCJyxcbiAgICAgICAgICAgICfDpMK4wrTDpcKkwo/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrrCt8OkwrnCkMOlwo7CvycsXG4gICAgICAgICAgICAnw6bCsMK4w6nCncKWw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcK5wr/DpsKywrPDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpLCjMOmwpTCv8Olwo7CvycsXG4gICAgICAgICAgICAnw6TCuMKcw6TCucKhw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8Knwq/Dp8KfwrPDpcKxwrHDpMK/wp3DpcKuwonDpsKXwo/DpMK4wpzDpMK5wqHDpsKXwo/DpsKSwpLDpsKLwonDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OnwpTCmMOlwo3Cl8OowpfCj8OmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCkMKIw6TCvcKcw6XCuMKCJywgJ8OkwrjCtMOmwr3CrcOlwo7CvycsICfDpcKNwpPDpcKwwrzDpcKOwr8nLCAnw6jCiMKfw6bCm8Kyw6XCjsK/JywgJ8Oowr/CrcOpwoPCqMOlwo7CvycsICfDp8KOwpvDpsKbwrLDpcKOwr8nLCAnw6fCosKMw6bCm8Kyw6XCjsK/JywgJ8OlwqTCj8OmwrLCs8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6nCncKSw6bCtcK3w6fCnMKBJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OowqXCv8Olwq7CgcOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCn8KOw6TCuMKtw6XCjMK6JywgJ8Olwp/CjsOkwrjCnMOlwozCuicsICfDpcKfwo7DqMKlwr/DpcKMwronLCAnw6XCn8KOw6XCjMKXw6XCjMK6JywgJ8OmwrnCn8OmwrrCkMOlwo7CvycsICfDpsK5wp/DpMK4wq3DpcKOwr8nLCAnw6XCpMKnw6nCgMKaw6XCm8Kew6bCl8KPw6XCnMKfw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrXCt8OkwrjCnMOlwpzCsMOlwozCuicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcK5wrPDpcKuwonDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrnCkMOpwoPCvcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCsMKRw6XCksKMw6XCm8Kew6bCl8KPw6XCnMKfw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpMK6wpLDpcKKwqnDpcKcwp/DpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwozClsOpwprChsOlwpvCnsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCvsKqw6XCjMKWw6bCksKSw6bCi8KJw6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK1wrfDpcKMwpfDqMKXwo/DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OmwrXCt8OmwpnCj8Olwo7CvycsICfDp8KlwoHDqMK/wp7DpcKOwr8nLCAnw6XCiMKaw6XCr8Kfw6XCjsK/JywgJ8OpwpfCqMOmwrrCkMOlwpvCnsOmwpfCj8OowofCqsOmwrLCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK1wrfDpcKNwpfDqMKXwo/DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCscOlwpLCjMOlwo7CvycsICfDpcKQwozDpcK+wrfDpcKOwr8nLCAnw6jCtMK1w6XCvsK3w6XCjsK/JywgJ8OlwoXCtMOmwrXCt8Olwo7CvycsICfDqMK0wrXDpcKNwpfDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCu8KEw6XCjcKXw6jCl8KPw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKQwozDpMK7woHDpcKOwr8nLCAnw6XCsMKWw6bCicKOw6XCjsK/JywgJ8OmwrPCvcOlwrrCk8Olwo7CvycsICfDpsKywrPDpcKNwpfDqMKSwpnDpcKPwqTDpsKXwo/DqMKHwqrDpsKywrvDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCnsKcw6bCtMKbw6jCl8KPw6bCl8KPw6jCh8Kqw6bCssK7w6XCt8KeJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KOwpvDpsKywoHDpcKOwr8nLCAnw6fCj8Ktw6fCjsKbw6XCjsK/JywgJ8OnwpTCmMOlwr7Ct8Olwo7CvycsICfDqMK+wr7DpsKXwqXDpcKOwr8nLCAnw6TCucKFw6bCssK7w6XCjsK/JywgJ8Onwo7Cm8OlwqTCmsOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDp8KOwonDpsKgwpHDqMKXwo/DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Onwo7CicOmwqDCkcOlwo7CvycsICfDpsKdwoLDpcKkwprDpcKOwr8nLCAnw6fCp8Kww6XCpMKaw6XCjsK/JywgJ8OmwrLCu8OlwqTCmsOlwo7CvycsICfDpcKbworDqMKwwqbDpcKOwr8nLCAnw6bCm8Kyw6nCusK7w6jCjsKxw6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwrXCt8OowqXCv8OowpLCmcOlwo/CpMOmwpfCj8OowpfCj8OmwpfCj8OowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCvsK3w6TCu8Kkw6XCk8KIw6XCuMKCJywgJ8OmwqDCvMOlwrDClMOmwpzCqMOlwrjCgicsICfDpMK5wozDpcKFwrDDpcKOwr8nLCAnw6nCg8K9w6XChcKww6XCjsK/JywgJ8OlwqTCqcOlwrPCu8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6XCrsKBw6XCpMKPJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwpPCtsOlwrfCncOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK0w6XCusKGw6XCjMK6JywgJ8OowqXCv8OlwqTCj8OlwozCuicsICfDqcKHwpHDpcKHwqTDpcKMwronLCAnw6fCgcK1w6bCrcKmw6XCuMKCJywgJ8OmwrDCuMOlwq7CgcOlwo7CvycsICfDqMK0wrrDpcKFwrDDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCn8Kzw6XCmMK0w6XCscKxw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKkwqfDpsKtwqbDpcKPwqPDpcKMwronLCAnw6bCg8Kgw6XChsKcw6XCjMK6JywgJ8OlwrnCs8Onwr3Cl8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKQwrTDpcK/wqDDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwojCqcOpwoDCmsOlwozCuicsICfDqcKdwpLDqcKTwpzDpcKzwqHDpcK4woInLCAnw6fCm8KQw6bCscKgw6XCjsK/JywgJ8OlwpDCjMOlwr/Cg8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKbwrrDpcKOwp/DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8Olwo7Cn8OlwrfCnsOlwozCuicsICfDqMKlwr/DpcKQwonDpcKOwr8nLCAnw6nCmsKGw6XCvsK3w6XCjsK/JywgJ8OmwrPCvsOmwrrCkMOlwo7CvycsICfDpcK9wq3DqcKYwrPDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCuMKtw6XCjcKrw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpsKywpnDpcKdwqHDpcKkwrTDpcKMwronLCAnw6TCuMKtw6XCrsKBw6XCjsK/JywgJ8OmwrXCt8Olwo7Cn8Olwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKFwrbDpMK7wpYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6bClsKww6fClsKGJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OkwrnCjMOpwrLCgcOmwpzCqMOpwr3CkMOlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcKkwqnDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCmcOkwr7CncOlwrfCtMOlwoXCi8OlwozCuicsXG4gICAgICAgICAgICAnw6bClsKww6XCuMKCw6XCjMK6JyxcbiAgICAgICAgICAgICfDpsKwwrTDp8KjwqjDpsKywp/DpcKMwronLFxuICAgICAgICAgICAgJ8OlwqTCtMOlwrHCr8OmwrLCs8OlwozCuicsXG4gICAgICAgICAgICAnw6jCvsK+w6XCncKCw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpMK4wpzDpcKxwrHDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrnCjMOpwrLCgcOmwpzCqMOpwr3CkMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcKLw6bCi8KJw6fCjsKbw6TCvsKdw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwovDpsKLwonDp8KOwpvDpMK+wp3DpcKMwronLCAnw6fCi8Ksw6XCscKxw6XCrcKQw6XCjMK6JywgJ8OnwpnCvcOnwqLCscOmwrvCqcOlwozCuicsICfDpMK5wozDpcKwwpTDp8Kmwr7DpcKMwronLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XCkMKQw6nCssKBw6fClcKqw6XCnMKww6XCjMK6JyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKQwpDDqcKywoHDp8KVwqrDpcK4woInLCAnw6bCicKYw6XChcKLw6nCgMKKw6XCjsK/JywgJ8OpwoTCr8OlwpbChMOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKTwojDpcKvwobDpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwpPCiMOlwq/ChsOlwrjCgicsICfDpMK8worDpcKQwr7DpcKOwr8nLCAnw6XCt8K0w6nCh8KMw6XCncKkw6XCk8KIw6jCkMKow6XChcKLw6jCh8Kqw6bCssK7w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpLCjMOnwpTCsMOlwpzCsMOlwozCuicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCksKMw6fClMKww6XCuMKCJywgJ8OlwpLCjMOnwpTCsMOlwo7CvycsICfDpsK0wpvDpsK1wqbDpcKOwr8nLCAnw6bCsMKRw6TCuMKww6XCjsK/JywgJ8OnwprCrsOlwrHCscOlwo7CvycsICfDp8KtwpbDpcKLwpLDpcKOwr8nLCAnw6TCusKOw6fClMKww6XCjsK/JywgJ8OlwqLCqMOnwo7CicOlwo7CvycsICfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKYwr/DpcKFwovDqMKLwo/DpcKcwrDDpcKMwronLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6nCmMK/w6XChcKLw6jCi8KPw6XCuMKCJyxcbiAgICAgICAgICAgICfDpsK4wqnDpcKuwr/DpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwrLCmcOpwpvChcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCi8Kcw6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKYwr/Dp8KTwqbDpsKPwpDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrrCk8Oowr3CpsOlwo7CvycsXG4gICAgICAgICAgICAnw6bCn8Kvw6XCncKqw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKWwrDDpcKSwozDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrnCjMOkwrvCgMOlwo7CvycsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XClsKAw6TCu8KAw6XCnMKww6XCjMK6JyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgJ8OlwpbCgMOkwrvCgMOlwrjCgicsXG4gICAgICAgICAgICAnw6XCt8K0w6bCpcKaw6XCjsK/JyxcbiAgICAgICAgICAgICfDpsKzwr3DpsKZwq7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrzCvcOlwrjCiMOlwo7CvycsXG4gICAgICAgICAgICAnw6XCj8K2w6XCn8KOw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKywrPDpsKZwq7DpsK5wpbDpcKOwr8nLFxuICAgICAgICAgICAgJ8OnwpbCj8OlwovCksOlwo7CvycsXG4gICAgICAgICAgICAnw6nCusKmw6fCm8KWw6bCj8KQw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMKLwrHDpcKQwonDpsKywpnDpcKOwr8nLFxuICAgICAgICAgICAgJ8Oowo7CjsOowr3CpsOlwo7CvycsXG4gICAgICAgICAgICAnw6fClsKPw6nCmcKEw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKhwpTDpMK7woDDpcK6wpPDpcKwwpTDpcK5wrLDpcKhwpTDpcKQwonDpcKFwovDqMKHwqrDpsKywrvDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwoXCi8Olwq3CnMOlwovCksOowovCj8Omwp/Cr8OlwrDClMOlwoXCi8Olwq3CnMOowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6nCmMK/w6XCm8K+w6TCu8KAw6XCuMKCJywgJ8OpwpjCv8OlwpDCiMOlwqXCh8Olwo7CvycsICfDpMK5wozDpsKBwrDDpcKOwr8nLCAnw6nCmMK/w6XChcKLw6nCmcK2w6XCjsK/JywgJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwrfCtMOpwp/Cs8OpwoPCrcOmwqXCnsOowpLCmcOlwo/CpMOowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpcK6wpPDpcKwwpTDpcKLwpLDpcK4woInLFxuICAgICAgICAgICAgJ8OlwpLCjMOpwp3CmcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCsMKJw6fCisKBw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKSwozDp8KhwpXDpcKOwr8nLFxuICAgICAgICAgICAgJ8OkwrjClMOmwpzCq8Olwo7CvycsXG4gICAgICAgICAgICAnw6XCjcKaw6bCucKWw6XCjsK/JyxcbiAgICAgICAgICAgICfDqMK9wq7DpcKPwrDDpcKOwr8nLFxuICAgICAgICAgICAgJ8OowovCpcOnwr7CjMOlwo7CvycsXG4gICAgICAgICAgICAnw6fChMKJw6jCgMKGw6XCm8Kew6bCl8KPw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsKYwozDpcKQwonDpcKbwp7DpsKXwo/DqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6bCmMKMw6XCkMKJw6XCuMKCJyxcbiAgICAgICAgICAgICfDqcKYwpzDpcK6wrfDpcK4woInLFxuICAgICAgICAgICAgJ8OlwqXCh8Olwo/CsMOlwo7CvycsXG4gICAgICAgICAgICAnw6fCjsKbw6fCusKzw6bClsKvw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKQwonDpsKcwqjDqMKQwqjDpcKwwpTDpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwpHCvMOlwpvCvsOlwqPCgcOlwo7CvycsXG4gICAgICAgICAgICAnw6bCnMKow6XCnsKSw6XCk8KIw6jCkMKow6XChcKLw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDp8KxwrPDpsKzwonDpcK4woInLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwo3CmsOlwrDClMOlwqHClMOmwovCicOowpLCmcOlwo/CpMOowofCqsOmwrLCu8OlwrfCnicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCjcKaw6TCucKQw6XCuMKCJywgJ8OnwrLCvsOmwrLCs8Olwo7CvycsICfDpsK4wqnDpsKzwonDpcKOwr8nLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6fCn8Kzw6bCssKzw6XCrcKQJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDp8KfwrPDpsKywrPDpcKtwpAnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDqcKYwr/DpsKLwonDpcKwwpQnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OpwpjCv8OmwovCicOlwrDClCddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OlwpvCvsOmwpzCqMOowojCksOlwoXCiycsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XCm8K+w6bCnMKow6jCiMKSw6XChcKLJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6TCusKUw6XCrsK2w6bCuMKgJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpMK6wpTDpcKuwrbDpsK4wqAnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpMK8worDp8KKwoHDpcKTwojDqMKQwqjDpcKFwovDqMKHwqrDpsKywrvDpcK3wp4nLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6TCvMKKw6XCrsKBw6XCuMKCJyxcbiAgICAgICAgICAgICfDpcKlwo7DpcKxwq/DpcK4woInLFxuICAgICAgICAgICAgJ8OkwrzCisOlwq7CgcOlwo7CvycsXG4gICAgICAgICAgICAnw6fCicK5w6XChcKLw6bClsKvw6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKwwrzDpcKLwpLDpcKFwovDpcKOwr8nLFxuICAgICAgICAgICAgJ8OmwpjCrcOowovCj8Olwo7CvycsXG4gICAgICAgICAgICAnw6bClsKww6bCusKQw6XCjsK/JyxcbiAgICAgICAgICAgICfDqcKcwo3DpcKfwo7DpcKOwr8nLFxuICAgICAgICAgICAgJ8OlwrfCqcOnwpXCmcOlwo7CvycsXG4gICAgICAgICAgICAnw6XCr8Kfw6XCuMKDw6bCn8Klw6XCsMKUw6nClMKhw6TCvMKvw6jCh8Kqw6bCssK7w6XCjsK/JyxcbiAgICAgICAgICAgICfDpcKhwpTDpcKfwo7DpcKcwrDDpcKMwronLFxuICAgICAgICAgICAgJ8OpwpjCv8OlwovCksOmwrPCsMOlwpzCsMOlwozCuicsXG4gICAgICAgICAgICAnw6XChcK2w6TCu8KWJ1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6XChcK2w6TCu8KWJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8Olwo/CsMOmwrnCvsOnwpzCgScsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKPwrDDpcKMwpfDpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6XChsKFw6bCucKWw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKNwpfDpsK4wq/DpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCrcOmwq3Co8OlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKHw6XCjcKOw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDpcKQwozDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCrcOlwrHCscOlwozCuicsXG4gICAgICAgICAgICAnw6bCncK+w6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDpcKuwonDpcKMwronLFxuICAgICAgICAgICAgJ8Okwr/CocOkwrnCicOlwozCuicsXG4gICAgICAgICAgICAnw6bClsKHw6XCscKxw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKjwqvDpsKewpfDpcKMwronLFxuICAgICAgICAgICAgJ8OlwozCl8OmworClcOlwozCuidcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OmwpbCsMOlwozCl8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6bCncK/w6bCocKlw6XCjMK6JywgJ8OmwrHCkMOmwq3CosOlwozCuicsICfDpsKWwrDDpcK6wpfDpcKMwronLCAnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6bCocKDw6XCm8Ktw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpcKPwrDDpMK4wq3DpcK4woInLFxuICAgICAgICAgIGNoaWxkcmVuOiBbJ8OlwoXCtsOkwrvCliddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8Olwo/CsMOlwo3Cl8OlwrjCgicsXG4gICAgICAgICAgY2hpbGRyZW46IFsnw6XChcK2w6TCu8KWJ11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnw6nCq8KYw6nCm8KEw6XCuMKCJyxcbiAgICAgICAgICBjaGlsZHJlbjogWyfDpcKFwrbDpMK7wpYnXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ8Omwr7Cs8OpwpfCqCcsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICfDpsK+wrPDqcKXwqgnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAnw6jCisKxw6XCnMKww6fCjsKbw6XCoMKCw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKcwqPDpcKuwonDpcKkwprDpcKwwrzDpcKgwoLDpcKMwronLFxuICAgICAgICAgICAgJ8OlwqTCp8OlwqDCgsOlwozCuicsXG4gICAgICAgICAgICAnw6bCnMKbw6XCvsK3w6XCoMKCw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcKjwo7DqcKhwrrDpcKgwoLDpcKMwronLFxuICAgICAgICAgICAgJ8OlwpjCicOmwqjCocOlwqDCgsOlwozCuicsXG4gICAgICAgICAgICAnw6XCnMKjw6bClsK5w6bCtcKOw6XCkMKEw6XCoMKCw6XCjMK6JyxcbiAgICAgICAgICAgICfDqMK3wq/DpcKHwrwnLFxuICAgICAgICAgICAgJ8OlwoXCtsOkwrvClidcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnw6nCpsKZw6bCuMKvJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ8OpwqbCmcOmwrjCrycsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICfDpsK3wrHDpsKwwrTDpcKfwpfDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCucOlwrDClsOmwpfCusOlwozCuicsXG4gICAgICAgICAgICAnw6TCucKdw6nCvsKZw6XCn8KOw6XCjMK6JyxcbiAgICAgICAgICAgICfDqcK7woTDpcKkwqfDpMK7wpnDpcKMwronLFxuICAgICAgICAgICAgJ8OowqfCgsOlwqHCmMOlwozCuicsXG4gICAgICAgICAgICAnw6XCjMKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKkwqfDpcKfwpTDpcKMwronLFxuICAgICAgICAgICAgJ8OmwrLCmcOnwpTCsMOlwozCuicsXG4gICAgICAgICAgICAnw6jCpcK/w6jCtMKhw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKFwoPDpsKcwpfDpcKMwronLFxuICAgICAgICAgICAgJ8OlwrHCr8OpwpfCqMOlwozCuicsXG4gICAgICAgICAgICAnw6jCjcKDw6bCucK+w6XCjMK6JyxcbiAgICAgICAgICAgICfDqMKRwrXDqcKdwpLDpcKMwronLFxuICAgICAgICAgICAgJ8OnwqbCu8OlwrLCm8OlwozCuicsXG4gICAgICAgICAgICAnw6TCuMKtw6jCpcK/w6XCjMK6JyxcbiAgICAgICAgICAgICfDpsK5wr7DpMK7wpTDpcKMwronLFxuICAgICAgICAgICAgJ8OkwrjCnMOlwozCuicsXG4gICAgICAgICAgICAnw6XCjcKXw6XCjMK6JyxcbiAgICAgICAgICAgICfDpcKFwrbDpMK7wpYnXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBpY2tlck9wdGlvbnMgfSBmcm9tICcuL3BpY2tlci1vcHRpb25zLnByb3ZpZGVyJztcbmltcG9ydCAqIGFzIGRhdGEgZnJvbSAnLi9kZW1vLWRhdGEvYWRkcmVzcy1kYXRhJztcbmltcG9ydCAqIGFzIHZlbG9jaXR5IGZyb20gJy4uL2NvcmUvdXRpbC92ZWxvY2l0eSc7XG5pbXBvcnQgKiBhcyB0b3VjaEV2ZW50IGZyb20gJy4uL2NvcmUvdXRpbC90b3VjaC1ldmVudCc7XG5pbXBvcnQgeyBMb2NhbGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdQaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHRyYW5zaXRpb25OYW1lOiBzdHJpbmcgPSAnYW0tc2xpZGUtdXAtZW50ZXIgYW0tc2xpZGUtdXAtZW50ZXItYWN0aXZlJztcbiAgbWFza1RyYW5zaXRpb25OYW1lOiBzdHJpbmcgPSAnYW0tZmFkZS1lbnRlciBhbS1mYWRlLWVudGVyLWFjdGl2ZSc7XG4gIGFkZHJlc3M6IGFueVtdID0gZGF0YS5nZXREYXRhKCk7XG4gIHN0YXJ0WTogbnVtYmVyID0gMDtcbiAgZGlmZmVyWTogbnVtYmVyID0gMDtcbiAgY3VycmVudFk6IG51bWJlciA9IDA7XG4gIGxlbjogbnVtYmVyID0gMDtcbiAgZG9tOiBhbnkgPSBudWxsO1xuICBpbmRleDogbnVtYmVyID0gMDtcbiAgbWF4WTogbnVtYmVyID0gMDtcbiAgbGluZUhlaWdodDogbnVtYmVyID0gMzQ7XG4gIGRhdGE6IGFueVtdID0gW107XG4gIHNlbGVjdGVkVGFyZ2V0OiBhbnlbXSA9IFtdO1xuICBpc01vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuICBWZWxvY2l0eSA9IHZlbG9jaXR5LmdldFZlbG9jaXR5KCk7XG4gIGN1cnJlbnRQaWNrZXI6IGFueTtcblxuICBwcml2YXRlIF91bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBwcml2YXRlIF9waWNrZXI6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgcGFuc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FtLXBpY2tlci1jb2wtbWFzaycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5kb20gPSB0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS50YXJnZXQucGFyZW50RWxlbWVudC5jaGlsZHJlblsyXTtcbiAgICB0aGlzLmxlbiA9IHRoaXMuZG9tLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB0aGlzLm1heFkgPSAtKHRoaXMubGVuIC0gMSk7XG5cbiAgICBpZiAodGhpcy5kb20uc3R5bGUudHJhbnNmb3JtID09PSAndHJhbnNsYXRlWSgwcHgpJykge1xuICAgICAgdGhpcy5jdXJyZW50WSA9IDA7XG4gICAgICB0aGlzLm1heFkgPSAtKHRoaXMubGVuIC0gMSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGFyZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udGFyZ2V0SWQgPT09IGV2ZW50LnRhcmdldC5pZCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFkgPSBpdGVtLmN1cnJlbnRZO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFydFkgPSB0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS5jbGllbnRZO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgcGFubW92ZShldmVudCkge1xuICAgIGlmICghZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYW0tcGlja2VyLWNvbC1tYXNrJykgfHwgIXRoaXMuaXNNb3VzZURvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBldiA9IHRvdWNoRXZlbnQuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpO1xuICAgIHRoaXMuZGlmZmVyWSA9IGV2LmNsaWVudFkgLSB0aGlzLnN0YXJ0WTtcbiAgICB0aGlzLlZlbG9jaXR5LnJlY29yZCh0aGlzLmRpZmZlclkpO1xuICAgIHRoaXMuZG9tLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDBzJztcbiAgICB0aGlzLmRvbS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3RoaXMuY3VycmVudFkgKiB0aGlzLmxpbmVIZWlnaHQgKyB0aGlzLmRpZmZlcll9cHgpYDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICBwYW5lbmQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FtLXBpY2tlci1jb2wtbWFzaycpIHx8ICF0aGlzLmlzTW91c2VEb3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGV2ID0gdG91Y2hFdmVudC5nZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgdGhpcy5kaWZmZXJZID0gZXYuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuICAgIGxldCB0aW1lID0gMC4zO1xuICAgIGNvbnN0IHZlbG9jaXR5VGVtcCA9IHRoaXMuVmVsb2NpdHkuZ2V0VmVsb2NpdHkodGhpcy5kaWZmZXJZKSAqIDQ7XG4gICAgaWYgKHZlbG9jaXR5KSB7XG4gICAgICB0aGlzLmRpZmZlclkgPSB2ZWxvY2l0eVRlbXAgKiA0MCArIHRoaXMuZGlmZmVyWTtcbiAgICAgIHRpbWUgPSBNYXRoLmFicyh2ZWxvY2l0eVRlbXApICogMC4xO1xuICAgIH1cbiAgICB0aGlzLmRvbS5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAnICsgKHRpbWUgPCAwLjMgPyAwLjMgOiB0aW1lKSArICdzJztcbiAgICBpZiAodGhpcy5kaWZmZXJZIDw9IC10aGlzLmxpbmVIZWlnaHQgLyAyKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZICs9IE1hdGguZmxvb3IodGhpcy5kaWZmZXJZIC8gdGhpcy5saW5lSGVpZ2h0KTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRZIDw9IHRoaXMubWF4WSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRZID0gdGhpcy5tYXhZO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kaWZmZXJZID49IHRoaXMubGluZUhlaWdodCAvIDIpIHtcbiAgICAgIHRoaXMuY3VycmVudFkgKz0gTWF0aC5mbG9vcih0aGlzLmRpZmZlclkgLyB0aGlzLmxpbmVIZWlnaHQpO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFkgPj0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRZID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYXJnZXQubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc0tleSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS50YXJnZXRJZCA9PT0gZXZlbnQudGFyZ2V0LmlkKSB7XG4gICAgICAgICAgaGFzS2V5ID0gdHJ1ZTtcbiAgICAgICAgICBpdGVtLnRhcmdldElkID0gZXZlbnQudGFyZ2V0LmlkO1xuICAgICAgICAgIGl0ZW0uY3VycmVudFkgPSB0aGlzLmN1cnJlbnRZO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGl0ZW0udGFyZ2V0SWQsIDApID4gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LmlkLCAwKSAmJiB0aGlzLm9wdGlvbnMuY2FzY2FkZSkge1xuICAgICAgICAgIGl0ZW0uY3VycmVudFkgPSAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghaGFzS2V5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQucHVzaCh7IHRhcmdldElkOiBldmVudC50YXJnZXQuaWQsIGN1cnJlbnRZOiB0aGlzLmN1cnJlbnRZIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0LnB1c2goeyB0YXJnZXRJZDogZXZlbnQudGFyZ2V0LmlkLCBjdXJyZW50WTogdGhpcy5jdXJyZW50WSB9KTtcbiAgICB9XG4gICAgdGhpcy5kb20uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHt0aGlzLmN1cnJlbnRZICogdGhpcy5saW5lSGVpZ2h0fXB4KWA7XG4gICAgdGhpcy5pbmRleCA9IE1hdGguZmxvb3IoTWF0aC5hYnModGhpcy5jdXJyZW50WSAvIDEpKTtcbiAgICB0aGlzLnNldEN1cnJlbnRTZWxlY3RlZChwYXJzZUludChldmVudC50YXJnZXQuaWQsIDApLCB0aGlzLmluZGV4KTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5jb21iaW5lUmVzbHV0KCkpO1xuICAgIHRoaXMub3B0aW9ucy5vblBpY2tlckNoYW5nZS5lbWl0KHRoaXMuY29tYmluZVJlc2x1dCgpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwdWJsaWMgb3B0aW9uczogUGlja2VyT3B0aW9ucywgcHJpdmF0ZSBfbG9jYWxlUHJvdmlkZXJTZXJ2aWNlOiBMb2NhbGVQcm92aWRlclNlcnZpY2UpIHtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWRkcmVzcyA9IHRoaXMub3B0aW9ucy5kYXRhO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBbXTtcbiAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmRhdGEucHVzaCh0aGlzLmdlbmVyYXRlQXJyYXlEYXRhKHRoaXMuYWRkcmVzcykpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZXRJbml0VmFsdWVJbmRleCh0aGlzLmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrQXJyYXlEZWVwKHRoaXMuYWRkcmVzc1swXSk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5kYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0LnB1c2goeyB0YXJnZXRJZDogYCR7aW5kZXh9YCwgY3VycmVudFk6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5pdFZhbHVlSW5kZXgoZGF0YVRlbXApIHtcbiAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gW107XG4gICAgdGhpcy5vcHRpb25zLnZhbHVlLmZvckVhY2goKGVsZW1lbnQsIGkpID0+IHtcbiAgICAgIGRhdGFUZW1wLmZvckVhY2goKGl0ZW0sIGopID0+IHtcbiAgICAgICAgaXRlbS5mb3JFYWNoKChpdGVtMSwgaykgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSAoaXRlbTEubGFiZWwgfHwgaXRlbTEpICYmIGkgPT09IGopIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBcnJheURlZXAodGhpcy5kYXRhW2ldW2tdLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0LnB1c2goeyB0YXJnZXRJZDogYCR7aX1gLCBjdXJyZW50WTogLWsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVsb2FkUGlja2VyKCkge1xuICAgIGlmICghdGhpcy5fcGlja2VyIHx8IHRoaXMuX3BpY2tlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBpY2tlciA9IHRoaXMuX3BpY2tlci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuY3VycmVudFBpY2tlciAmJiB0aGlzLmN1cnJlbnRQaWNrZXIuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2VsZi5zZWxlY3RlZFRhcmdldC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgc2VsZi5jdXJyZW50UGlja2VyLmNoaWxkcmVuW2ldLmNoaWxkcmVuWzJdLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIC4zcyc7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChpdGVtLmN1cnJlbnRZLCAwKTtcbiAgICAgICAgICBzZWxmLmN1cnJlbnRQaWNrZXIuY2hpbGRyZW5baV0uY2hpbGRyZW5bMl0uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtpbmRleCAqIHNlbGYubGluZUhlaWdodH1weClgO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlQXJyYXlEYXRhKHRhcmdldEFycikge1xuICAgIGNvbnN0IHRlbXBBcnIgPSBbXTtcbiAgICBpZiAodGFyZ2V0QXJyIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRhcmdldEFyci5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXRlbSk7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IHt9O1xuICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudFtrZXldID0gdGFyZ2V0QXJyW2ldW2tleV0gfHwgdGFyZ2V0QXJyW2ldO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wQXJyLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRlbXBBcnI7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNoZWNrQXJyYXlEZWVwKHBhcmVudCwgaW5pdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgT2JqZWN0ICYmIHBhcmVudC5jaGlsZHJlbiAmJiBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVBcnJheURhdGEocGFyZW50LmNoaWxkcmVuKS5sZW5ndGggPiAwICYmIHRoaXMuZGF0YS5sZW5ndGggPCB0aGlzLm9wdGlvbnMuY29scykge1xuICAgICAgICB0aGlzLmRhdGEucHVzaCh0aGlzLmdlbmVyYXRlQXJyYXlEYXRhKHBhcmVudC5jaGlsZHJlbikpO1xuICAgICAgICBpZiAoaW5pdCkge1xuICAgICAgICAgIHRoaXMuY2hlY2tBcnJheURlZXAocGFyZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9rKCkge1xuICAgIHRoaXMub3B0aW9ucy5vbk9rLmVtaXQodGhpcy5jb21iaW5lUmVzbHV0KCkpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29uZmlybSkge1xuICAgICAgdGhpcy5vcHRpb25zLmNvbmZpcm0odGhpcy5jb21iaW5lUmVzbHV0KCkpO1xuICAgIH1cbiAgICB0aGlzLnNldFRyYW5zaXRpb25OYW1lKCk7XG4gIH1cblxuICBjb21iaW5lUmVzbHV0KCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZGF0YVtwYXJzZUludChpdGVtLnRhcmdldElkLCAwKV1bLWl0ZW0uY3VycmVudFldKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuc2V0VHJhbnNpdGlvbk5hbWUoKTtcbiAgICB0aGlzLm9wdGlvbnMub25EaXNtaXNzLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNhbmNlbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFRyYW5zaXRpb25OYW1lKCkge1xuICAgIHRoaXMudHJhbnNpdGlvbk5hbWUgPSAnYW0tc2xpZGUtdXAtbGVhdmUgYW0tc2xpZGUtdXAtbGVhdmUtYWN0aXZlJztcbiAgICB0aGlzLm1hc2tUcmFuc2l0aW9uTmFtZSA9ICdhbS1mYWRlLWxlYXZlIGFtLWZhZGUtbGVhdmUtYWN0aXZlJztcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3B0aW9ucy5oaWRlUGlja2VyKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHNldEN1cnJlbnRTZWxlY3RlZCh0YXJnZXQsIGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuY2FzY2FkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhID0gdGhpcy5kYXRhLnNsaWNlKDAsIHRhcmdldCArIDEpO1xuICAgIHRoaXMuZGF0YSA9IGE7XG4gICAgdGhpcy5jaGVja0FycmF5RGVlcCh0aGlzLmRhdGFbdGFyZ2V0XVtpbmRleF0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gYCR7aX1gICYmIGkgPiB0YXJnZXQpIHtcbiAgICAgICAgICB0aGlzLl9waWNrZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2ldLmNoaWxkcmVuWzJdLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIC4zcyc7XG4gICAgICAgICAgdGhpcy5fcGlja2VyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGlsZHJlbltpXS5jaGlsZHJlblsyXS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwcHgpJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLl9sb2NhbGVQcm92aWRlclNlcnZpY2UubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIGNvbnN0IGxvY2FsZTogYW55ID0gdGhpcy5fbG9jYWxlUHJvdmlkZXJTZXJ2aWNlLmdldExvY2FsZVN1Yk9iaignUGlja2VyJyk7XG4gICAgICB0aGlzLm9wdGlvbnMub2tUZXh0ID0gbG9jYWxlLm9rVGV4dDtcbiAgICAgIHRoaXMub3B0aW9ucy5kaXNtaXNzVGV4dCA9IGxvY2FsZS5kaXNtaXNzVGV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJlbG9hZFBpY2tlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIEVsZW1lbnRSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBJbmplY3RvcixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBSZW5kZXJlcjIsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL3BpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlja2VyT3B0aW9ucyB9IGZyb20gJy4vcGlja2VyLW9wdGlvbnMucHJvdmlkZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbUGlja2VyXSwgW256bS1waWNrZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBQaWNrZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgcGlja2VyOiBDb21wb25lbnRSZWY8UGlja2VyQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBfZXZlbnRMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgQElucHV0KClcbiAgZGF0YTogQXJyYXk8YW55PjtcbiAgQElucHV0KClcbiAgdmFsdWU6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpXG4gIGNvbHM6IE51bWJlcjtcbiAgQElucHV0KClcbiAgbWFzazogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgb2tUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGRpc21pc3NUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBjYXNjYWRlOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBhcHBlbmRUb0JvZHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGluZGljYXRvclN0eWxlOiBvYmplY3Q7XG4gIEBPdXRwdXQoKVxuICBvblZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIEBPdXRwdXQoKVxuICBvblBpY2tlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvbk9rOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIG9uRGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICB0b2dnbGVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlcikge1xuICAgICAgdGhpcy5zaG93UGlja2VyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfZWxtOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX2RlZmF1bHRPcHRpb25zOiBQaWNrZXJPcHRpb25zLFxuICAgIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmlzT3Blbikge1xuICAgICAgaWYgKGNoYW5nZXMuaXNPcGVuLmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNob3dQaWNrZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5waWNrZXIgJiZcbiAgICAgICF0aGlzLl9lbG0ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5waWNrZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmhpZGVQaWNrZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlcikge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gW1xuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLm9uRG9jdW1lbnRDbGljayhldmVudCkpLFxuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAndG91Y2hlbmQnLCAoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLm9uRG9jdW1lbnRDbGljayhldmVudCkpXG4gICAgICAgIF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBQaWNrZXJPcHRpb25zKCk7XG4gICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHRoaXMuX2RlZmF1bHRPcHRpb25zLCB7XG4gICAgICAgIGhpZGVQaWNrZXI6IChldmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJhbXM6IEFycmF5PGtleW9mIFBpY2tlckRpcmVjdGl2ZT4gPSBbXG4gICAgICAgICdkYXRhJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ2NvbHMnLFxuICAgICAgICAnbWFzaycsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdva1RleHQnLFxuICAgICAgICAnZGlzbWlzc1RleHQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnY2FzY2FkZScsXG4gICAgICAgICdhcHBlbmRUb0JvZHknLFxuICAgICAgICAnaW5kaWNhdG9yU3R5bGUnLFxuICAgICAgICAnb25PaycsXG4gICAgICAgICdvblBpY2tlckNoYW5nZSdcbiAgICAgIF07XG4gICAgICBvcHRpb25hbFBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW3BhcmFtXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAob3B0aW9ucyBhcyBhbnkpW3BhcmFtXSA9IHRoaXNbcGFyYW1dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8UGlja2VyQ29tcG9uZW50PiA9IHRoaXMuX2Nmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQaWNrZXJDb21wb25lbnQpO1xuICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQaWNrZXJPcHRpb25zLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgICAgdGhpcy5waWNrZXIgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGgsXG4gICAgICAgIGNoaWxkSW5qZWN0b3JcbiAgICAgICk7XG4gICAgICBpZiAob3B0aW9ucy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlci5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoaWRlUGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpY2tlcikge1xuICAgICAgdGhpcy5waWNrZXIuZGVzdHJveSgpO1xuICAgICAgZGVsZXRlIHRoaXMucGlja2VyO1xuICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5mb3JFYWNoKGZuID0+IGZuKCkpO1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tlckRpcmVjdGl2ZSB9IGZyb20gJy4vcGlja2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi9waWNrZXItb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi4vY29yZS9jb3JlLm1vZHVsZSc7XG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb3JlTW9kdWxlXSxcbiAgZXhwb3J0czogW1BpY2tlckNvbXBvbmVudCwgUGlja2VyRGlyZWN0aXZlXSxcbiAgZGVjbGFyYXRpb25zOiBbUGlja2VyQ29tcG9uZW50LCBQaWNrZXJEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtQaWNrZXJPcHRpb25zXSxcbiAgZW50cnlDb21wb25lbnRzOiBbUGlja2VyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBQaWNrZXJNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9waWNrZXIvcGlja2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1BpY2tlclZpZXcsIG56bS1waWNrZXItdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9waWNrZXItdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUGlja2VyVmlld0NvbXBvbmVudCBleHRlbmRzIFBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIG9wdGlvbnM7XG4gIEBJbnB1dCgpXG4gIGRhdGE6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KClcbiAgdmFsdWU6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KClcbiAgY29sczogbnVtYmVyID0gMztcbiAgQElucHV0KClcbiAgY2FzY2FkZTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgaW5kaWNhdG9yU3R5bGU6IG9iamVjdCA9IHt9O1xuICBASW5wdXQoKVxuICBpdGVtU3R5bGU6IG9iamVjdCA9IHt9O1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBpY2tlclZpZXdJbml0KCkge1xuICAgIHRoaXMub3B0aW9ucy5kYXRhID0gdGhpcy5kYXRhO1xuICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zLmNvbHMgPSB0aGlzLmNvbHM7XG4gICAgdGhpcy5vcHRpb25zLmNhc2NhZGUgPSB0aGlzLmNhc2NhZGU7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBpY2tlclZpZXdJbml0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGlja2VyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5yZWxvYWRQaWNrZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQaWNrZXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9waWNrZXItdmlldy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtQaWNrZXJWaWV3Q29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbUGlja2VyVmlld0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgUGlja2VyVmlld01vZHVsZSB7IH1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VHlwZSB7XG4gIHR5cGU6IHN0cmluZzsgLy8gJ2ltZycgfCAnc2VsZWN0JyB8ICd3aGl0ZSdcbiAgYmFja2dyb3VuZEltYWdlOiBzdHJpbmc7XG4gIHRyYW5zZm9ybTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdJbWFnZVBpY2tlciwgbnptLWltYWdlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlUGlja2VyIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0taW1hZ2UtcGlja2VyJztcbiAgZmxleEVsOiBFbGVtZW50VHlwZVtdW10gPSBbXTtcblxuICBwcml2YXRlIF9hY2NlcHQ6IHN0cmluZyA9ICdpbWFnZS8qJztcbiAgcHJpdmF0ZSBfY291bnQ6IG51bWJlciA9IDQ7XG4gIHByaXZhdGUgX3NlbGVjdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9maWxlczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9tdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVTZWxlY3RvcklucHV0JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHByaXZhdGUgX2ZpbGVTZWxlY3RvcklucHV0OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBmaWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gIH1cbiAgc2V0IGZpbGVzKHZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5fZmlsZXMgPSB2YWx1ZTtcbiAgICB0aGlzLnNvcnRJdGVtKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGFjY2VwdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hY2NlcHQ7XG4gIH1cbiAgc2V0IGFjY2VwdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYWNjZXB0ID0gdmFsdWU7XG4gICAgdGhpcy5zb3J0SXRlbSgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gIH1cbiAgc2V0IGxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlID4gMCkge1xuICAgICAgdGhpcy5fY291bnQgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY291bnQgPSA0O1xuICAgIH1cbiAgICB0aGlzLnNvcnRJdGVtKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IHZhbHVlO1xuICAgIHRoaXMuc29ydEl0ZW0oKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZTtcbiAgfVxuICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NlbGVjdGFibGUgPSB2YWx1ZTtcbiAgICB0aGlzLnNvcnRJdGVtKCk7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uRmFpbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvbkltYWdlQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgb25BZGRJbWFnZUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc29ydEl0ZW0oKSB7XG4gICAgaWYgKCF0aGlzLl9maWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY291bnQgPSBwYXJzZUludCgnJyArIHRoaXMuX2NvdW50LCAxMCk7XG4gICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgIGNvdW50ID0gNDtcbiAgICB9XG4gICAgbGV0IGFsbEVsOiBFbGVtZW50VHlwZVtdID0gdGhpcy5fZmlsZXMubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2ltZycsXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ3VybCgnICsgaXRlbS51cmwgKyAnKScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgnICsgdGhpcy5nZXRSb3RhdGlvbihpdGVtLm9yaWVudGF0aW9uKSArICcpZGVnJ1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5fc2VsZWN0YWJsZSkge1xuICAgICAgYWxsRWwucHVzaCh7XG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICcnLFxuICAgICAgICB0cmFuc2Zvcm06ICcnXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoID0gYWxsRWwubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IDAgJiYgbGVuZ3RoICUgY291bnQgIT09IDApIHtcbiAgICAgIGNvbnN0IGJsYW5rQ291bnQgPSBjb3VudCAtIChsZW5ndGggJSBjb3VudCk7XG4gICAgICBjb25zdCBmaWxsQmxhbmtFbDogYW55W10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxhbmtDb3VudDsgaSsrKSB7XG4gICAgICAgIGZpbGxCbGFua0VsLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICd3aGl0ZScsXG4gICAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnJyxcbiAgICAgICAgICB0cmFuc2Zvcm06ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYWxsRWwgPSBhbGxFbC5jb25jYXQoZmlsbEJsYW5rRWwpO1xuICAgIH1cbiAgICB0aGlzLmZsZXhFbCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsRWwubGVuZ3RoIC8gY291bnQ7IGkrKykge1xuICAgICAgY29uc3Qgcm93RWwgPSBhbGxFbC5zbGljZShpICogY291bnQsIGkgKiBjb3VudCArIGNvdW50KTtcbiAgICAgIHRoaXMuZmxleEVsLnB1c2gocm93RWwpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEltYWdlKGltZ0l0ZW06IGFueSkge1xuICAgIHRoaXMuX2ZpbGVzLnB1c2goe1xuICAgICAgdHlwZTogJ2ltZycsXG4gICAgICB1cmw6IGltZ0l0ZW0udXJsLFxuICAgICAgb3JpZW50YXRpb246IGltZ0l0ZW0ub3JpZW50YXRpb25cbiAgICB9KTtcbiAgICB0aGlzLnNvcnRJdGVtKCk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHtcbiAgICAgIGZpbGVzOiB0aGlzLl9maWxlcyxcbiAgICAgIG9wZXJhdGlvblR5cGU6ICdhZGQnLFxuICAgICAgaW5kZXg6IHRoaXMuX2ZpbGVzLmxlbmd0aCAtIDFcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUltYWdlKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuc29ydEl0ZW0oKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoe1xuICAgICAgZmlsZXM6IHRoaXMuX2ZpbGVzLFxuICAgICAgb3BlcmF0aW9uVHlwZTogJ3JlbW92ZScsXG4gICAgICBpbmRleDogaW5kZXhcbiAgICB9KTtcbiAgfVxuXG4gIGltYWdlQ2xpY2soaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMub25JbWFnZUNsaWNrLmVtaXQoe1xuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgZmlsZXM6IHRoaXMuX2ZpbGVzXG4gICAgfSk7XG4gIH1cblxuICBhZGRJbWFnZUNsaWNrKGUpIHtcbiAgICB0aGlzLm9uQWRkSW1hZ2VDbGljay5lbWl0KGUpO1xuICB9XG5cbiAgcGFyc2VGaWxlKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgY29uc3QgZGF0YVVSTCA9IChlLnRhcmdldCBhcyBhbnkpLnJlc3VsdDtcbiAgICAgIGlmICghZGF0YVVSTCkge1xuICAgICAgICB0aGlzLm9uRmFpbC5lbWl0KGBGYWlsIHRvIGdldCB0aGUgJHtpbmRleH0gaW1hZ2VgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3JpZW50YXRpb24gPSAxO1xuICAgICAgdGhpcy5nZXRPcmllbnRhdGlvbihmaWxlLCByZXMgPT4ge1xuICAgICAgICAvLyAtMjogbm90IGpwZWcgLCAtMTogbm90IGRlZmluZWRcbiAgICAgICAgaWYgKHJlcyA+IDApIHtcbiAgICAgICAgICBvcmllbnRhdGlvbiA9IHJlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZEltYWdlKHtcbiAgICAgICAgICB1cmw6IGRhdGFVUkwsXG4gICAgICAgICAgb3JpZW50YXRpb24sXG4gICAgICAgICAgZmlsZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIH1cblxuICBmaWxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgZmlsZUxpc3Q6IEZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGlmIChmaWxlTGlzdCAmJiBmaWxlTGlzdC5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5wYXJzZUZpbGUoZmlsZUxpc3RbaV0sIGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFJvdGF0aW9uKG9yaWVudGF0aW9uID0gMSkge1xuICAgIGxldCBpbWdSb3RhdGlvbiA9IDA7XG4gICAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgICAgY2FzZSAzOlxuICAgICAgICBpbWdSb3RhdGlvbiA9IDE4MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDY6XG4gICAgICAgIGltZ1JvdGF0aW9uID0gOTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBpbWdSb3RhdGlvbiA9IDI3MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICByZXR1cm4gaW1nUm90YXRpb247XG4gIH1cblxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc1ODQ3OTQvYWNjZXNzaW5nLWpwZWctZXhpZi1yb3RhdGlvbi1kYXRhLWluLWphdmFzY3JpcHQtb24tdGhlLWNsaWVudC1zaWRlXG4gIGdldE9yaWVudGF0aW9uKGZpbGU6IGFueSwgY2FsbGJhY2s6IChfOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoKGUudGFyZ2V0IGFzIGFueSkucmVzdWx0KTtcbiAgICAgIGlmICh2aWV3LmdldFVpbnQxNigwLCBmYWxzZSkgIT09IDB4ZmZkOCkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soLTIpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGVuZ3RoID0gdmlldy5ieXRlTGVuZ3RoO1xuICAgICAgbGV0IG9mZnNldCA9IDI7XG4gICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgaWYgKG1hcmtlciA9PT0gMHhmZmUxKSB7XG4gICAgICAgICAgY29uc3QgdG1wID0gdmlldy5nZXRVaW50MzIoKG9mZnNldCArPSAyKSwgZmFsc2UpO1xuICAgICAgICAgIGlmICh0bXAgIT09IDB4NDU3ODY5NjYpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGxpdHRsZSA9IHZpZXcuZ2V0VWludDE2KChvZmZzZXQgKz0gNiksIGZhbHNlKSA9PT0gMHg0OTQ5O1xuICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQzMihvZmZzZXQgKyA0LCBsaXR0bGUpO1xuICAgICAgICAgIGNvbnN0IHRhZ3MgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGxpdHRsZSk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQxNihvZmZzZXQgKyBpICogMTIsIGxpdHRsZSkgPT09IDB4MDExMikge1xuICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodmlldy5nZXRVaW50MTYob2Zmc2V0ICsgaSAqIDEyICsgOCwgbGl0dGxlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXJrZXIgJiAweGZmMDApICE9PSAweGZmMDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXQgKz0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsYmFjaygtMSk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZS5zbGljZSgwLCA2NCAqIDEwMjQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlUGlja2VyIH0gZnJvbSAnLi9pbWFnZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICcuLi9mbGV4L2ZsZXgubW9kdWxlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0ltYWdlUGlja2VyXSxcbiAgZXhwb3J0czogW0ltYWdlUGlja2VyXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmxleE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VQaWNrZXJNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1Jlc3VsdCwgbnptLXJlc3VsdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN1bHQuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJlc3VsdCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXJlc3VsdCc7XG4gIGlzVGl0bGVTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBpc01lc3NhZ2VTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHByaXZhdGUgX3RpdGxlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9tZXNzYWdlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHRoaXMuaXNUZW1wbGF0ZVJlZih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaXNUaXRsZVN0cmluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl90aXRsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGltZ1VybDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBidXR0b25UZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGJ1dHRvblR5cGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgaW1nOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKVxuICBnZXQgbWVzc2FnZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgfVxuICBzZXQgbWVzc2FnZSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh0aGlzLmlzVGVtcGxhdGVSZWYodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzTWVzc2FnZVN0cmluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTWVzc2FnZVN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25CdXR0b25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICByb2xlOiBzdHJpbmcgPSAnYWxlcnQnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXJlc3VsdCcpXG4gIGFtUmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgYnV0dG9uQ2xpY2soZXZlbnQpIHtcbiAgICB0aGlzLm9uQnV0dG9uQ2xpY2suZW1pdChldmVudCk7XG4gIH1cblxuICBpc1RlbXBsYXRlUmVmKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSAnLi9yZXN1bHQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1Jlc3VsdF0sXG4gIGV4cG9ydHM6IFtSZXN1bHRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBSZXN1bHRNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1JhbmdlICwgbnptLXJhbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSYW5nZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXNsaWRlcic7XG4gIG9mZnNldDogYW55W10gPSBbXTtcbiAgbGVuZ3RoOiBhbnlbXSA9IFtdO1xuICB1cHBlckJvdW5kOiBudW1iZXI7XG4gIGxvd2VyQm91bmQ6IG51bWJlcjtcbiAgbWF4Qm91bmQ6IG51bWJlcltdO1xuICBtaW5Cb3VuZDogbnVtYmVyW107XG4gIHNsaWRlckNsczogb2JqZWN0O1xuICBzbGlkZXJMZW5ndGg6IG51bWJlcjtcbiAgc2xpZGVyU3RhcnQ6IG51bWJlcjtcblxuICBwcml2YXRlIF9taW4gPSAwO1xuICBwcml2YXRlIF9tYXggPSAxMDA7XG4gIHByaXZhdGUgX3N0ZXAgPSAxO1xuICBwcml2YXRlIF92YWx1ZTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlID0gWzAsIDAsIDBdO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9tYXJrcyA9IHt9O1xuICBwcml2YXRlIF9kb3RzID0gZmFsc2U7XG4gIHByaXZhdGUgX2luY2x1ZGVkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfY291bnQgPSAxO1xuICBwcml2YXRlIF9hbGxvd0Nyb3NzID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfcHVzaGFibGU7XG4gIHByaXZhdGUgX2hhbmRsZVN0eWxlID0gW107XG4gIHByaXZhdGUgX3RyYWNrU3R5bGUgPSBbXTtcbiAgcHJpdmF0ZSBfcmFpbFN0eWxlO1xuICBwcml2YXRlIF9oYW5kbGVDb3VudDtcblxuICBASW5wdXQoKVxuICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuICBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICB9XG4gIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IFtudW1iZXJdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlOiBbbnVtYmVyXSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWFya3MoKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fbWFya3M7XG4gIH1cbiAgc2V0IG1hcmtzKHZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLl9tYXJrcyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkb3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb3RzO1xuICB9XG4gIHNldCBkb3RzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZG90cyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpbmNsdWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZWQ7XG4gIH1cbiAgc2V0IGluY2x1ZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5jbHVkZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY291bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvdW50ID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGFsbG93Q3Jvc3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hbGxvd0Nyb3NzID0gdmFsdWU7XG4gICAgdGhpcy5zZXRWYWx1ZUJvdW5kKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHB1c2hhYmxlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wdXNoYWJsZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnZlcmlmeVB1c2hhYmxlKCkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVCb3VuZCgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaGFuZGxlU3R5bGUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGVTdHlsZTtcbiAgfVxuICBzZXQgaGFuZGxlU3R5bGUodmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5faGFuZGxlU3R5bGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdHJhY2tTdHlsZSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrU3R5bGU7XG4gIH1cbiAgc2V0IHRyYWNrU3R5bGUodmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fdHJhY2tTdHlsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByYWlsU3R5bGUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9yYWlsU3R5bGU7XG4gIH1cbiAgc2V0IHJhaWxTdHlsZSh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLl9yYWlsU3R5bGUgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQWZ0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXNsaWRlci13cmFwcGVyJylcbiAgYW1XcmFwcGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgc2V0Q2xzKCkge1xuICAgIHRoaXMuc2xpZGVyQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kaXNhYmxlZGBdOiB0aGlzLl9kaXNhYmxlZFxuICAgIH07XG4gIH1cblxuICBpbml0aWFsVmFsdWUoKSB7XG4gICAgY29uc3QgbWluVGVtcCA9IHRoaXMuX21pbjtcbiAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBBcnJheS5hcHBseShudWxsLCBBcnJheSh0aGlzLl9jb3VudCArIDEpKS5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbWluVGVtcDtcbiAgICB9KTtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuX2RlZmF1bHRWYWx1ZSA6IGluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLl92YWx1ZSA6IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICBpZiAodGhpcy5fY291bnQgPiAwKSB7XG4gICAgICB0aGlzLnVwcGVyQm91bmQgPSBNYXRoLm1heCguLi50aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLmxvd2VyQm91bmQgPSBNYXRoLm1pbiguLi50aGlzLl92YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGUsIGkpIHtcbiAgICBsZXQgdGVtcCA9IFsuLi50aGlzLl92YWx1ZV07XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wdXNoYWJsZSA9PT0gJ2Jvb2xlYW4nICYmIHRoaXMuX3B1c2hhYmxlKSB7XG4gICAgICBjb25zdCBkaWZmID0gZSAtIHRoaXMuX3ZhbHVlW2ldO1xuICAgICAgdGVtcCA9IHRlbXAubWFwKHYgPT4gKHYgPSB2ICsgZGlmZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wW2ldID0gZTtcbiAgICB9XG4gICAgdGhpcy51cHBlckJvdW5kID0gTWF0aC5tYXgoLi4udGVtcCk7XG4gICAgdGhpcy5sb3dlckJvdW5kID0gTWF0aC5taW4oLi4udGVtcCk7XG4gICAgdGhpcy5zZXRUcmFja1N0eWxlKHRlbXApO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0ZW1wKTtcbiAgfVxuXG4gIGhhbmRsZUFmdGVyQ2hhbmdlKGUsIGkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlW2ldID0gZTtcbiAgICAgIHRoaXMudXBwZXJCb3VuZCA9IE1hdGgubWF4KC4uLnRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMubG93ZXJCb3VuZCA9IE1hdGgubWluKC4uLnRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0VHJhY2tTdHlsZSh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLm9uQWZ0ZXJDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLnNldFZhbHVlQm91bmQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHNldFRyYWNrU3R5bGUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID09PSB0aGlzLl9jb3VudCArIDEpIHtcbiAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLm9mZnNldFtpXSA9ICh2YWx1ZVtpXSAqIDEwMCkgLyAodGhpcy5fbWF4IC0gdGhpcy5fbWluKTtcbiAgICAgICAgdGhpcy5sZW5ndGhbaV0gPSAoKHZhbHVlW2kgKyAxXSAtIHZhbHVlW2ldKSAqIDEwMCkgLyAodGhpcy5fbWF4IC0gdGhpcy5fbWluKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRWYWx1ZUJvdW5kKCkge1xuICAgIHRoaXMubWF4Qm91bmQgPSBbXTtcbiAgICB0aGlzLm1pbkJvdW5kID0gW107XG4gICAgaWYgKHRoaXMuX2FsbG93Q3Jvc3MgfHwgdGhpcy5faGFuZGxlQ291bnQgPD0gMSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9oYW5kbGVDb3VudDsgaSsrKSB7XG4gICAgICAgIHRoaXMubWF4Qm91bmRbaV0gPSB0aGlzLl9tYXg7XG4gICAgICAgIHRoaXMubWluQm91bmRbaV0gPSB0aGlzLl9taW47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fcHVzaGFibGUgIT09ICdudW1iZXInIHx8ICh0eXBlb2YgdGhpcy5fcHVzaGFibGUgPT09ICdib29sZWFuJyAmJiB0aGlzLl9wdXNoYWJsZSkpIHtcbiAgICAgICAgdGhpcy5fcHVzaGFibGUgPSAwO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9oYW5kbGVDb3VudDsgaSsrKSB7XG4gICAgICAgIHRoaXMubWF4Qm91bmRbaV0gPSBpID09PSB0aGlzLl9oYW5kbGVDb3VudCAtIDEgPyB0aGlzLl9tYXggOiB0aGlzLl92YWx1ZVtpICsgMV0gLSB0aGlzLl9wdXNoYWJsZTtcbiAgICAgICAgdGhpcy5taW5Cb3VuZFtpXSA9IGkgPT09IDAgPyB0aGlzLl9taW4gOiB0aGlzLl92YWx1ZVtpIC0gMV0gKyB0aGlzLl9wdXNoYWJsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2ZXJpZnlQdXNoYWJsZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3B1c2hhYmxlID09PSAnbnVtYmVyJykge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLl9oYW5kbGVDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLl92YWx1ZVtpXSAtIHRoaXMuX3ZhbHVlW2kgLSAxXTtcbiAgICAgICAgaWYgKGRpZmYgPCB0aGlzLl9wdXNoYWJsZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9tYXggPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9taW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy52ZXJpZnlQdXNoYWJsZSgpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQm91bmQoKTtcbiAgICAgIHRoaXMuX2hhbmRsZUNvdW50ID0gdGhpcy5fY291bnQgKyAxO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIGNvbnN0IHNsaWRlckNvb3JkcyA9IHRoaXMuX2VsZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FtLXNsaWRlcicpWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5zbGlkZXJMZW5ndGggPSBzbGlkZXJDb29yZHMud2lkdGg7XG4gICAgICB0aGlzLnNsaWRlclN0YXJ0ID0gc2xpZGVyQ29vcmRzLmxlZnQ7XG4gICAgICB0aGlzLmluaXRpYWxWYWx1ZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgRWxlbWVudFJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdTbGlkZXIgLCBuem0tc2xpZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJlZml4Q2xzID0gJ2FtLXNsaWRlcic7XG4gIHNsaWRlckxlbmd0aDogbnVtYmVyO1xuICBzbGlkZXJTdGFydDogbnVtYmVyO1xuICBzbGlkZXJDbHM6IG9iamVjdDtcbiAgb2Zmc2V0OiBudW1iZXIgPSAwO1xuICBsZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9tYXg6IG51bWJlciA9IDEwMDtcbiAgcHJpdmF0ZSBfc3RlcDogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlciA9IDEwO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWFya3M6IG9iamVjdCA9IHt9O1xuICBwcml2YXRlIF9kb3RzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2luY2x1ZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfaGFuZGxlU3R5bGU6IG9iamVjdDtcbiAgcHJpdmF0ZSBfdHJhY2tTdHlsZTogb2JqZWN0ID0ge307XG4gIHByaXZhdGUgX3JhaWxTdHlsZTogb2JqZWN0O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG4gIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gIH1cbiAgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWVSYW5nZSgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWFya3MoKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fbWFya3M7XG4gIH1cbiAgc2V0IG1hcmtzKHZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLl9tYXJrcyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkb3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb3RzO1xuICB9XG4gIHNldCBkb3RzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZG90cyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpbmNsdWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZWQ7XG4gIH1cbiAgc2V0IGluY2x1ZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5jbHVkZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaGFuZGxlU3R5bGUoKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3R5bGU7XG4gIH1cbiAgc2V0IGhhbmRsZVN0eWxlKHZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLl9oYW5kbGVTdHlsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0cmFja1N0eWxlKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrU3R5bGU7XG4gIH1cbiAgc2V0IHRyYWNrU3R5bGUodmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuX3RyYWNrU3R5bGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcmFpbFN0eWxlKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3JhaWxTdHlsZTtcbiAgfVxuICBzZXQgcmFpbFN0eWxlKHZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLl9yYWlsU3R5bGUgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQWZ0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXNsaWRlci13cmFwcGVyJylcbiAgYW1TbGlkZXJXcmFwcGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgc2V0Q2xzKCkge1xuICAgIHRoaXMuc2xpZGVyQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kaXNhYmxlZGBdOiB0aGlzLl9kaXNhYmxlZFxuICAgIH07XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UoZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAoKGUgLSB0aGlzLl9taW4pICogMTAwKSAvICh0aGlzLl9tYXggLSB0aGlzLl9taW4pO1xuICAgICAgdGhpcy5fdmFsdWUgPSBlO1xuICAgIH0sIDEwKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZSk7XG4gIH1cblxuICBoYW5kbGVBZnRlckNoYW5nZShlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9ICgoZSAtIHRoaXMuX21pbikgKiAxMDApIC8gKHRoaXMuX21heCAtIHRoaXMuX21pbik7XG4gICAgICB0aGlzLl92YWx1ZSA9IGU7XG4gICAgfSwgMTApO1xuICAgIHRoaXMub25BZnRlckNoYW5nZS5lbWl0KGUpO1xuICB9XG5cbiAgdmFsdWVSYW5nZSgpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgPCB0aGlzLl9taW4pIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbWluO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbWF4O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy52YWx1ZVJhbmdlKCk7XG4gICAgY29uc3Qgc2xpZGVyQ29vcmRzID0gdGhpcy5fZWxmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYW0tc2xpZGVyJylbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5zbGlkZXJMZW5ndGggPSBzbGlkZXJDb29yZHMud2lkdGg7XG4gICAgdGhpcy5zbGlkZXJTdGFydCA9IHNsaWRlckNvb3Jkcy5sZWZ0O1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU2xpZGVySGFuZGxlLCBuem0tc2xpZGVyLWhhbmRsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXItaGFuZGxlLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJIYW5kbGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGxlZnQ6IG51bWJlcjtcblxuICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgX3N0ZXA6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWFya3M6IG9iamVjdCA9IHt9O1xuICBwcml2YXRlIF9oYW5kbGVTdHlsZTogb2JqZWN0O1xuICBwcml2YXRlIF9zbGlkZXJMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc2xpZGVyU3RhcnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWluQm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4Qm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRYOiBudW1iZXI7XG4gIHByaXZhdGUgX2lzRHJhZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9oYW5kbGVTdGF0dXM6IHN0cmluZztcbiAgcHJpdmF0ZSBfaGFuZGxlT2Zmc2V0WDogbnVtYmVyO1xuICBwcml2YXRlIF9vbGRWYWx1ZTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtaW5Cb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWluQm91bmQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWF4Qm91bmQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heEJvdW5kID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLmxlZnQgPSB0aGlzLmNhbGNPZmZzZXQodGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzbGlkZXJMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3NsaWRlckxlbmd0aCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzbGlkZXJTdGFydCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc2xpZGVyU3RhcnQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaGFuZGxlU3R5bGUoKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3R5bGU7XG4gIH1cbiAgc2V0IGhhbmRsZVN0eWxlKHZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLl9oYW5kbGVTdHlsZSA9IHZhbHVlO1xuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25BZnRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qIMOmwonCi8OlworCv8OmwpPCjcOkwr3CnCAqL1xuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgcGFuc3RhcnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3N0YXJ0WCA9IGV2ZW50ICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICB0aGlzLl9oYW5kbGVTdGF0dXMgPSAnc3RhcnQnO1xuICAgICAgdGhpcy5faXNEcmFnaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnLCBbJyRldmVudCddKVxuICBwYW5tb3ZlKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMuX2lzRHJhZ2luZykge1xuICAgICAgY29uc3QgcG9zID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIHRoaXMuX3ZhbHVlID0gTWF0aC5yb3VuZCh0aGlzLmNhbGNWYWx1ZUJ5UG9zKHBvcykpO1xuICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5jYWxjT2Zmc2V0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9vbGRWYWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICBwYW5lbmQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5faXNEcmFnaW5nKSB7XG4gICAgICB0aGlzLl9oYW5kbGVTdGF0dXMgPSAnZW5kJztcbiAgICAgIHRoaXMuX2lzRHJhZ2luZyA9IGZhbHNlO1xuICAgICAgY29uc3QgcG9zID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIHRoaXMuX3ZhbHVlID0gTWF0aC5yb3VuZCh0aGlzLmNhbGNWYWx1ZUJ5UG9zKHBvcykpO1xuICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5jYWxjT2Zmc2V0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMub25BZnRlckNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIG1vdXNlRG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMuaXNNb3VzZVRhcmdldChldmVudCkpIHtcbiAgICAgIHRoaXMuX3N0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICB0aGlzLl9oYW5kbGVTdGF0dXMgPSAnc3RhcnQnO1xuICAgICAgdGhpcy5faXNEcmFnaW5nID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZVVwLCBmYWxzZSk7XG4gICAgICB0aGlzLnBhdXNlRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBtb3VzZU1vdmUgPSBldmVudCA9PiB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLl9pc0RyYWdpbmcpIHtcbiAgICAgIHRoaXMucGF1c2VFdmVudChldmVudCk7XG4gICAgICBjb25zdCBwb3MgPSBldmVudC5jbGllbnRYO1xuICAgICAgdGhpcy5fdmFsdWUgPSBNYXRoLnJvdW5kKHRoaXMuY2FsY1ZhbHVlQnlQb3MocG9zKSk7XG4gICAgICB0aGlzLmxlZnQgPSB0aGlzLmNhbGNPZmZzZXQodGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX29sZFZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICB0aGlzLl9vbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBtb3VzZVVwID0gZXZlbnQgPT4ge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5faXNEcmFnaW5nKSB7XG4gICAgICB0aGlzLl9oYW5kbGVTdGF0dXMgPSAnZW5kJztcbiAgICAgIHRoaXMuX2lzRHJhZ2luZyA9IGZhbHNlO1xuICAgICAgY29uc3QgcG9zID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHRoaXMuX3ZhbHVlID0gTWF0aC5yb3VuZCh0aGlzLmNhbGNWYWx1ZUJ5UG9zKHBvcykpO1xuICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5jYWxjT2Zmc2V0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMub25BZnRlckNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgY2FsY1ZhbHVlQnlQb3MocG9zKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gcG9zIC0gdGhpcy5fc2xpZGVyU3RhcnQ7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jYWxjVmFsdWUob2Zmc2V0KTtcbiAgICBpZiAodmFsdWUgPD0gdGhpcy5fbWluQm91bmQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5fbWluQm91bmQ7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA+PSB0aGlzLl9tYXhCb3VuZCkge1xuICAgICAgdmFsdWUgPSB0aGlzLl9tYXhCb3VuZDtcbiAgICB9XG4gICAgY29uc3QgY2xvc2VzdFBvaW50ID0gdGhpcy5nZXRDbG9zZXN0UG9pbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9zdGVwID09PSBudWxsID8gY2xvc2VzdFBvaW50IDogcGFyc2VGbG9hdChjbG9zZXN0UG9pbnQudG9GaXhlZCh0aGlzLmdldFByZWNpc2lvbih0aGlzLl9zdGVwKSkpO1xuICB9XG5cbiAgY2FsY1ZhbHVlKG9mZnNldCkge1xuICAgIGNvbnN0IHJhdGlvID0gTWF0aC5hYnMoTWF0aC5tYXgob2Zmc2V0LCAwKSAvIHRoaXMuX3NsaWRlckxlbmd0aCk7XG4gICAgY29uc3QgdmFsdWUgPSByYXRpbyAqICh0aGlzLl9tYXggLSB0aGlzLl9taW4pICsgdGhpcy5fbWluO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGdldENsb3Nlc3RQb2ludCh2YWwpIHtcbiAgICBjb25zdCBwb2ludHMgPSBPYmplY3Qua2V5cyh0aGlzLl9tYXJrcykubWFwKHBhcnNlRmxvYXQpO1xuICAgIGlmICh0aGlzLl9zdGVwICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjbG9zZXN0U3RlcCA9IE1hdGgucm91bmQoKHZhbCAtIHRoaXMuX21pbikgLyB0aGlzLl9zdGVwKSAqIHRoaXMuX3N0ZXAgKyB0aGlzLl9taW47XG4gICAgICBwb2ludHMucHVzaChjbG9zZXN0U3RlcCk7XG4gICAgfVxuICAgIGNvbnN0IGRpZmZzID0gcG9pbnRzLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgICAgcmV0dXJuIE1hdGguYWJzKHZhbCAtIHBvaW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcG9pbnRzW2RpZmZzLmluZGV4T2YoTWF0aC5taW4uYXBwbHkoTWF0aCwgdGhpcy50b0NvbnN1bWFibGVBcnJheShkaWZmcykpKV07XG4gIH1cblxuICBnZXRQcmVjaXNpb24oc3RlcCkge1xuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLnRvU3RyaW5nKCk7XG4gICAgbGV0IHByZWNpc2lvbiA9IDA7XG4gICAgaWYgKHN0ZXBTdHJpbmcuaW5kZXhPZignLicpID49IDApIHtcbiAgICAgIHByZWNpc2lvbiA9IHN0ZXBTdHJpbmcubGVuZ3RoIC0gc3RlcFN0cmluZy5pbmRleE9mKCcuJykgLSAxO1xuICAgIH1cbiAgICByZXR1cm4gcHJlY2lzaW9uO1xuICB9XG5cbiAgY2FsY09mZnNldCh2YWx1ZSkge1xuICAgIGNvbnN0IHJhdGlvID0gKHZhbHVlIC0gdGhpcy5fbWluKSAvICh0aGlzLl9tYXggLSB0aGlzLl9taW4pO1xuICAgIHJldHVybiByYXRpbyAqIDEwMDtcbiAgfVxuXG4gIHBhdXNlRXZlbnQoZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgaXNNb3VzZVRhcmdldChldmVudCkge1xuICAgIGxldCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgbGV0IHBhcmVudEZvdW5kID0gZmFsc2U7XG4gICAgd2hpbGUgKHRhcmdldCAhPT0gbnVsbCAmJiAhcGFyZW50Rm91bmQpIHtcbiAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuX2VsZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHBhcmVudEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50Rm91bmQ7XG4gIH1cblxuICB0b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICBjb25zdCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycjI7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5fZWxmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5tb3VzZURvd24sIGZhbHNlKTtcbiAgICB0aGlzLl9oYW5kbGVPZmZzZXRYID0gdGhpcy5fZWxmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueDtcbiAgICB0aGlzLmxlZnQgPSB0aGlzLmNhbGNPZmZzZXQodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMuX21pbkJvdW5kID0gdGhpcy5fbWluQm91bmQgPT09IHVuZGVmaW5lZCA/IHRoaXMuX21pbiA6IHRoaXMuX21pbkJvdW5kO1xuICAgIHRoaXMuX21heEJvdW5kID0gdGhpcy5fbWF4Qm91bmQgPT09IHVuZGVmaW5lZCA/IHRoaXMuX21heCA6IHRoaXMuX21heEJvdW5kO1xuICAgIHRoaXMub25BZnRlckNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCwgZmFsc2UpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBBZnRlclZpZXdJbml0LFxuICBIb3N0QmluZGluZyxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1NsaWRlck1hcmtzLCBuem0tc2xpZGVyLW1hcmtzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci1tYXJrcy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyTWFya3MgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBtYXJrQXJyYXk6IEFycmF5PGFueT4gPSBbXTtcblxuICBwcml2YXRlIF9taW46IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX21heDogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIF9tYXJrczogb2JqZWN0ID0ge307XG4gIHByaXZhdGUgX2luY2x1ZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lOiBzdHJpbmcgPSAnYW0tc2xpZGVyLW1hcmsnO1xuICBwcml2YXRlIF91cHBlckJvdW5kOiBudW1iZXI7XG4gIHByaXZhdGUgX2xvd2VyQm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmFuZ2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWFya1dpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlIDw9IHRoaXMuX21heCkge1xuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSA+PSB0aGlzLl9taW4pIHtcbiAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWFya3ModmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuX21hcmtzID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGluY2x1ZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5jbHVkZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdXBwZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLl91cHBlckJvdW5kKSB7XG4gICAgICB0aGlzLl91cHBlckJvdW5kID0gdmFsdWU7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNscygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbG93ZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLmxvd2VyQm91bmQpIHtcbiAgICAgIHRoaXMuX2xvd2VyQm91bmQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2xzKCk7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25BZnRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygpXG4gIGdldCBjbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxmOiBFbGVtZW50UmVmKSB7fVxuXG4gIGdldE1hcmtzKG1hcmtzS2V5cykge1xuICAgIHRoaXMubWFya0FycmF5ID0gW107XG4gICAgbWFya3NLZXlzXG4gICAgICAubWFwKHBhcnNlRmxvYXQpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgICAubWFwKHBvaW50ID0+IHtcbiAgICAgICAgY29uc3QgbWFya0l0ZW0gPSB7XG4gICAgICAgICAgbWFya0xhYmVsOiAnJyxcbiAgICAgICAgICBwb2ludDogJycsXG4gICAgICAgICAgY2xhc3NOYW1lOiB7fSxcbiAgICAgICAgICBzdHlsZToge31cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWFya1BvaW50ID0gdGhpcy5fbWFya3NbcG9pbnRdO1xuICAgICAgICBjb25zdCBtYXJrUG9pbnRJc09iamVjdCA9IHR5cGVvZiBtYXJrUG9pbnQgPT09ICdvYmplY3QnO1xuICAgICAgICBjb25zdCBtYXJrTGFiZWwgPSBtYXJrUG9pbnRJc09iamVjdCA/IG1hcmtQb2ludC5sYWJlbCA6IG1hcmtQb2ludDtcbiAgICAgICAgaWYgKCFtYXJrTGFiZWwgJiYgbWFya0xhYmVsICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPVxuICAgICAgICAgICghdGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPT09IHRoaXMuX3VwcGVyQm91bmQpIHx8XG4gICAgICAgICAgKHRoaXMuX2luY2x1ZGVkICYmIHBvaW50IDw9IHRoaXMuX3VwcGVyQm91bmQgJiYgcG9pbnQgPj0gdGhpcy5fbG93ZXJCb3VuZCk7XG4gICAgICAgIGNvbnN0IG1hcmtDbGFzc05hbWUgPSB7XG4gICAgICAgICAgW2Ake3RoaXMuX2NsYXNzTmFtZX0tdGV4dGBdOiB0cnVlLFxuICAgICAgICAgIFtgJHt0aGlzLl9jbGFzc05hbWV9LXRleHQtYWN0aXZlYF06IGlzQWN0aXZlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJvdHRvbVN0eWxlID0ge1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogJy01MCUnLFxuICAgICAgICAgIGJvdHRvbTogYCR7KChwb2ludCAtIHRoaXMuX21pbikgLyB0aGlzLl9yYW5nZSkgKiAxMDB9JWBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGVmdFN0eWxlID0ge1xuICAgICAgICAgIHdpZHRoOiBgJHt0aGlzLl9tYXJrV2lkdGh9JWAsXG4gICAgICAgICAgbWFyZ2luTGVmdDogYCR7LXRoaXMuX21hcmtXaWR0aCAvIDJ9JWAsXG4gICAgICAgICAgbGVmdDogYCR7KChwb2ludCAtIHRoaXMuX21pbikgLyB0aGlzLl9yYW5nZSkgKiAxMDB9JWBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBsZWZ0U3R5bGU7XG4gICAgICAgIGNvbnN0IG1hcmtTdHlsZSA9IG1hcmtQb2ludElzT2JqZWN0ID8geyAuLi5zdHlsZSwgLi4ubWFya1BvaW50LnN0eWxlIH0gOiBzdHlsZTtcbiAgICAgICAgbWFya0l0ZW0ubWFya0xhYmVsID0gbWFya0xhYmVsO1xuICAgICAgICBtYXJrSXRlbS5wb2ludCA9IHBvaW50O1xuICAgICAgICBtYXJrSXRlbS5jbGFzc05hbWUgPSBPYmplY3Qua2V5cyhtYXJrQ2xhc3NOYW1lKS5qb2luKCcgJyk7XG4gICAgICAgIG1hcmtJdGVtLnN0eWxlID0gbWFya1N0eWxlO1xuICAgICAgICB0aGlzLm1hcmtBcnJheS5wdXNoKG1hcmtJdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0QWN0aXZlQ2xzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tYXJrQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5tYXJrQXJyYXlbaV0ucG9pbnQ7XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9XG4gICAgICAgICghdGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPT09IHRoaXMuX3VwcGVyQm91bmQpIHx8XG4gICAgICAgICh0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA8PSB0aGlzLl91cHBlckJvdW5kICYmIHBvaW50ID49IHRoaXMuX2xvd2VyQm91bmQpO1xuICAgICAgdGhpcy5tYXJrQXJyYXlbaV0uY2xhc3NOYW1lID0ge1xuICAgICAgICBbYCR7dGhpcy5fY2xhc3NOYW1lfS10ZXh0YF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLl9jbGFzc05hbWV9LXRleHQtYWN0aXZlYF06IGlzQWN0aXZlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHNldE1hcmtzTGFibGUoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcmtBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWFya0VsZSA9IHRoaXMuX2VsZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5fY2xhc3NOYW1lICsgJy10ZXh0JylbaV07XG4gICAgICBtYXJrRWxlLmlubmVySFRNTCA9IHRoaXMubWFya0FycmF5W2ldLm1hcmtMYWJlbDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBtYXJrc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9tYXJrcyk7XG4gICAgY29uc3QgbWFya3NDb3VudCA9IG1hcmtzS2V5cy5sZW5ndGg7XG4gICAgY29uc3QgdW5pdCA9IG1hcmtzQ291bnQgPiAxID8gMTAwIC8gKG1hcmtzQ291bnQgLSAxKSA6IDEwMDtcbiAgICB0aGlzLl9tYXJrV2lkdGggPSB1bml0ICogMC45O1xuICAgIHRoaXMuX3JhbmdlID0gdGhpcy5fbWF4IC0gdGhpcy5fbWluO1xuICAgIHRoaXMuZ2V0TWFya3MobWFya3NLZXlzKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnNldE1hcmtzTGFibGUoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBIb3N0QmluZGluZywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU2xpZGVyU3RlcHMsIG56bS1zbGlkZXItc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJTdGVwcyBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByZWZpeENscyA9ICdhbS1zbGlkZXInO1xuICBzdGVwQXJyYXkgPSBbXTtcblxuICBwcml2YXRlIF9taW46IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX21heDogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIF9zdGVwOiBudW1iZXI7XG4gIHByaXZhdGUgX21hcmtzOiBvYmplY3QgPSB7fTtcbiAgcHJpdmF0ZSBfaW5jbHVkZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF91cHBlckJvdW5kOiBudW1iZXI7XG4gIHByaXZhdGUgX2xvd2VyQm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZG90czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kb3RTdHlsZTogb2JqZWN0O1xuICBwcml2YXRlIF9hY3RpdmVEb3RTdHlsZTogb2JqZWN0O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSA8PSB0aGlzLl9tYXgpIHtcbiAgICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgPj0gdGhpcy5fbWluKSB7XG4gICAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1hcmtzKHZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLl9tYXJrcyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGluY2x1ZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5jbHVkZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZG90cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RvdHMgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdXBwZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IHRoaXMuX3VwcGVyQm91bmQpIHtcbiAgICAgIHRoaXMuX3VwcGVyQm91bmQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2xzKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsb3dlckJvdW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gdGhpcy5sb3dlckJvdW5kKSB7XG4gICAgICB0aGlzLl9sb3dlckJvdW5kID0gdmFsdWU7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNscygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygpXG4gIGdldCBjbGFzcygpIHtcbiAgICByZXR1cm4gJ2FtLXNsaWRlci1zdGVwJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZjogRWxlbWVudFJlZikge31cblxuICBjYWxQb2ludHMoKSB7XG4gICAgY29uc3QgcG9pbnRzID0gT2JqZWN0LmtleXModGhpcy5fbWFya3MpLm1hcChwYXJzZUZsb2F0KTtcbiAgICBpZiAodGhpcy5fZG90cykge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX21pbjsgaSA8PSB0aGlzLl9tYXg7IGkgPSBpICsgdGhpcy5fc3RlcCkge1xuICAgICAgICBpZiAocG9pbnRzLmluZGV4T2YoaSkgPCAwKSB7XG4gICAgICAgICAgcG9pbnRzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvaW50cztcbiAgfVxuXG4gIGdldFN0ZXBzKHBvaW50cykge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fbWF4IC0gdGhpcy5fbWluO1xuICAgIHRoaXMuc3RlcEFycmF5ID0gW107XG4gICAgcG9pbnRzLm1hcChwb2ludCA9PiB7XG4gICAgICBjb25zdCBzdGVwSXRlbSA9IHtcbiAgICAgICAgc3RlcFN0eWxlOiB7fSxcbiAgICAgICAgc3RlcENsYXNzOiB7fSxcbiAgICAgICAgcG9pbnQ6IG51bGxcbiAgICAgIH07XG4gICAgICBjb25zdCBvZmZzZXQgPSBgJHsoTWF0aC5hYnMocG9pbnQgLSB0aGlzLl9taW4pIC8gcmFuZ2UpICogMTAwfSVgO1xuICAgICAgY29uc3QgaXNBY3RpdmVkID1cbiAgICAgICAgKCF0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA9PT0gdGhpcy5fdXBwZXJCb3VuZCkgfHxcbiAgICAgICAgKHRoaXMuX2luY2x1ZGVkICYmIHBvaW50IDw9IHRoaXMuX3VwcGVyQm91bmQgJiYgcG9pbnQgPj0gdGhpcy5fbG93ZXJCb3VuZCk7XG4gICAgICBsZXQgc3R5bGUgPSB7IGxlZnQ6IG9mZnNldCwgLi4udGhpcy5fZG90U3R5bGUgfTtcbiAgICAgIGlmIChpc0FjdGl2ZWQpIHtcbiAgICAgICAgc3R5bGUgPSB7IC4uLnN0eWxlLCAuLi50aGlzLl9hY3RpdmVEb3RTdHlsZSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb2ludENsYXNzTmFtZSA9IHtcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kb3RgXTogdHJ1ZSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kb3QtYWN0aXZlYF06IGlzQWN0aXZlZFxuICAgICAgfTtcbiAgICAgIHN0ZXBJdGVtLnBvaW50ID0gcG9pbnQ7XG4gICAgICBzdGVwSXRlbS5zdGVwU3R5bGUgPSBzdHlsZTtcbiAgICAgIHN0ZXBJdGVtLnN0ZXBDbGFzcyA9IHBvaW50Q2xhc3NOYW1lO1xuICAgICAgdGhpcy5zdGVwQXJyYXkucHVzaChzdGVwSXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRBY3RpdmVDbHMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXBBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnN0ZXBBcnJheVtpXS5wb2ludDtcbiAgICAgIGNvbnN0IGlzQWN0aXZlZCA9XG4gICAgICAgICghdGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPT09IHRoaXMuX3VwcGVyQm91bmQpIHx8XG4gICAgICAgICh0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA8PSB0aGlzLl91cHBlckJvdW5kICYmIHBvaW50ID49IHRoaXMuX2xvd2VyQm91bmQpO1xuICAgICAgdGhpcy5zdGVwQXJyYXlbaV0uc3RlcENsYXNzID0ge1xuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRvdGBdOiB0cnVlLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRvdC1hY3RpdmVgXTogaXNBY3RpdmVkXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuY2FsUG9pbnRzKCk7XG4gICAgdGhpcy5nZXRTdGVwcyhwb2ludHMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU2xpZGVyVHJhY2ssIG56bS1zbGlkZXItdHJhY2snLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLXRyYWNrLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJUcmFjayBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByZWZpeENscyA9ICdhbS1zbGlkZXInO1xuICBlbFN0eWxlOiBvYmplY3Q7XG5cbiAgcHJpdmF0ZSBfY2xhc3NOYW1lOiBvYmplY3Q7XG4gIHByaXZhdGUgX2luY2x1ZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfb2Zmc2V0OiBudW1iZXI7XG4gIHByaXZhdGUgX2xlbmd0aDogbnVtYmVyO1xuICBwcml2YXRlIF9zdHlsZTogb2JqZWN0O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjbGFzc05hbWUoKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICB9XG4gIHNldCBjbGFzc05hbWUodmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuX2NsYXNzTmFtZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpbmNsdWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZWQ7XG4gIH1cbiAgc2V0IGluY2x1ZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5jbHVkZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb2Zmc2V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vZmZzZXQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZW5ndGggPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc3R5bGUodmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuX3N0eWxlID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGNvbnN0IHBvc2l0b25TdHlsZSA9IHtcbiAgICAgIGxlZnQ6IGAke3RoaXMuX29mZnNldH0lYCxcbiAgICAgIHdpZHRoOiBgJHt0aGlzLl9sZW5ndGh9JWBcbiAgICB9O1xuICAgIHRoaXMuZWxTdHlsZSA9IHtcbiAgICAgIC4uLnRoaXMuX3N0eWxlLFxuICAgICAgLi4ucG9zaXRvblN0eWxlXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsaWRlciB9IGZyb20gJy4vc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2xpZGVySGFuZGxlIH0gZnJvbSAnLi9zbGlkZXItaGFuZGxlL3NsaWRlci1oYW5kbGUuY29tcG9uZW50JztcbmltcG9ydCB7IFNsaWRlck1hcmtzIH0gZnJvbSAnLi9zbGlkZXItbWFya3Mvc2xpZGVyLW1hcmtzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGlkZXJTdGVwcyB9IGZyb20gJy4vc2xpZGVyLXN0ZXBzL3NsaWRlci1zdGVwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xpZGVyVHJhY2sgfSBmcm9tICcuL3NsaWRlci10cmFjay9zbGlkZXItdHJhY2suY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW1NsaWRlciAsIFNsaWRlckhhbmRsZSAsIFNsaWRlck1hcmtzICwgU2xpZGVyU3RlcHMgLCBTbGlkZXJUcmFja10sXG4gIGRlY2xhcmF0aW9uczogW1NsaWRlciAsIFNsaWRlckhhbmRsZSAsIFNsaWRlck1hcmtzICwgU2xpZGVyU3RlcHMgLCBTbGlkZXJUcmFja10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlck1vZHVsZSB7fVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi9yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNsaWRlck1vZHVsZSB9IGZyb20gJy4uL3NsaWRlci9zbGlkZXIubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW1JhbmdlXSxcbiAgZGVjbGFyYXRpb25zOiBbUmFuZ2VdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTbGlkZXJNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlTW9kdWxlIHt9XG4iLCJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVGVtcGxhdGVSZWYsXG4gIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvY2FsZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uL2xvY2FsZS1wcm92aWRlci9sb2NhbGUtcHJvdmlkZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1BhZ2luYXRpb24sIG56bS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByZWZpeENscyA9ICdhbS1wYWdpbmF0aW9uJztcblxuICBwcml2YXRlIF9sb2NhbGU6IG9iamVjdCA9IHt9O1xuICBwcml2YXRlIF91bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIG1vZGU6IHN0cmluZyA9ICdidXR0b24nO1xuICBASW5wdXQoKVxuICBjdXJyZW50OiBudW1iZXIgPSAxO1xuICBASW5wdXQoKVxuICB0b3RhbDogbnVtYmVyID0gMDtcbiAgQElucHV0KClcbiAgc2ltcGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgfVxuICBzZXQgbG9jYWxlKHYpIHtcbiAgICB0aGlzLl9sb2NhbGUgPSB2O1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvY2FsZVByb3ZpZGVyU2VydmljZTogTG9jYWxlUHJvdmlkZXJTZXJ2aWNlKSB7fVxuXG4gIGlzVGVtcGxhdGVSZWYoa2V5KSB7XG4gICAgcmV0dXJuIDxhbnk+a2V5IGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBvbkNsaWNrKHA6IG51bWJlcikge1xuICAgIHRoaXMuY3VycmVudCA9IHA7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHApO1xuICB9XG5cbiAgZ2V0TnVtYmVyKHA6IG51bWJlcik6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgQXJyYXkocCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9sb2NhbGVQcm92aWRlclNlcnZpY2UubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZVByb3ZpZGVyU2VydmljZS5nZXRMb2NhbGVTdWJPYmooJ1BhZ2luYXRpb24nKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJy4uL2ZsZXgvZmxleC5tb2R1bGUnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXJNb2R1bGUgfSBmcm9tICcuLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1dHRvbk1vZHVsZSwgRmxleE1vZHVsZSwgSWNvbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1BhZ2luYXRpb25Db21wb25lbnRdLFxuICBleHBvcnRzOiBbUGFnaW5hdGlvbkNvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW0xvY2FsZVByb3ZpZGVyTW9kdWxlXVxufSlcblxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Nb2R1bGUge1xufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1RhZywgbnptLXRhZycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWcuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuXG5leHBvcnQgY2xhc3MgVGFnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tdGFnJztcbiAgY2xvc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHdyYXBDbHM6IGFueSA9IHt9O1xuXG4gIHByaXZhdGUgX3NtYWxsOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nsb3NhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHNtYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9zbWFsbDtcbiAgfVxuICBzZXQgc21hbGwodikge1xuICAgIHRoaXMuX3NtYWxsID0gdjtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNsb3NhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl9jbG9zYWJsZTtcbiAgfVxuICBzZXQgY2xvc2FibGUodikge1xuICAgIHRoaXMuX2Nsb3NhYmxlID0gdjtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHNlbGVjdGVkKHYpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHY7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHYpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBhZnRlckNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBvbkNsaWNrKCkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZCA9ICF0aGlzLl9zZWxlY3RlZDtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWQpO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuXG4gIG9uVGFnQ2xvc2UoKSB7XG4gICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5hZnRlckNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHNldENsYXNzTWFwKCkge1xuICAgIHRoaXMud3JhcENscyA9IHtcbiAgICAgIFt0aGlzLnByZWZpeENsc106IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LW5vcm1hbGBdOiAhdGhpcy5fZGlzYWJsZWQgJiYgKCF0aGlzLl9zZWxlY3RlZCB8fCB0aGlzLl9zbWFsbCB8fCB0aGlzLl9jbG9zYWJsZSksXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXNtYWxsYF06IHRoaXMuX3NtYWxsLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1hY3RpdmVgXTogdGhpcy5fc2VsZWN0ZWQgJiYgIXRoaXMuX2Rpc2FibGVkICYmICF0aGlzLl9zbWFsbCAmJiAhdGhpcy5fY2xvc2FibGUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRpc2FibGVkYF06IHRoaXMuX2Rpc2FibGVkLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jbG9zYWJsZWBdOiB0aGlzLl9jbG9zYWJsZVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnXG5pbXBvcnQgeyBUYWdDb21wb25lbnQgfSBmcm9tICcuL3RhZy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbVGFnQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW1RhZ0NvbXBvbmVudF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBUYWdNb2R1bGUge31cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvY2FsZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uL2xvY2FsZS1wcm92aWRlci9sb2NhbGUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ01lbnUsIG56bS1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLW1lbnUnO1xuICBzdWJNZW51UHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tc3ViLW1lbnUnO1xuICByYWRpb1ByZWZpeENsczogc3RyaW5nID0gJ2FtLXJhZGlvJztcbiAgbXVsdGlTZWxlY3RNZW51QnRuc0Nsczogc3RyaW5nID0gJ2FtLW11bHRpLXNlbGVjdC1idG5zJztcbiAgbWVudVNlbGVjdENvbnRhbmVyUHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tbWVudS1zZWxlY3QtY29udGFpbmVyJztcbiAgZmlyc3RMZXZlbFNlbGVjdFZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gIGhlaWdodFN0eWxlOiBvYmplY3Q7XG4gIHN1Yk1lbnVEYXRhOiBBcnJheTxhbnk+O1xuICBzaG93U2VsZWN0OiBib29sZWFuO1xuICBzdWJTZWxJbml0SXRlbTogb2JqZWN0O1xuICBsb2NhbGU6IG9iamVjdCA9IHt9O1xuXG4gIHByaXZhdGUgX2RhdGE6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASW5wdXQoKVxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBzZXQgZGF0YSh2KSB7XG4gICAgdGhpcy5fZGF0YSA9IHY7XG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGxldmVsOiBudW1iZXIgPSAyO1xuICBASW5wdXQoKVxuICB2YWx1ZTogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKVxuICBoZWlnaHQ6IG51bWJlciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLyAyO1xuICBASW5wdXQoKVxuICBtdWx0aVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbk9rOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9jYWxlUHJvdmlkZXJTZXJ2aWNlOiBMb2NhbGVQcm92aWRlclNlcnZpY2UpIHt9XG5cbiAgb25NZW51T2soKSB7XG4gICAgdGhpcy5vbk9rLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbk1lbnVDYW5jZWwoKSB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBnZXROZXdGc3YoKSB7XG4gICAgbGV0IGZpcnN0VmFsdWUgPSAnJztcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgZmlyc3RWYWx1ZSA9IHRoaXMudmFsdWVbMF0gYXMgc3RyaW5nO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxlbmd0aCAmJiAhdGhpcy5fZGF0YVswXS5pc0xlYWYpIHtcbiAgICAgIGZpcnN0VmFsdWUgPSB0aGlzLl9kYXRhWzBdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIG9uQ2xpY2tGaXJzdExldmVsSXRlbShkYXRhSXRlbSkge1xuICAgIHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlID0gZGF0YUl0ZW0udmFsdWU7XG4gICAgaWYgKGRhdGFJdGVtLmlzTGVhZiAmJiB0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoW2RhdGFJdGVtLnZhbHVlXSk7XG4gICAgfVxuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgfVxuXG4gIG9uQ2xpY2tTdWJNZW51SXRlbShkYXRhSXRlbSkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFNlbGVjdFZhbHVlKGRhdGFJdGVtKTtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIGdldFNlbGVjdFZhbHVlKGRhdGFJdGVtKSB7XG4gICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0gMiAmJiB0aGlzLnZhbHVlWzBdICE9PSB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiBbdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUsIFtkYXRhSXRlbS52YWx1ZV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmxldmVsID09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlblZhbHVlcyA9IEFycmF5LmZyb20odGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBleGlzdEluZGV4ID0gY2hvc2VuVmFsdWVzLmluZGV4T2YoZGF0YUl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgaWYgKGV4aXN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNob3NlblZhbHVlcy5wdXNoKGRhdGFJdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNob3NlblZhbHVlcy5zcGxpY2UoZXhpc3RJbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hvc2VuVmFsdWVzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaG9zZW5WYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMudmFsdWVbMV0pO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RJbmRleCA9IGNob3NlblZhbHVlcy5pbmRleE9mKGRhdGFJdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleGlzdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjaG9zZW5WYWx1ZXMucHVzaChkYXRhSXRlbS52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaG9zZW5WYWx1ZXMuc3BsaWNlKGV4aXN0SW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSwgY2hvc2VuVmFsdWVzXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxldmVsID09PSAyID8gW3RoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlLCBbZGF0YUl0ZW0udmFsdWVdXSA6IFtkYXRhSXRlbS52YWx1ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxldmVsID09PSAyID8gW3RoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlLCBkYXRhSXRlbS52YWx1ZV0gOiBbZGF0YUl0ZW0udmFsdWVdO1xuICB9XG5cbiAgaW5pdERhdGEoKSB7XG4gICAgdGhpcy5zdWJNZW51RGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDIpIHtcbiAgICAgIGxldCBwYXJlbnQgPSB0aGlzLl9kYXRhO1xuICAgICAgaWYgKHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlICYmIHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlICE9PSAnJykge1xuICAgICAgICBwYXJlbnQgPSB0aGlzLl9kYXRhLmZpbHRlcihkYXRhSXRlbSA9PiBkYXRhSXRlbS52YWx1ZSA9PT0gdGhpcy5maXJzdExldmVsU2VsZWN0VmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudFswXSAmJiBwYXJlbnRbMF0uY2hpbGRyZW4gJiYgcGFyZW50WzBdLmlzTGVhZiAhPT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnN1Yk1lbnVEYXRhID0gcGFyZW50WzBdLmNoaWxkcmVuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWJNZW51RGF0YSA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdWJWYWx1ZSA9ICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCAmJiBbLi4udGhpcy52YWx1ZV0pIHx8IFtdO1xuICAgIGlmICh0aGlzLmxldmVsID09PSAyICYmIHN1YlZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIHN1YlZhbHVlLnNoaWZ0KCk7XG4gICAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICBzdWJWYWx1ZSA9IHN1YlZhbHVlWzBdIGFzIHN0cmluZ1tdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3ViU2VsSW5pdEl0ZW0gPSB0aGlzLnN1Yk1lbnVEYXRhLmZpbHRlcihkYXRhSXRlbSA9PiBzdWJWYWx1ZS5pbmRleE9mKGRhdGFJdGVtLnZhbHVlKSAhPT0gLTEpLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMSAmJiB0aGlzLmxldmVsID09PSAyID8gdGhpcy52YWx1ZVswXSA6IG51bGw7XG5cbiAgICB0aGlzLnNob3dTZWxlY3QgPSB0cnVlO1xuICAgIGlmICh0aGlzLmxldmVsID09PSAyICYmIHBhcmVudFZhbHVlICE9PSB0aGlzLmZpcnN0TGV2ZWxTZWxlY3RWYWx1ZSkge1xuICAgICAgdGhpcy5zaG93U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3MoZGF0YUl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhSXRlbVNlbGVjdGVkKGRhdGFJdGVtKSA/IHRoaXMucHJlZml4Q2xzICsgJy1zZWxlY3RlZCcgOiAnJztcbiAgfVxuXG4gIGRhdGFJdGVtU2VsZWN0ZWQoZGF0YUl0ZW0pIHtcbiAgICByZXR1cm4gZGF0YUl0ZW0udmFsdWUgPT09IHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fbG9jYWxlUHJvdmlkZXJTZXJ2aWNlLmxvY2FsZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2xvY2FsZVByb3ZpZGVyU2VydmljZS5nZXRMb2NhbGVTdWJPYmooJ01lbnUnKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlyc3RMZXZlbFNlbGVjdFZhbHVlID0gdGhpcy5nZXROZXdGc3YoKTtcblxuICAgIHRoaXMuaGVpZ2h0U3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0ICsgJ3B4J1xuICAgIH07XG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU3ViTWVudSwgbnptLXN1Yi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Yi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU3ViTWVudUNvbXBvbmVudCB7XG4gIHByZWZpeENscyA9ICdhbS1zdWItbWVudSc7XG5cbiAgcHJpdmF0ZSBfc3ViTWVudVByZWZpeENsczogc3RyaW5nO1xuICBwcml2YXRlIF9yYWRpb1ByZWZpeENsczogc3RyaW5nO1xuICBwcml2YXRlIF9zdWJNZW51RGF0YTtcbiAgcHJpdmF0ZSBfc2hvd1NlbGVjdDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc2VsSXRlbTtcbiAgcHJpdmF0ZSBfbXVsdGlTZWxlY3Q/OiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKVxuICBvblNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASW5wdXQoKVxuICBnZXQgc3ViTWVudVByZWZpeENscygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdWJNZW51UHJlZml4Q2xzO1xuICB9XG4gIHNldCBzdWJNZW51UHJlZml4Q2xzKHY6IHN0cmluZykge1xuICAgIHRoaXMuX3N1Yk1lbnVQcmVmaXhDbHMgPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByYWRpb1ByZWZpeENscygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yYWRpb1ByZWZpeENscztcbiAgfVxuICBzZXQgcmFkaW9QcmVmaXhDbHModjogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmFkaW9QcmVmaXhDbHMgPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzdWJNZW51RGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zdWJNZW51RGF0YTtcbiAgfVxuICBzZXQgc3ViTWVudURhdGEodjogYW55KSB7XG4gICAgdGhpcy5fc3ViTWVudURhdGEgPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzaG93U2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93U2VsZWN0O1xuICB9XG4gIHNldCBzaG93U2VsZWN0KHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93U2VsZWN0ID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgc2VsSXRlbSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zZWxJdGVtO1xuICB9XG4gIHNldCBzZWxJdGVtKHY6IGFueSkge1xuICAgIHRoaXMuX3NlbEl0ZW0gPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtdWx0aVNlbGVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlTZWxlY3Q7XG4gIH1cbiAgc2V0IG11bHRpU2VsZWN0KHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IHY7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgb25DbGljayhkYXRhSXRlbSkge1xuICAgIHRoaXMub25TZWwuZW1pdChkYXRhSXRlbSk7XG4gIH1cblxuICBzZWxlY3RlZChkYXRhSXRlbSkge1xuICAgIHJldHVybiB0aGlzLl9zaG93U2VsZWN0ICYmICh0aGlzLl9zZWxJdGVtLmxlbmd0aCA+IDAgJiYgdGhpcy5fc2VsSXRlbS5pbmRleE9mKGRhdGFJdGVtLnZhbHVlKSAhPT0gLTEpO1xuICB9XG5cbiAgZ2V0Q2xhc3MoZGF0YUl0ZW0pIHtcbiAgICBsZXQgbmFtZSA9IHRoaXMuX3JhZGlvUHJlZml4Q2xzICsgJy1pdGVtICc7XG4gICAgbmFtZSArPSB0aGlzLnNlbGVjdGVkKGRhdGFJdGVtKSA/IHRoaXMuX3N1Yk1lbnVQcmVmaXhDbHMgKyAnLWl0ZW0tc2VsZWN0ZWQnIDogJyc7XG4gICAgbmFtZSArPSBkYXRhSXRlbS5kaXNhYmxlZCA/IHRoaXMuX3N1Yk1lbnVQcmVmaXhDbHMgKyAnLWl0ZW0tZGlzYWJsZWQnIDogJyc7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJy4uL2ZsZXgvZmxleC5tb2R1bGUnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJy4uL2xpc3QvbGlzdC5tb2R1bGUnO1xuaW1wb3J0IHsgUmFkaW9Nb2R1bGUgfSBmcm9tICcuLi9yYWRpby9yYWRpby5tb2R1bGUnO1xuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5tb2R1bGUnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViTWVudUNvbXBvbmVudCB9IGZyb20gJy4vc3ViLW1lbnUvc3ViLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2FsZVByb3ZpZGVyTW9kdWxlIH0gZnJvbSAnLi4vbG9jYWxlLXByb3ZpZGVyL2xvY2FsZS1wcm92aWRlci5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGbGV4TW9kdWxlLCBMaXN0TW9kdWxlLCBSYWRpb01vZHVsZSwgQ2hlY2tib3hNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtNZW51Q29tcG9uZW50LCBTdWJNZW51Q29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbTWVudUNvbXBvbmVudCwgU3ViTWVudUNvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW0xvY2FsZVByb3ZpZGVyTW9kdWxlXVxufSlcblxuZXhwb3J0IGNsYXNzIE1lbnVNb2R1bGUge1xufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSW5wdXQsXG4gIEhvc3RCaW5kaW5nLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBBZnRlclZpZXdDaGVja2VkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdEcmF3ZXIsIG56bS1kcmF3ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1kcmF3ZXInO1xuICBzaWRlYmFyU3R5bGVGaW5hbDogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgY29udGVudFN0eWxlRmluYWw6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIG92ZXJsYXlTdHlsZUZpbmFsOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBzaWRlYmFyV2lkdGg6IG51bWJlciA9IDA7XG4gIHNpZGViYXJIZWlnaHQ6IG51bWJlciA9IDA7XG4gIHNpZGViYXJUb3A6IG51bWJlciA9IDA7XG4gIGRyYWdIYW5kbGVUb3A6IG51bWJlciA9IDA7XG4gIHRvdWNoSWRlbnRpZmllcjogbnVtYmVyID0gbnVsbDtcbiAgdG91Y2hTdGFydFg6IG51bWJlciA9IG51bGw7XG4gIHRvdWNoU3RhcnRZOiBudW1iZXIgPSBudWxsO1xuICB0b3VjaEN1cnJlbnRYOiBudW1iZXIgPSBudWxsO1xuICB0b3VjaEN1cnJlbnRZOiBudW1iZXIgPSBudWxsO1xuICB0b3VjaFN1cHBvcnRlZDogYm9vbGVhbiA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdztcblxuICBwcml2YXRlIF9kb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9wb3NpdGlvbjogc3RyaW5nID0gJ2xlZnQnO1xuXG4gIEBJbnB1dCgpXG4gIHNpZGViYXI6IGFueTtcbiAgQElucHV0KClcbiAgc2lkZWJhclN0eWxlOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBASW5wdXQoKVxuICBjb250ZW50U3R5bGU6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIEBJbnB1dCgpXG4gIG92ZXJsYXlTdHlsZTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgQElucHV0KClcbiAgZHJhZ0hhbmRsZVN0eWxlOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBASW5wdXQoKVxuICB0cmFuc2l0aW9uczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHRvdWNoOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgZW5hYmxlRHJhZ0hhbmRsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGRyYWdUb2dnbGVEaXN0YW5jZTogbnVtYmVyID0gMzA7XG4gIEBJbnB1dCgpXG4gIGdldCBkb2NrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY2tlZDtcbiAgfVxuICBzZXQgZG9ja2VkKHYpIHtcbiAgICB0aGlzLl9kb2NrZWQgPSB2O1xuICAgIHRoaXMuZG9ja2VkQ2xzID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuICBzZXQgb3Blbih2KSB7XG4gICAgdGhpcy5fb3BlbiA9IHY7XG4gICAgdGhpcy5vcGVuQ2xzID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcG9zaXRpb24odikge1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gdjtcbiAgICB0aGlzLnJpZ2h0ID0gZmFsc2U7XG4gICAgdGhpcy5sZWZ0ID0gZmFsc2U7XG4gICAgdGhpcy50b3AgPSBmYWxzZTtcbiAgICB0aGlzLmJvdHRvbSA9IGZhbHNlO1xuICAgIHN3aXRjaCAodikge1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICB0aGlzLnJpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5sZWZ0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0aGlzLnRvcCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdGhpcy5ib3R0b20gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlcicpXG4gIGFtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1kcmF3ZXItbGVmdCcpXG4gIGxlZnQ6IGJvb2xlYW4gPSB0aGlzLl9wb3NpdGlvbiA9PT0gJ2xlZnQnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlci1yaWdodCcpXG4gIHJpZ2h0OiBib29sZWFuID0gdGhpcy5fcG9zaXRpb24gPT09ICdyaWdodCc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZHJhd2VyLXRvcCcpXG4gIHRvcDogYm9vbGVhbiA9IHRoaXMuX3Bvc2l0aW9uID09ICd0b3AnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlci1ib3R0b20nKVxuICBib3R0b206IGJvb2xlYW4gPSB0aGlzLl9wb3NpdGlvbiA9PSAnYm90dG9tJztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1kcmF3ZXItZG9ja2VkJylcbiAgZG9ja2VkQ2xzOiBib29sZWFuID0gdGhpcy5fZG9ja2VkO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlci1vcGVuJylcbiAgb3BlbkNsczogYm9vbGVhbiA9IHRoaXMuX29wZW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgb25PdmVybGF5Q2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgdGhpcy5vbk9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBpc1RvdWNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvdWNoSWRlbnRpZmllciAhPT0gbnVsbDtcbiAgfVxuXG4gIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgIGNvbnN0IHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgdGhpcy50b3VjaElkZW50aWZpZXIgPSB0b3VjaC5pZGVudGlmaWVyO1xuICAgIHRoaXMudG91Y2hTdGFydFggPSB0b3VjaC5jbGllbnRYO1xuICAgIHRoaXMudG91Y2hTdGFydFkgPSB0b3VjaC5jbGllbnRZO1xuICAgIHRoaXMudG91Y2hDdXJyZW50WCA9IHRvdWNoLmNsaWVudFg7XG4gICAgdGhpcy50b3VjaEN1cnJlbnRZID0gdG91Y2guY2xpZW50WTtcbiAgfVxuXG4gIG9uVG91Y2hNb3ZlKGV2KSB7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgZXYuY2hhbmdlZFRvdWNoZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgaWYgKGV2LmNoYW5nZWRUb3VjaGVzW2luZF0uaWRlbnRpZmllciA9PT0gdGhpcy50b3VjaElkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy50b3VjaEN1cnJlbnRYID0gZXYuY2hhbmdlZFRvdWNoZXNbaW5kXS5jbGllbnRYO1xuICAgICAgICB0aGlzLnRvdWNoQ3VycmVudFkgPSBldi5jaGFuZ2VkVG91Y2hlc1tpbmRdLmNsaWVudFk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgb25Ub3VjaEVuZCgpIHtcbiAgICBjb25zdCB0b3VjaFdpZHRoID0gdGhpcy50b3VjaFNpZGViYXJXaWR0aCgpO1xuICAgIGlmIChcbiAgICAgICh0aGlzLl9vcGVuICYmIHRvdWNoV2lkdGggPCB0aGlzLnNpZGViYXJXaWR0aCAtIHRoaXMuZHJhZ1RvZ2dsZURpc3RhbmNlKSB8fFxuICAgICAgKCF0aGlzLl9vcGVuICYmIHRvdWNoV2lkdGggPiB0aGlzLmRyYWdUb2dnbGVEaXN0YW5jZSlcbiAgICApIHtcbiAgICAgIHRoaXMub25PcGVuQ2hhbmdlLmVtaXQoIXRoaXMuX29wZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdWNoSGVpZ2h0ID0gdGhpcy50b3VjaFNpZGViYXJIZWlnaHQoKTtcbiAgICBpZiAoXG4gICAgICAodGhpcy5fb3BlbiAmJiB0b3VjaEhlaWdodCA8IHRoaXMuc2lkZWJhckhlaWdodCAtIHRoaXMuZHJhZ1RvZ2dsZURpc3RhbmNlKSB8fFxuICAgICAgKCF0aGlzLl9vcGVuICYmIHRvdWNoSGVpZ2h0ID4gdGhpcy5kcmFnVG9nZ2xlRGlzdGFuY2UpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uT3BlbkNoYW5nZS5lbWl0KCF0aGlzLl9vcGVuKTtcbiAgICB9XG4gICAgdGhpcy50b3VjaElkZW50aWZpZXIgPSBudWxsO1xuICAgIHRoaXMudG91Y2hTdGFydFggPSBudWxsO1xuICAgIHRoaXMudG91Y2hTdGFydFkgPSBudWxsO1xuICAgIHRoaXMudG91Y2hDdXJyZW50WCA9IG51bGw7XG4gICAgdGhpcy50b3VjaEN1cnJlbnRZID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgc2F2ZVNpZGViYXJTaXplKCkge1xuICAgIGNvbnN0IHNpZGViYXIgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzaWRlYmFyJyk7XG4gICAgY29uc3QgZHJhZ0hhbmRsZSA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2RyYWdIYW5kbGUnKTtcblxuICAgIGNvbnN0IHdpZHRoID0gc2lkZWJhci5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBzaWRlYmFyLm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBzaWRlYmFyVG9wID0gdGhpcy5nZXRPZmZzZXQoc2lkZWJhcikudG9wO1xuICAgIGNvbnN0IGRyYWdIYW5kbGVUb3AgPSB0aGlzLmdldE9mZnNldChkcmFnSGFuZGxlKS50b3A7XG5cbiAgICBpZiAod2lkdGggIT09IHRoaXMuc2lkZWJhcldpZHRoKSB7XG4gICAgICB0aGlzLnNpZGViYXJXaWR0aCA9IHdpZHRoO1xuICAgIH1cbiAgICBpZiAoaGVpZ2h0ICE9PSB0aGlzLnNpZGViYXJIZWlnaHQpIHtcbiAgICAgIHRoaXMuc2lkZWJhckhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gICAgaWYgKHNpZGViYXJUb3AgIT09IHRoaXMuc2lkZWJhclRvcCkge1xuICAgICAgdGhpcy5zaWRlYmFyVG9wID0gc2lkZWJhclRvcDtcbiAgICB9XG4gICAgaWYgKGRyYWdIYW5kbGVUb3AgIT09IHRoaXMuZHJhZ0hhbmRsZVRvcCkge1xuICAgICAgdGhpcy5kcmFnSGFuZGxlVG9wID0gZHJhZ0hhbmRsZVRvcDtcbiAgICB9XG4gIH1cblxuICB0b3VjaFNpZGViYXJXaWR0aCgpIHtcbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIGlmICh0aGlzLl9vcGVuICYmIHdpbmRvdy5pbm5lcldpZHRoIC0gdGhpcy50b3VjaFN0YXJ0WCA8IHRoaXMuc2lkZWJhcldpZHRoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoQ3VycmVudFggPiB0aGlzLnRvdWNoU3RhcnRYKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhcldpZHRoICsgdGhpcy50b3VjaFN0YXJ0WCAtIHRoaXMudG91Y2hDdXJyZW50WDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyV2lkdGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGggLSB0aGlzLnRvdWNoQ3VycmVudFgsIHRoaXMuc2lkZWJhcldpZHRoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgaWYgKHRoaXMuX29wZW4gJiYgdGhpcy50b3VjaFN0YXJ0WCA8IHRoaXMuc2lkZWJhcldpZHRoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoQ3VycmVudFggPiB0aGlzLnRvdWNoU3RhcnRYKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhcldpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNpZGViYXJXaWR0aCAtIHRoaXMudG91Y2hTdGFydFggKyB0aGlzLnRvdWNoQ3VycmVudFg7XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy50b3VjaEN1cnJlbnRYLCB0aGlzLnNpZGViYXJXaWR0aCk7XG4gICAgfVxuICB9XG5cbiAgdG91Y2hTaWRlYmFySGVpZ2h0KCkge1xuICAgIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fb3BlbiAmJlxuICAgICAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIHRoaXMudG91Y2hTdGFydFkgKyB0aGlzLl9lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCA8IHRoaXMuc2lkZWJhckhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoQ3VycmVudFkgPiB0aGlzLnRvdWNoU3RhcnRZKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhckhlaWdodCArIHRoaXMudG91Y2hTdGFydFkgLSB0aGlzLnRvdWNoQ3VycmVudFk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhckhlaWdodDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgLSB0aGlzLnRvdWNoQ3VycmVudFkgKyB0aGlzLl9lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCxcbiAgICAgICAgdGhpcy5zaWRlYmFySGVpZ2h0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIGNvbnN0IHRvdWNoU3RhcnRPZmZzZXRZID0gdGhpcy50b3VjaFN0YXJ0WSAtIHRoaXMuc2lkZWJhclRvcDtcbiAgICAgIGlmICh0aGlzLl9vcGVuICYmIHRvdWNoU3RhcnRPZmZzZXRZIDwgdGhpcy5zaWRlYmFySGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoQ3VycmVudFkgPiB0aGlzLnRvdWNoU3RhcnRZKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhckhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFySGVpZ2h0IC0gdGhpcy50b3VjaFN0YXJ0WSArIHRoaXMudG91Y2hDdXJyZW50WTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnRvdWNoQ3VycmVudFkgLSB0aGlzLmRyYWdIYW5kbGVUb3AsIHRoaXMuc2lkZWJhckhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyU3R5bGUoeyBzaWRlYmFyU3R5bGUsIGlzVG91Y2hpbmcsIG92ZXJsYXlTdHlsZSwgY29udGVudFN0eWxlIH0pIHtcbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICdyaWdodCcgfHwgdGhpcy5fcG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgc2lkZWJhclN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKDAlKWA7XG4gICAgICBzaWRlYmFyU3R5bGUuV2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoMCUpYDtcbiAgICAgIGlmIChpc1RvdWNoaW5nKSB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLnRvdWNoU2lkZWJhcldpZHRoKCkgLyB0aGlzLnNpZGViYXJXaWR0aDtcbiAgICAgICAgLy8gc2xpZGUgb3BlbiB0byB3aGF0IHdlIGRyYWdnZWRcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7KDEgLSBwZXJjZW50YWdlKSAqIDEwMH0lKWA7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7KDEgLSBwZXJjZW50YWdlKSAqIDEwMH0lKWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBzaWRlYmFyU3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoLSR7KDEgLSBwZXJjZW50YWdlKSAqIDEwMH0lKWA7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKC0keygxIC0gcGVyY2VudGFnZSkgKiAxMDB9JSlgO1xuICAgICAgICB9XG4gICAgICAgIG92ZXJsYXlTdHlsZS5vcGFjaXR5ID0gcGVyY2VudGFnZTtcbiAgICAgICAgb3ZlcmxheVN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICB9XG4gICAgICBpZiAoY29udGVudFN0eWxlKSB7XG4gICAgICAgIGNvbnRlbnRTdHlsZVt0aGlzLl9wb3NpdGlvbl0gPSBgJHt0aGlzLnNpZGViYXJXaWR0aH1weGA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5fcG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICBzaWRlYmFyU3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoMCUpYDtcbiAgICAgIHNpZGViYXJTdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgwJSlgO1xuICAgICAgaWYgKGlzVG91Y2hpbmcpIHtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMudG91Y2hTaWRlYmFySGVpZ2h0KCkgLyB0aGlzLnNpZGViYXJIZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBzaWRlYmFyU3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHsoMSAtIHBlcmNlbnRhZ2UpICogMTAwfSUpYDtcbiAgICAgICAgICBzaWRlYmFyU3R5bGUuV2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHsoMSAtIHBlcmNlbnRhZ2UpICogMTAwfSUpYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKC0keygxIC0gcGVyY2VudGFnZSkgKiAxMDB9JSlgO1xuICAgICAgICAgIHNpZGViYXJTdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgtJHsoMSAtIHBlcmNlbnRhZ2UpICogMTAwfSUpYDtcbiAgICAgICAgfVxuICAgICAgICBvdmVybGF5U3R5bGUub3BhY2l0eSA9IHBlcmNlbnRhZ2U7XG4gICAgICAgIG92ZXJsYXlTdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnRTdHlsZSkge1xuICAgICAgICBjb250ZW50U3R5bGVbdGhpcy5fcG9zaXRpb25dID0gYCR7dGhpcy5zaWRlYmFySGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgY29uc3Qgc2lkZWJhclN0eWxlID0geyAuLi50aGlzLnNpZGViYXJTdHlsZSB9O1xuICAgIGNvbnN0IGNvbnRlbnRTdHlsZSA9IHsgLi4udGhpcy5jb250ZW50U3R5bGUgfTtcbiAgICBjb25zdCBvdmVybGF5U3R5bGUgPSB7IC4uLnRoaXMub3ZlcmxheVN0eWxlIH07XG5cbiAgICBpZiAodGhpcy5pc1RvdWNoaW5nKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyU3R5bGUoe1xuICAgICAgICBzaWRlYmFyU3R5bGU6IHNpZGViYXJTdHlsZSxcbiAgICAgICAgaXNUb3VjaGluZzogdHJ1ZSxcbiAgICAgICAgY29udGVudFN0eWxlOiB1bmRlZmluZWQsXG4gICAgICAgIG92ZXJsYXlTdHlsZTogb3ZlcmxheVN0eWxlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2RvY2tlZCkge1xuICAgICAgdGhpcy5kb2NrZWRDbHMgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJTdHlsZSh7XG4gICAgICAgIHNpZGViYXJTdHlsZTogc2lkZWJhclN0eWxlLFxuICAgICAgICBpc1RvdWNoaW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbnRlbnRTdHlsZTogY29udGVudFN0eWxlLFxuICAgICAgICBvdmVybGF5U3R5bGU6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICB0aGlzLm9wZW5DbHMgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJTdHlsZSh7XG4gICAgICAgIHNpZGViYXJTdHlsZTogc2lkZWJhclN0eWxlLFxuICAgICAgICBpc1RvdWNoaW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbnRlbnRTdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBvdmVybGF5U3R5bGU6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBvdmVybGF5U3R5bGUub3BhY2l0eSA9IDE7XG4gICAgICBvdmVybGF5U3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1RvdWNoaW5nKCkgfHwgIXRoaXMudHJhbnNpdGlvbnMpIHtcbiAgICAgIHNpZGViYXJTdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgc2lkZWJhclN0eWxlLldlYmtpdFRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICBjb250ZW50U3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgIG92ZXJsYXlTdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLnNpZGViYXJTdHlsZUZpbmFsID0gc2lkZWJhclN0eWxlO1xuICAgIHRoaXMuY29udGVudFN0eWxlRmluYWwgPSBjb250ZW50U3R5bGU7XG4gICAgdGhpcy5vdmVybGF5U3R5bGVGaW5hbCA9IG92ZXJsYXlTdHlsZTtcbiAgfVxuXG4gIGdldE9mZnNldChlbGUpIHtcbiAgICBsZXQgZWwgPSBlbGU7XG4gICAgbGV0IF94ID0gMDtcbiAgICBsZXQgX3kgPSAwO1xuICAgIHdoaWxlIChlbCAmJiAhaXNOYU4oZWwub2Zmc2V0TGVmdCkgJiYgIWlzTmFOKGVsLm9mZnNldFRvcCkpIHtcbiAgICAgIF94ICs9IGVsLm9mZnNldExlZnQgLSBlbC5zY3JvbGxMZWZ0O1xuICAgICAgX3kgKz0gZWwub2Zmc2V0VG9wIC0gZWwuc2Nyb2xsVG9wO1xuICAgICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRvcDogX3ksIGxlZnQ6IF94IH07XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKCF0aGlzLmlzVG91Y2hpbmcoKSkge1xuICAgICAgdGhpcy5zYXZlU2lkZWJhclNpemUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERyYXdlckNvbXBvbmVudCB9IGZyb20gJy4vZHJhd2VyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtEcmF3ZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbRHJhd2VyQ29tcG9uZW50XVxufSlcblxuZXhwb3J0IGNsYXNzIERyYXdlck1vZHVsZSB7fVxuIiwiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N3aXBlQWN0aW9uLCBuem0tc3dpcGUtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N3aXBlLWFjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU3dpcGVBY3Rpb24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXN3aXBlJztcbiAgd3JhcENsczogb2JqZWN0ID0ge307XG5cbiAgcHJpdmF0ZSBfc3dpcGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVuZWRMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5lZFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2J0bnNMZWZ0V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYnRuc1JpZ2h0V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbmVlZFNob3dMZWZ0OiBib29sZWFuO1xuICBwcml2YXRlIF9uZWVkU2hvd1JpZ2h0OiBib29sZWFuO1xuICBwcml2YXRlIF9zdGFydFg6IG51bWJlcjtcblxuICBAVmlld0NoaWxkKCdsZWZ0QnRuUmVmJylcbiAgbGVmdEJ0blJlZjtcbiAgQFZpZXdDaGlsZCgncmlnaHRCdG5SZWYnKVxuICByaWdodEJ0blJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGVudFJlZicpXG4gIGNvbnRlbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvdmVyUmVmJylcbiAgY292ZXI7XG5cbiAgQElucHV0KClcbiAgbGVmdDogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICBASW5wdXQoKVxuICByaWdodDogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICBASW5wdXQoKVxuICBhdXRvQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpXG4gIG9uT3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHNldENsYXNzTWFwKCkge1xuICAgIHRoaXMud3JhcENscyA9IHtcbiAgICAgIFt0aGlzLnByZWZpeENsc106IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXN3aXBpbmdgXTogdGhpcy5fc3dpcGluZ1xuICAgIH07XG4gIH1cblxuICBvbkNsb3NlU3dpcGUgPSAoKSA9PiB7XG4gICAgaWYgKCEodGhpcy5fb3BlbmVkTGVmdCB8fCB0aGlzLl9vcGVuZWRSaWdodCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9O1xuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9vcGVuZWRMZWZ0IHx8IHRoaXMuX29wZW5lZFJpZ2h0KSB7XG4gICAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnNldEJ0blN0eWxlKDApO1xuICAgIHRoaXMuX29wZW5lZExlZnQgPSBmYWxzZTtcbiAgICB0aGlzLl9vcGVuZWRSaWdodCA9IGZhbHNlO1xuICB9XG5cbiAgc2V0QnRuU3R5bGUodmFsdWUpIHtcbiAgICBjb25zdCBsaW1pdCA9IHZhbHVlID4gMCA/IHRoaXMuX2J0bnNMZWZ0V2lkdGggOiAtdGhpcy5fYnRuc1JpZ2h0V2lkdGg7XG4gICAgY29uc3QgY29udGVudExlZnQgPSB0aGlzLmdldENvbnRlbnRFYXNpbmcodmFsdWUsIGxpbWl0KTtcbiAgICB0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Y29udGVudExlZnR9cHhgO1xuICAgIHRoaXMuY292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gTWF0aC5hYnModmFsdWUpID4gMCA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgdGhpcy5jb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtjb250ZW50TGVmdH1weGA7XG4gIH1cblxuICBnZXRDb250ZW50RWFzaW5nKHZhbHVlLCBsaW1pdCkge1xuICAgIHJldHVybiBNYXRoLmFicyh2YWx1ZSkgLSBNYXRoLmFicyhsaW1pdCkgPiAwID8gbGltaXQgOiB2YWx1ZTtcbiAgfVxuXG4gIG9uVG91Y2hTdGFydCA9IGUgPT4ge1xuICAgIHRoaXMuX3N0YXJ0WCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB0aGlzLl9zd2lwaW5nID0gdHJ1ZTtcbiAgfTtcblxuICBvblRvdWNoTW92ZShlKSB7XG4gICAgY29uc3QgZGVsdGFYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fc3RhcnRYO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLl9uZWVkU2hvd1JpZ2h0ID0gZGVsdGFYIDwgMCAmJiB0aGlzLnJpZ2h0Lmxlbmd0aCA+IDA7XG4gICAgdGhpcy5fbmVlZFNob3dMZWZ0ID0gZGVsdGFYID4gMCAmJiB0aGlzLmxlZnQubGVuZ3RoID4gMDtcbiAgICBpZiAodGhpcy5sZWZ0QnRuUmVmKSB7XG4gICAgICB0aGlzLmxlZnRCdG5SZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gdGhpcy5fbmVlZFNob3dSaWdodCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnO1xuICAgIH1cbiAgICBpZiAodGhpcy5yaWdodEJ0blJlZikge1xuICAgICAgdGhpcy5yaWdodEJ0blJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLl9uZWVkU2hvd0xlZnQgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJztcbiAgICB9XG4gICAgdGhpcy5zZXRCdG5TdHlsZShkZWx0YVgpO1xuICB9XG5cbiAgb25Ub3VjaEVuZChlKSB7XG4gICAgY29uc3QgZGVsdGFYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fc3RhcnRYO1xuXG4gICAgY29uc3QgbmVlZE9wZW5SaWdodCA9IHRoaXMuX25lZWRTaG93UmlnaHQgJiYgTWF0aC5hYnMoZGVsdGFYKSA+IHRoaXMuX2J0bnNSaWdodFdpZHRoIC8gMjtcbiAgICBjb25zdCBuZWVkT3BlbkxlZnQgPSB0aGlzLl9uZWVkU2hvd0xlZnQgJiYgTWF0aC5hYnMoZGVsdGFYKSA+IHRoaXMuX2J0bnNMZWZ0V2lkdGggLyAyO1xuXG4gICAgaWYgKG5lZWRPcGVuUmlnaHQpIHtcbiAgICAgIHRoaXMuZG9PcGVuUmlnaHQoKTtcbiAgICB9IGVsc2UgaWYgKG5lZWRPcGVuTGVmdCkge1xuICAgICAgdGhpcy5kb09wZW5MZWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5fc3dpcGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX25lZWRTaG93TGVmdCA9IGZhbHNlO1xuICAgIHRoaXMuX25lZWRTaG93UmlnaHQgPSBmYWxzZTtcbiAgfVxuXG4gIGRvT3BlbkxlZnQoKSB7XG4gICAgdGhpcy5vcGVuKHRoaXMuX2J0bnNMZWZ0V2lkdGgsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIGRvT3BlblJpZ2h0KCkge1xuICAgIHRoaXMub3BlbigtdGhpcy5fYnRuc1JpZ2h0V2lkdGgsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIG9uQnRuQ2xpY2soZXYsIGJ0bikge1xuICAgIGNvbnN0IG9uUHJlc3MgPSBidG4ub25QcmVzcztcbiAgICBpZiAob25QcmVzcykge1xuICAgICAgb25QcmVzcyhldik7XG4gICAgfVxuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW4odmFsdWUsIG9wZW5lZExlZnQsIG9wZW5lZFJpZ2h0KSB7XG4gICAgdGhpcy5vbk9wZW4uZW1pdCgpO1xuICAgIHRoaXMuX29wZW5lZExlZnQgPSBvcGVuZWRMZWZ0O1xuICAgIHRoaXMuX29wZW5lZFJpZ2h0ID0gb3BlbmVkUmlnaHQ7XG4gICAgdGhpcy5zZXRCdG5TdHlsZSh2YWx1ZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fYnRuc0xlZnRXaWR0aCA9IHRoaXMubGVmdEJ0blJlZiA/IHRoaXMubGVmdEJ0blJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICB0aGlzLl9idG5zUmlnaHRXaWR0aCA9IHRoaXMucmlnaHRCdG5SZWYgPyB0aGlzLnJpZ2h0QnRuUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggOiAwO1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25DbG9zZVN3aXBlLCB0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25DbG9zZVN3aXBlLCB0cnVlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTd2lwZUFjdGlvbiB9IGZyb20gJy4vc3dpcGUtYWN0aW9uLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbU3dpcGVBY3Rpb25dLFxuICBkZWNsYXJhdGlvbnM6IFtTd2lwZUFjdGlvbl0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuXG5leHBvcnQgY2xhc3MgU3dpcGVBY3Rpb25Nb2R1bGUgeyB9XG4iLCJpbXBvcnQge1xuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgQ29tcG9uZW50LFxuICBUZW1wbGF0ZVJlZixcbiAgSW5wdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvciB7XG4gIGFjdGl2YXRlPzogYW55O1xuICBkZWFjdGl2YXRlPzogYW55O1xuICByZWxlYXNlPzogYW55O1xuICBmaW5pc2g/OiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1B1bGxUb1JlZnJlc2gsIG56bS1wdWxsLXRvLXJlZnJlc2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHVsbC10by1yZWZyZXNoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQdWxsVG9SZWZyZXNoQ29tcG9uZW50IHtcbiAgdHJhbnN0aW9uQ2xzOiBhbnkgPSB7fTtcbiAgc3R5bGU6IG9iamVjdCA9IHtcbiAgICAnLXdlYmtpdC10cmFuc2Zvcm0nOiAndHJhbnNsYXRlM2QoIDAsIDAsIDAgKScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoIDAsIDAsIDAgKSdcbiAgfTtcbiAgc3RhcnRZOiBudW1iZXI7XG4gIHN0YXRlOiBhbnkgPSB7XG4gICAgY3VyclN0OiAnZGVhY3RpdmF0ZScsXG4gICAgZHJhZzogZmFsc2VcbiAgfTtcblxuICBwcml2YXRlIF9pbmRpY2F0b3I6IEluZGljYXRvciA9IHtcbiAgICBhY3RpdmF0ZTogJ8Omwp3CvsOlwrzCgMOnwqvCi8Olwo3Cs8OlwojCt8OmwpbCsCcsXG4gICAgZGVhY3RpdmF0ZTogJ8OkwrjCi8OmwovCicOlwo/Cr8OkwrvCpcOlwojCt8OmwpbCsCcsXG4gICAgcmVsZWFzZTogJ8OlwojCt8OmwpbCsMOkwrjCrcOjwoDCgsOjwoDCgsOjwoDCgicsXG4gICAgZmluaXNoOiAnw6XCrsKMw6bCiMKQw6XCiMK3w6bClsKwJ1xuICB9O1xuICBwcml2YXRlIF9kaXJlY3Rpb246IHN0cmluZyA9ICdkb3duJztcbiAgcHJpdmF0ZSBfY2xpZW50SGVpZ2h0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50Q29udGVudEhlaWdodDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZm9vdGVySGVpZ2h0OiBudW1iZXIgPSA1NDtcbiAgcHJpdmF0ZSBfbGFzdGNvbnRlbnRPZmZzZXQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3ZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KHdpbmRvdy5pbm5lckhlaWdodCwgd2luZG93LmlubmVyV2lkdGgpO1xuXG4gIEBWaWV3Q2hpbGQoJ3B1bGxUb1JlZnJlc2gnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgcHJpdmF0ZSBfcHVsbFRvUmVmcmVzaDogVmlld0NvbnRhaW5lclJlZjtcblxuICBASW5wdXQoKVxuICBzY3JvbGxSZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc3RhbmNlVG9SZWZyZXNoOiBudW1iZXIgPSAyNTsgLy/DqMKnwqbDpcKPwpHDpcKIwrfDpsKWwrDDqMK3wp3Dp8KmwrtcbiAgQElucHV0KClcbiAgZGFtcGluZzogbnVtYmVyID0gMTAwOyAvLyDDpMK4wovDpsKLwonDp8KawoTDpsKcwoDDpcKkwqfDqMK3wp3Dp8KmwrtcbiAgQElucHV0KClcbiAgZ2V0IGRpcmVjdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kaXJlY3Rpb247XG4gIH1cbiAgc2V0IGRpcmVjdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGlyZWN0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5yZWZyZXNoVXAgPSB0aGlzLl9kaXJlY3Rpb24gPT09ICd1cCc7XG4gICAgdGhpcy5yZWZyZXNoRG93biA9IHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2Rvd24nO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBpbmRpY2F0b3IoKTogSW5kaWNhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5faW5kaWNhdG9yO1xuICB9XG4gIHNldCBpbmRpY2F0b3IodmFsdWU6IEluZGljYXRvcikge1xuICAgIHRoaXMuX2luZGljYXRvci5hY3RpdmF0ZSA9IHZhbHVlLmFjdGl2YXRlID8gdmFsdWUuYWN0aXZhdGUgOiB0aGlzLl9pbmRpY2F0b3IuYWN0aXZhdGU7XG4gICAgdGhpcy5faW5kaWNhdG9yLmRlYWN0aXZhdGUgPSB2YWx1ZS5kZWFjdGl2YXRlID8gdmFsdWUuZGVhY3RpdmF0ZSA6IHRoaXMuX2luZGljYXRvci5kZWFjdGl2YXRlO1xuICAgIHRoaXMuX2luZGljYXRvci5yZWxlYXNlID0gdmFsdWUucmVsZWFzZSA/IHZhbHVlLnJlbGVhc2UgOiB0aGlzLl9pbmRpY2F0b3IucmVsZWFzZTtcbiAgICB0aGlzLl9pbmRpY2F0b3IuZmluaXNoID0gdmFsdWUuZmluaXNoID8gdmFsdWUuZmluaXNoIDogdGhpcy5faW5kaWNhdG9yLmZpbmlzaDtcbiAgfVxuICBAT3V0cHV0KClcbiAgZm9vdGVyUmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvblJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tcHVsbC10by1yZWZyZXNoJylcbiAgcmVmcmVzaDogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc3VwZXItY29udGFpbmVyJylcbiAgY29udGFpbmVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1wdWxsLXRvLXJlZnJlc2gtdXAnKVxuICByZWZyZXNoVXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1wdWxsLXRvLXJlZnJlc2gtZG93bicpXG4gIHJlZnJlc2hEb3duOiBib29sZWFuID0gdHJ1ZTtcblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgdG91Y2hzdGFydChlKSB7XG4gICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2Rvd24nKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3B1bGx0b3JlZnJlc2gnKVswXS5zY3JvbGxUb3AgPiAwKSB7XG4gICAgICAgIHRoaXMuc3RhcnRZID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0WSA9IGUgJiYgZS5jaGFuZ2VkVG91Y2hlcyAmJiBlLmNoYW5nZWRUb3VjaGVzWzBdICYmIGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgIHRoaXMuc3RhdGUuZHJhZyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydFkgPSBlICYmIGUuY2hhbmdlZFRvdWNoZXMgJiYgZS5jaGFuZ2VkVG91Y2hlc1swXSAmJiBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICB0aGlzLl9jbGllbnRIZWlnaHQgPSB0aGlzLl9wdWxsVG9SZWZyZXNoLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICB0aGlzLl9jdXJyZW50Q29udGVudEhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwdWxsdG9yZWZyZXNoJylbMF0uY2xpZW50SGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLnRyYW5zdGlvbkNscyA9ICcnO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gIHRvdWNobW92ZShlKSB7XG4gICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2Rvd24nKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhcnRZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBkaXN0YW5jZVkgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkgLSB0aGlzLnN0YXJ0WTtcbiAgICAgIGlmIChkaXN0YW5jZVkgPCAwKSB7XG4gICAgICAgIC8vIMOmwrvCmsOlworCqFxuICAgICAgICB0aGlzLnN0YXRlLmRyYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIMOkwrjCi8OmwovCiVxuICAgICAgICB0aGlzLnN0YXRlLmRyYWcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhdGUuZHJhZykge1xuICAgICAgICAvLyDDp8KmwoHDpsKtwqLDpsK7wprDpcKKwqhcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlWSA+IHRoaXMuZGFtcGluZykge1xuICAgICAgICAvL8Olwr3Ck8OowrbChcOowr/Ch8Oowq7CvsOlwq7CmsOpwpjCiMOlwoDCvMOmwpjCr8OvwrzCjMOnwrzCk8OmwoXCosOlwqLCnsOlworCoFxuICAgICAgICBkaXN0YW5jZVkgPSAoZGlzdGFuY2VZIC8gKGRpc3RhbmNlWSArIHRoaXMuZGFtcGluZykpICogdGhpcy5kYW1waW5nICogMjtcbiAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2VZIDwgMCkge1xuICAgICAgICBkaXN0YW5jZVkgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlWSA+IHRoaXMuZGlzdGFuY2VUb1JlZnJlc2gpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyU3QgPSAnYWN0aXZhdGUnO1xuICAgICAgfVxuICAgICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZTNkKCAwLCAnICsgZGlzdGFuY2VZICsgJ3B4LCAwICknLFxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCggMCwgJyArIGRpc3RhbmNlWSArICdweCwgMCApJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRpc3RhbmNlWSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuICAgICAgLy/DpcKQwpHDpMK4worDpsKLwonDpcKKwqjDp8KawoTDpsKXwrbDpcKAwpnDr8K8wozDpcKmwoLDpsKewpzDpcK9wpPDpcKJwo3Dp8KqwpfDpcKPwqPDpcKGwoXDpcKuwrnDpsKywqHDpsKcwonDpsK7wprDpcKIwrDDpsKcwoDDpcKQwo7Dr8K8wozDpcKIwpnDpMK4wo3DpcKuwp7Dp8KOwrDDpsKLwpbDpcKKwqjDp8KawoTDpcKKwqjDpMK9wpzDr8K8wpvDpcKQwpHDpMK4wovDpsK7wprDpcKKwqjDpMK4wo3DpcKuwp7Dp8KOwrDDpsKLwpbDpcKKwqjDpcKKwqjDpMK9wpxcbiAgICAgIGlmIChcbiAgICAgICAgTWF0aC5hYnModGhpcy5fbGFzdGNvbnRlbnRPZmZzZXQpIDw9IHRoaXMuX2NsaWVudEhlaWdodCAtIHRoaXMuX2N1cnJlbnRDb250ZW50SGVpZ2h0IC0gdGhpcy5kaXN0YW5jZVRvUmVmcmVzaCB8fFxuICAgICAgICBkaXN0YW5jZVkgPiAwXG4gICAgICApIHtcbiAgICAgICAgLy8gw6bCu8Kaw6XCisKoXG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gw6TCuMKKw6bCi8KJXG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZS5kcmFnKSB7XG4gICAgICAgIC8vIMOnwqbCgcOmwq3CosOmwrvCmsOlworCqFxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvL8OlwqbCgsOmwp7CnMOmwrvCkcOlworCqMOlwojCsMOlwrrClcOpwoPCqMOkwrrChsOvwrzCjMOmwrvCkcOlworCqMOowrfCncOnwqbCu8OpwprCj8Onwp3CgMOmwovCicOlworCqMOnwprChMOowrfCncOnwqbCu8OlwqLCnsOlworCoMOnwrzCk8OmwoXCosOlwqLCnsOlworCoFxuICAgICAgZGlzdGFuY2VZID0gLShkaXN0YW5jZVkgLyAoZGlzdGFuY2VZIC0gdGhpcy5kYW1waW5nKSkgKiB0aGlzLmRhbXBpbmc7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VZKSA+IHRoaXMuZGlzdGFuY2VUb1JlZnJlc2gpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyU3QgPSAnYWN0aXZhdGUnO1xuICAgICAgfVxuICAgICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZTNkKCAwLCAnICsgZGlzdGFuY2VZICsgJ3B4LCAwICknLFxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCggMCwgJyArIGRpc3RhbmNlWSArICdweCwgMCApJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICB0b3VjaGVuZChlKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0WSB8fCB0aGlzLnN0YXRlLmRyYWcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpc3RhbmNlWSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZVkpID49IHRoaXMuZGlzdGFuY2VUb1JlZnJlc2gpIHtcbiAgICAgIHRoaXMuc3RhdGUuY3VyclN0ID0gJ3JlbGVhc2UnO1xuICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2Rvd24nKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWSh0aGlzLmRpc3RhbmNlVG9SZWZyZXNoICsgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVkoLXRoaXMuZGlzdGFuY2VUb1JlZnJlc2ggLSAxKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLmN1cnJTdCA9ICdmaW5pc2gnO1xuICAgICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyclN0ID0gJ2RlYWN0aXZhdGUnO1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlWSgwKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9LCA1MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVkoMCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgWyckZXZlbnQnXSlcbiAgdG91Y2hjYW5jZWwoZXZ0KSB7XG4gICAgdGhpcy50cmFuc2xhdGVZKDApO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3Njcm9sbCcsIFsnJGV2ZW50J10pXG4gIHNjcm9sbChldnQpIHtcbiAgICBjb25zdCBjb250ZW50T2Zmc2V0ID0gZXZ0LnRhcmdldC5zY3JvbGxUb3A7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY29udGVudE9mZnNldCAtIHRoaXMuX2xhc3Rjb250ZW50T2Zmc2V0O1xuICAgIHRoaXMuX2xhc3Rjb250ZW50T2Zmc2V0ID0gY29udGVudE9mZnNldDtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsUmVmcmVzaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBvZmZzZXQgPiAwICYmXG4gICAgICBjb250ZW50T2Zmc2V0ID4gMCAmJlxuICAgICAgZXZ0LnRhcmdldC5zY3JvbGxUb3AgKyB0aGlzLl92aWV3SGVpZ2h0ID4gZXZ0LnRhcmdldC5zY3JvbGxIZWlnaHQgLSB0aGlzLl9mb290ZXJIZWlnaHQgLyAyXG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5mb290ZXJSZWZyZXNoLmVtaXQoJ2ZpbmlzaGVkJyk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBpc1RlbXBsYXRlUmVmKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG4gIH1cblxuICB0cmFuc2xhdGVZKGRpc3RhbmNlWSkge1xuICAgIHRoaXMudHJhbnN0aW9uQ2xzID0gJ2FtLXB1bGwtdG8tcmVmcmVzaC10cmFuc2l0aW9uJztcbiAgICB0aGlzLnN0eWxlID0ge1xuICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZTNkKCAwLCAnICsgZGlzdGFuY2VZICsgJ3B4LCAwICknLFxuICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoIDAsICcgKyBkaXN0YW5jZVkgKyAncHgsIDAgKSdcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFB1bGxUb1JlZnJlc2hDb21wb25lbnQgfSBmcm9tICcuL3B1bGwtdG8tcmVmcmVzaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uTW9kdWxlXSxcbiAgZXhwb3J0czogW1B1bGxUb1JlZnJlc2hDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtQdWxsVG9SZWZyZXNoQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBQdWxsVG9SZWZyZXNoTW9kdWxlIHt9XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUb2FzdE9wdGlvbnMge1xuICBjb250ZW50OiBhbnk7XG4gIG1hc2s6IGJvb2xlYW47XG4gIGljb25UeXBlOiBzdHJpbmc7XG59XG4iLCJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21waWxlcixcbiAgTmdab25lLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RDb21wb25lbnQgfSBmcm9tICcuL3RvYXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2FzdE9wdGlvbnMgfSBmcm9tICcuL3RvYXN0LW9wdGlvbnMucHJvdmlkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0ludGVyZmFjZSB7XG4gIGNvbnRlbnQ/OiBhbnk7XG4gIGljb25UeXBlPzogc3RyaW5nO1xuICBtYXNrPzogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRvYXN0IHtcbiAgc3RhdGljIHRpbWVvdXQgPSBudWxsO1xuICBzdGF0aWMgX3pvbmU6IE5nWm9uZSA9IG51bGw7XG4gIHN0YXRpYyBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiA9IG51bGw7XG4gIHN0YXRpYyBfdG9hc3RDb21wRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxUb2FzdENvbXBvbmVudD4gPSBudWxsO1xuICBzdGF0aWMgX2FwcFJlZjogQXBwbGljYXRpb25SZWYgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FwcFJlZjogQXBwbGljYXRpb25SZWYsIHByaXZhdGUgX2NvbXBpbGVyOiBDb21waWxlciwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgX3pvbmU6IE5nWm9uZSkge1xuICAgIFRvYXN0Ll96b25lID0gdGhpcy5fem9uZTtcbiAgICBUb2FzdC5fYXBwUmVmID0gdGhpcy5fYXBwUmVmO1xuICAgIFRvYXN0Ll90b2FzdENvbXBGYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvYXN0Q29tcG9uZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW5pdENvbmZpZyhjb25maWc6IE9iamVjdCwgb3B0aW9uczogVG9hc3RPcHRpb25zKTogT2JqZWN0IHtcbiAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zOiBzdHJpbmdbXSA9IFsnY29udGVudCcsICdpY29uVHlwZScsICdtYXNrJ107XG5cbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIGNvbmZpZyk7XG4gICAgb3B0aW9uYWxQYXJhbXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNba2V5XSA9IGNvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaWNvblR5cGUgPSB7XG4gICAgICBpbmZvOiAnJyxcbiAgICAgIHN1Y2Nlc3M6ICdzdWNjZXNzJyxcbiAgICAgIGZhaWw6ICdmYWlsJyxcbiAgICAgIG9mZmxpbmU6ICdkaXNsaWtlJyxcbiAgICAgIGxvYWRpbmc6ICdsb2FkaW5nJ1xuICAgIH1bb3B0aW9ucy5pY29uVHlwZV07XG5cbiAgICBwcm9wc1snaWNvblR5cGUnXSA9IGljb25UeXBlO1xuICAgIHByb3BzWydtYXNrJ10gPSBvcHRpb25zLm1hc2s7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgc3RhdGljIG5vdGljZShjb25maWc6IENvbmZpZ0ludGVyZmFjZSwgdHlwZSwgdGltZUludGVydmFsID0gMjAwMCwgb25DbG9zZSwgbWFzayA9IHRydWUpIHtcbiAgICAvLyDDpcKmwoLDpsKewpzDpcK3wrLDp8K7wo/DpcKtwpjDpcKcwqjDr8K8wozDpcKcwqjDpsKywqHDpsKcwonDqcKBwq7Dp8K9wqnDpcKxwoLDp8KawoTDpsKDwoXDpcKGwrXDpMK4wovDr8K8wozDpMK8wprDpcKTwo3DpcK6wpTDpcKIwqvDp8KawoR0b2FzdMOvwrzCjMOpwpzCgMOowqbCgcOmwrjChcOpwpnCpMOlwo7Cn8Omwp3CpcOnwprChFxuICAgIGlmIChUb2FzdC5jb21wUmVmKSB7XG4gICAgICBUb2FzdC5oaWRlKCk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnM6IFRvYXN0T3B0aW9ucyA9IG5ldyBUb2FzdE9wdGlvbnMoKTtcbiAgICBvcHRpb25zLmljb25UeXBlID0gdHlwZTtcbiAgICBvcHRpb25zLm1hc2sgPSBtYXNrO1xuICAgIGNvbnN0IHByb3BzID0gVG9hc3QuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcblxuICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVG9hc3QuX3RvYXN0Q29tcEZhY3Rvcnkuc2VsZWN0b3IpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgIGxldCBpbnN0YW5jZTogYW55O1xuICAgIGxldCBzdWJqZWN0OiBhbnk7XG5cbiAgICBUb2FzdC5jb21wUmVmID0gVG9hc3QuX2FwcFJlZi5ib290c3RyYXAoVG9hc3QuX3RvYXN0Q29tcEZhY3RvcnkpO1xuICAgIGluc3RhbmNlID0gVG9hc3QuY29tcFJlZi5pbnN0YW5jZTtcbiAgICBzdWJqZWN0ID0gaW5zdGFuY2Uuc3ViamVjdDtcblxuICAgIGlmICh0aW1lSW50ZXJ2YWwpIHtcbiAgICAgIFRvYXN0LnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgVG9hc3QuaGlkZSgpO1xuICAgICAgfSwgdGltZUludGVydmFsKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBwcm9wcyk7XG4gICAgcmV0dXJuIHN1YmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBpbmZvIGRpYWxvZ1xuICAgKi9cbiAgc3RhdGljIGluZm8oY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBvbkNsb3NlPzogKCkgPT4gdm9pZCwgbWFzaz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGljb25UeXBlOiAnaW5mbycsXG4gICAgICBjb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIFRvYXN0Lm5vdGljZShjb25maWcsICdpbmZvJywgdGltZUludGVydmFsLCBvbkNsb3NlLCBtYXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHN1Y2Nlc3MgZGlhbG9nXG4gICAqL1xuICBzdGF0aWMgc3VjY2Vzcyhjb250ZW50Pzogc3RyaW5nLCB0aW1lSW50ZXJ2YWw/OiBudW1iZXIsIG9uQ2xvc2U/OiAoKSA9PiB2b2lkLCBtYXNrPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gVG9hc3Qubm90aWNlKGNvbmZpZywgJ3N1Y2Nlc3MnLCB0aW1lSW50ZXJ2YWwsIG9uQ2xvc2UsIG1hc2spO1xuICB9XG5cbiAgc3RhdGljIHNob3coY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBtYXNrPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdpbmZvJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gVG9hc3Qubm90aWNlKGNvbmZpZywgJ2luZm8nLCB0aW1lSW50ZXJ2YWwsICgpID0+IHt9LCBtYXNrKTtcbiAgfVxuXG4gIHN0YXRpYyBmYWlsKGNvbnRlbnQ/OiBzdHJpbmcsIHRpbWVJbnRlcnZhbD86IG51bWJlciwgb25DbG9zZT86ICgpID0+IHZvaWQsIG1hc2s/OiBib29sZWFuKSB7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBpY29uVHlwZTogJ2ZhaWwnLFxuICAgICAgY29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIHJldHVybiBUb2FzdC5ub3RpY2UoY29uZmlnLCAnZmFpbCcsIHRpbWVJbnRlcnZhbCwgb25DbG9zZSwgbWFzayk7XG4gIH1cblxuICBzdGF0aWMgb2ZmbGluZShjb250ZW50Pzogc3RyaW5nLCB0aW1lSW50ZXJ2YWw/OiBudW1iZXIsIG9uQ2xvc2U/OiAoKSA9PiB2b2lkLCBtYXNrPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdvZmZsaW5lJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gVG9hc3Qubm90aWNlKGNvbmZpZywgJ29mZmxpbmUnLCB0aW1lSW50ZXJ2YWwsIG9uQ2xvc2UsIG1hc2spO1xuICB9XG5cbiAgc3RhdGljIGxvYWRpbmcoY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBvbkNsb3NlPzogKCkgPT4gdm9pZCwgbWFzaz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGljb25UeXBlOiAnbG9hZGluZycsXG4gICAgICBjb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIFRvYXN0Lm5vdGljZShjb25maWcsICdsb2FkaW5nJywgdGltZUludGVydmFsLCBvbkNsb3NlLCBtYXNrKTtcbiAgfVxuXG4gIHN0YXRpYyBoaWRlKCkge1xuICAgIGlmIChUb2FzdC50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoVG9hc3QudGltZW91dCk7XG4gICAgfVxuICAgIGlmIChUb2FzdC5jb21wUmVmKSB7XG4gICAgICBUb2FzdC5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBUb2FzdC5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgVG9hc3QuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21waWxlcixcbiAgVGVtcGxhdGVSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFzZU9wdGlvbnMsIE1vZGFsT3B0aW9ucywgQWxlcnRPcHRpb25zLCBBY3Rpb24gfSBmcm9tICcuL21vZGFsLW9wdGlvbnMucHJvdmlkZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kYWwge1xuICBzdGF0aWMgY29tcFJlZjogQ29tcG9uZW50UmVmPGFueT4gPSBudWxsO1xuICBzdGF0aWMgX21vZGFsQ29tcEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8TW9kYWxDb21wb25lbnQ+ID0gbnVsbDtcbiAgc3RhdGljIGFwcFJlZjogQXBwbGljYXRpb25SZWYgPSBudWxsO1xuICBzdGF0aWMgaW5zdGFuY2UgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLCBwcml2YXRlIF9jb21waWxlcjogQ29tcGlsZXIsIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XG4gICAgTW9kYWwuYXBwUmVmID0gdGhpcy5fYXBwUmVmO1xuICAgIE1vZGFsLl9tb2RhbENvbXBGYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1vZGFsQ29tcG9uZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW5pdENvbmZpZyhjb25maWc6IEJhc2VPcHRpb25zLCBvcHRpb25zOiBhbnkpOiBCYXNlT3B0aW9ucyB7XG4gICAgY29uc3QgcHJvcHM6IEJhc2VPcHRpb25zID0gbmV3IEJhc2VPcHRpb25zKCk7XG4gICAgY29uc3Qgb3B0aW9uYWxQYXJhbXM6IHN0cmluZ1tdID0gW1xuICAgICAgJ3Zpc2libGUnLFxuICAgICAgJ2ZvY3VzJyxcbiAgICAgICdjbG9zYWJsZScsXG4gICAgICAnbWFza0Nsb3NhYmxlJyxcbiAgICAgICdvbkNsb3NlJyxcbiAgICAgICd0cmFuc3BhcmVudCcsXG4gICAgICAncG9wdXAnLFxuICAgICAgJ2FuaW1hdGlvblR5cGUnLFxuICAgICAgJ3RpdGxlJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ3BsYXRmb3JtJyxcbiAgICAgICdjbGFzc05hbWUnLFxuICAgICAgJ3dyYXBDbGFzc05hbWUnLFxuICAgICAgJ21lc3NhZ2UnLFxuICAgICAgJ2FjdGlvbnMnLFxuICAgICAgJ2NhbGxiYWNrT3JBY3Rpb25zJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdkZWZhdWx0VmFsdWUnLFxuICAgICAgJ3BsYWNlaG9sZGVycycsXG4gICAgICAnb3BlcmF0aW9uJyxcbiAgICAgICd0cmFuc2l0aW9uTmFtZScsXG4gICAgICAnbWFza1RyYW5zaXRpb25OYW1lJyxcbiAgICAgICdjbG9zZSdcbiAgICBdO1xuICAgIG9wdGlvbnMudHJhbnNpdGlvbk5hbWUgPSBgJHtvcHRpb25zLnRyYW5zaXRpb25OYW1lfS1lbnRlciAke29wdGlvbnMudHJhbnNpdGlvbk5hbWV9LWVudGVyLWFjdGl2ZWA7XG4gICAgb3B0aW9ucy5tYXNrVHJhbnNpdGlvbk5hbWUgPSBgJHtvcHRpb25zLm1hc2tUcmFuc2l0aW9uTmFtZX0tZW50ZXIgJHtvcHRpb25zLm1hc2tUcmFuc2l0aW9uTmFtZX0tZW50ZXItYWN0aXZlYDtcbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIGNvbmZpZywge1xuICAgICAgY2xvc2U6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5tYXNrQ2xvc2FibGUgfHwgY29uZmlnLmNsb3NhYmxlKSB7XG4gICAgICAgICAgTW9kYWwuY2xvc2VXaXRoQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBvcHRpb25hbFBhcmFtcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1trZXldID0gY29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgc3RhdGljIF9vcGVuKHByb3BzOiBCYXNlT3B0aW9ucywgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+KTogYW55IHtcbiAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KGZhY3Rvcnkuc2VsZWN0b3IpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgIGxldCBzdWJqZWN0OiBhbnk7XG4gICAgTW9kYWwuY29tcFJlZiA9IE1vZGFsLmFwcFJlZi5ib290c3RyYXAoZmFjdG9yeSk7XG4gICAgTW9kYWwuaW5zdGFuY2UgPSBNb2RhbC5jb21wUmVmLmluc3RhbmNlO1xuICAgIHN1YmplY3QgPSBNb2RhbC5pbnN0YW5jZS5zdWJqZWN0O1xuICAgIE9iamVjdC5hc3NpZ24oTW9kYWwuaW5zdGFuY2UsIHByb3BzKTtcbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxuXG4gIHN0YXRpYyBjbG9zZVdpdGhBbmltYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uczogQmFzZU9wdGlvbnMgPSBuZXcgQmFzZU9wdGlvbnMoKTtcbiAgICBNb2RhbC5pbnN0YW5jZS50cmFuc2l0aW9uTmFtZSA9IGAke29wdGlvbnMudHJhbnNpdGlvbk5hbWV9LWxlYXZlICR7b3B0aW9ucy50cmFuc2l0aW9uTmFtZX0tbGVhdmUtYWN0aXZlYDtcbiAgICBNb2RhbC5pbnN0YW5jZS5tYXNrVHJhbnNpdGlvbk5hbWUgPSBgJHtvcHRpb25zLm1hc2tUcmFuc2l0aW9uTmFtZX0tbGVhdmUgJHtcbiAgICAgIG9wdGlvbnMubWFza1RyYW5zaXRpb25OYW1lXG4gICAgfS1sZWF2ZS1hY3RpdmVgO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgTW9kYWwuY2xvc2UoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgc3RhdGljIG9wZW4oY29uZmlnOiBCYXNlT3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3Qgb3B0aW9uczogTW9kYWxPcHRpb25zID0gbmV3IE1vZGFsT3B0aW9ucygpO1xuICAgIGNvbnN0IHByb3BzID0gTW9kYWwuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICByZXR1cm4gTW9kYWwuX29wZW4ocHJvcHMsIE1vZGFsLl9tb2RhbENvbXBGYWN0b3J5KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGVydChcbiAgICB0aXRsZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgbWVzc2FnZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgYWN0aW9ucz86IEFycmF5PGFueT4sXG4gICAgcGxhdGZvcm0/OiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICBjb25zdCBvcHRpb25zOiBBbGVydE9wdGlvbnMgPSBuZXcgQWxlcnRPcHRpb25zKCk7XG4gICAgb3B0aW9ucy52aXNpYmxlID0gdHJ1ZTtcbiAgICBvcHRpb25zLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgb3B0aW9ucy5tYXNrQ2xvc2FibGUgPSBmYWxzZTtcbiAgICBvcHRpb25zLnBsYXRmb3JtID0gJ2lvcyc7XG5cbiAgICBjb25zdCBmb290ZXIgPSBnZXRGb290ZXIoYWN0aW9ucyk7XG5cbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBhY3Rpb25zOiBmb290ZXIgPyBmb290ZXIgOiBbeyB0ZXh0OiAnw6fCocKuw6XCrsKaJyB9XSxcbiAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSA/IHBsYXRmb3JtIDogJ2lvcydcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb3BzID0gTW9kYWwuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICByZXR1cm4gTW9kYWwuX29wZW4ocHJvcHMsIHRoaXMuX21vZGFsQ29tcEZhY3RvcnkpO1xuICB9XG5cbiAgc3RhdGljIHByb21wdChcbiAgICB0aXRsZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgbWVzc2FnZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgY2FsbGJhY2tPckFjdGlvbnM/OiBhbnksXG4gICAgdHlwZT86IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcsXG4gICAgcGxhY2Vob2xkZXJzPzogQXJyYXk8YW55PixcbiAgICBwbGF0Zm9ybT86IHN0cmluZ1xuICApOiBhbnkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEFsZXJ0T3B0aW9ucyA9IG5ldyBBbGVydE9wdGlvbnMoKTtcbiAgICBvcHRpb25zLnZpc2libGUgPSB0cnVlO1xuICAgIG9wdGlvbnMudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgIG9wdGlvbnMuY2xvc2FibGUgPSBmYWxzZTtcbiAgICBvcHRpb25zLm1hc2tDbG9zYWJsZSA9IGZhbHNlO1xuICAgIG9wdGlvbnMuY2xhc3NOYW1lID0gJ2FtLW1vZGFsLWFsZXJ0LWNvbnRlbnQnO1xuICAgIG9wdGlvbnMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIG9wdGlvbnMucGxhY2Vob2xkZXJzID0gcGxhY2Vob2xkZXJzO1xuICAgIChvcHRpb25zLnR5cGUgPSB0eXBlID8gdHlwZSA6ICdkZWZhdWx0JyksIChvcHRpb25zLnBsYXRmb3JtID0gcGxhdGZvcm0gPyBwbGF0Zm9ybSA6ICdpb3MnKTtcblxuICAgIGZ1bmN0aW9uIGdldEFyZ3Moc2VsZiwgZnVuYykge1xuICAgICAgY29uc3QgdGV4dCA9IHNlbGYuaW5zdGFuY2UuZGF0YS50ZXh0IHx8IGRlZmF1bHRWYWx1ZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gc2VsZi5pbnN0YW5jZS5kYXRhLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgaWYgKHR5cGUgPT09ICdsb2dpbi1wYXNzd29yZCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGV4dCwgcGFzc3dvcmQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2VjdXJlLXRleHQnKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHBhc3N3b3JkIHx8IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuYyh0ZXh0KTtcbiAgICB9XG5cbiAgICBsZXQgYWN0aW9ucztcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrT3JBY3Rpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhY3Rpb25zID0gW1xuICAgICAgICB7IHRleHQ6ICfDpcKPwpbDpsK2wognIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnw6fCocKuw6XCrsKaJyxcbiAgICAgICAgICBvblByZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBnZXRBcmdzKHRoaXMsIGNhbGxiYWNrT3JBY3Rpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGlvbnMgPSBjYWxsYmFja09yQWN0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIG9uUHJlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLm9uUHJlc3MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3ModGhpcywgaXRlbS5vblByZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmb290ZXIgPSBnZXRGb290ZXIoYWN0aW9ucyk7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdHlwZTogdHlwZSA/IHR5cGUgOiAnZGVmYXVsdCcsXG4gICAgICBhY3Rpb25zOiBmb290ZXIgPyBmb290ZXIgOiBbeyB0ZXh0OiAnw6fCocKuw6XCrsKaJyB9XSxcbiAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSA/IHBsYXRmb3JtIDogJ2lvcydcbiAgICB9KTtcbiAgICBjb25zdCBwcm9wcyA9IE1vZGFsLl9pbml0Q29uZmlnKGNvbmZpZywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIE1vZGFsLl9vcGVuKHByb3BzLCB0aGlzLl9tb2RhbENvbXBGYWN0b3J5KTtcbiAgfVxuXG4gIHN0YXRpYyBvcGVyYXRpb24oYWN0aW9ucz86IGFueSwgcGxhdGZvcm0/OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEJhc2VPcHRpb25zID0gbmV3IEJhc2VPcHRpb25zKCk7XG4gICAgb3B0aW9ucy52aXNpYmxlID0gdHJ1ZTtcbiAgICBvcHRpb25zLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgb3B0aW9ucy5tYXNrQ2xvc2FibGUgPSBmYWxzZTtcbiAgICBvcHRpb25zLm9wZXJhdGlvbiA9IHRydWU7XG4gICAgb3B0aW9ucy5jbGFzc05hbWUgPSAnYW0tbW9kYWwtb3BlcmF0aW9uJztcbiAgICBjb25zdCBmb290ZXIgPSBnZXRGb290ZXIoYWN0aW9ucyk7XG5cbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGlvbnM6IGZvb3RlciA/IGZvb3RlciA6IFt7IHRleHQ6ICfDp8Khwq7DpcKuwponIH1dLFxuICAgICAgcGxhdGZvcm06IHBsYXRmb3JtID8gcGxhdGZvcm0gOiAnaW9zJ1xuICAgIH0pO1xuICAgIGNvbnN0IHByb3BzID0gTW9kYWwuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICByZXR1cm4gTW9kYWwuX29wZW4ocHJvcHMsIHRoaXMuX21vZGFsQ29tcEZhY3RvcnkpO1xuICB9XG5cbiAgc3RhdGljIGNsb3NlKCkge1xuICAgIGlmIChNb2RhbC5jb21wUmVmKSB7XG4gICAgICBNb2RhbC5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIE1vZGFsLmNvbXBSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGb290ZXIoYWN0aW9ucykge1xuICByZXR1cm4gYWN0aW9ucy5tYXAoKGJ1dHRvbjogQWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb3JnaW5QcmVzcyA9IGJ1dHRvbi5vblByZXNzIHx8IGZ1bmN0aW9uKCkge307XG4gICAgYnV0dG9uLm9uUHJlc3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBvcmdpblByZXNzKCk7XG4gICAgICBpZiAocmVzICYmIHJlcy50aGVuKSB7XG4gICAgICAgIHJlcy50aGVuKCgpID0+IHtcbiAgICAgICAgICBNb2RhbC5jbG9zZVdpdGhBbmltYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBNb2RhbC5jbG9zZVdpdGhBbmltYXRpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBidXR0b247XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFjdGlvblNoZWV0T3B0aW9ucyB7XG4gIHByZWZpeENscz86IHN0cmluZztcbiAgbWFza0Nsb3NhYmxlPzogYm9vbGVhbjtcbiAgY2FuY2VsQnV0dG9uSW5kZXg/OiBudW1iZXI7XG4gIGRlc3RydWN0aXZlQnV0dG9uSW5kZXg/OiBudW1iZXI7XG4gIHRpdGxlPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgbWVzc2FnZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdHJhbnNpdGlvbk5hbWU/OiBzdHJpbmcgPSAnYW0tc2xpZGUtdXAnO1xuICBtYXNrVHJhbnNpdGlvbk5hbWU/OiBzdHJpbmcgPSAnYW0tZmFkZSc7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaGFyZU9wdGlvbiB7XG4gIGljb246IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMgZXh0ZW5kcyBBY3Rpb25TaGVldE9wdGlvbnMge1xuICBvcHRpb25zOiBTaGFyZU9wdGlvbltdIHwgU2hhcmVPcHRpb25bXVtdO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aW9uU2hlZXRXaXRoT3B0aW9ucyBleHRlbmRzIEFjdGlvblNoZWV0T3B0aW9ucyB7XG4gIG9wdGlvbnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25DYWxsQmFjayA9IChpbmRleDogbnVtYmVyLCByb3dJbmRleD86IG51bWJlcikgPT4gUHJvbWlzZUxpa2U8YW55PiB8IHZvaWQ7XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBDb21wb25lbnRSZWYsIENvbXBvbmVudEZhY3RvcnksIEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvblNoZWV0Q29tcG9uZW50IH0gZnJvbSAnLi9hY3Rpb24tc2hlZXQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNhbGxCYWNrLFxuICBBY3Rpb25TaGVldE9wdGlvbnMsXG4gIEFjdGlvblNoZWV0V2l0aE9wdGlvbnMsXG4gIFNoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9uc1xufSBmcm9tICcuL2FjdGlvbi1zaGVldC1vcHRpb25zLnByb3ZpZGVyJztcbmltcG9ydCB7IEFjdGlvblNoZWV0U3ViamVjdCB9IGZyb20gJy4vYWN0aW9uLXNoZWV0LXN1YmplY3Quc2VydmljZSc7XG5cbmNvbnN0IE5PUk1BTCA9ICdOT1JNQUwnO1xuY29uc3QgU0hBUkUgPSAnU0hBUkUnO1xuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY3Rpb25TaGVldCB7XG4gIHN0YXRpYyBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiA9IG51bGw7XG4gIHN0YXRpYyBfYWN0aW9uU2hlZXRDb21wRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxBY3Rpb25TaGVldENvbXBvbmVudD4gPSBudWxsO1xuICBzdGF0aWMgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiA9IG51bGw7XG5cbiAgc3RhdGljIGluc3RhbmNlID0gbnVsbDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZiwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICBBY3Rpb25TaGVldC5hcHBSZWYgPSB0aGlzLl9hcHBSZWY7XG4gICAgQWN0aW9uU2hlZXQuX2FjdGlvblNoZWV0Q29tcEZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQWN0aW9uU2hlZXRDb21wb25lbnQpO1xuICB9XG5cbiAgc3RhdGljIF9pbml0Q29uZmlnKGNvbmZpZzogQWN0aW9uU2hlZXRPcHRpb25zLCBvcHRpb25zOiBPYmplY3QgPSB7fSk6IEFjdGlvblNoZWV0T3B0aW9ucyB7XG4gICAgY29uc3QgcHJvcHM6IEFjdGlvblNoZWV0T3B0aW9ucyA9IG5ldyBBY3Rpb25TaGVldE9wdGlvbnMoKTtcbiAgICBjb25zdCBvcHRpb25hbFBhcmFtczogc3RyaW5nW10gPSBbXG4gICAgICAncHJlZml4Q2xzJyxcbiAgICAgICdtYXNrQ2xvc2FibGUnLFxuICAgICAgJ2NhbmNlbEJ1dHRvbkluZGV4JyxcbiAgICAgICdkZXN0cnVjdGl2ZUJ1dHRvbkluZGV4JyxcbiAgICAgICd0aXRsZScsXG4gICAgICAnbWVzc2FnZScsXG4gICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICd0cmFuc2l0aW9uTmFtZScsXG4gICAgICAnbWFza1RyYW5zaXRpb25OYW1lJyxcbiAgICAgICdvcHRpb25zJ1xuICAgIF07XG4gICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbihvcHRpb25zLCBjb25maWcpO1xuICAgIG9wdGlvbmFsUGFyYW1zLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChjb25maWdba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSBjb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICBzdGF0aWMgX29wZW4ocHJvcHM6IEFjdGlvblNoZWV0T3B0aW9ucywgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+KTogQWN0aW9uU2hlZXRTdWJqZWN0IHtcbiAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KGZhY3Rvcnkuc2VsZWN0b3IpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgIGxldCBzdWJqZWN0OiBhbnk7XG5cbiAgICBBY3Rpb25TaGVldC5jb21wUmVmID0gQWN0aW9uU2hlZXQuYXBwUmVmLmJvb3RzdHJhcChmYWN0b3J5KTtcbiAgICBBY3Rpb25TaGVldC5pbnN0YW5jZSA9IEFjdGlvblNoZWV0LmNvbXBSZWYuaW5zdGFuY2U7XG4gICAgc3ViamVjdCA9IEFjdGlvblNoZWV0Lmluc3RhbmNlLnN1YmplY3Q7XG4gICAgT2JqZWN0LmFzc2lnbihBY3Rpb25TaGVldC5pbnN0YW5jZSwgcHJvcHMpO1xuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUFjdGlvblNoZWV0KFxuICAgIGZsYWc6IHN0cmluZyxcbiAgICBjb25maWc6IEFjdGlvblNoZWV0V2l0aE9wdGlvbnMgfCBTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEFjdGlvbkNhbGxCYWNrXG4gICkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEFjdGlvblNoZWV0T3B0aW9ucyA9IG5ldyBBY3Rpb25TaGVldE9wdGlvbnMoKTtcbiAgICBjb25zdCB0cmFuc2l0aW9uTmFtZSA9IGNvbmZpZy50cmFuc2l0aW9uTmFtZSA/IGNvbmZpZy50cmFuc2l0aW9uTmFtZSA6IG9wdGlvbnMudHJhbnNpdGlvbk5hbWU7XG4gICAgb3B0aW9ucy50cmFuc2l0aW9uTmFtZSA9IGAke3RyYW5zaXRpb25OYW1lfS1lbnRlciAke3RyYW5zaXRpb25OYW1lfS1lbnRlci1hY3RpdmVgO1xuICAgIGNvbnN0IG1hc2tUcmFuc2l0aW9uTmFtZSA9IGNvbmZpZy5tYXNrVHJhbnNpdGlvbk5hbWUgPyBjb25maWcubWFza1RyYW5zaXRpb25OYW1lIDogb3B0aW9ucy5tYXNrVHJhbnNpdGlvbk5hbWU7XG4gICAgb3B0aW9ucy5tYXNrVHJhbnNpdGlvbk5hbWUgPSBgJHttYXNrVHJhbnNpdGlvbk5hbWV9LWVudGVyICR7bWFza1RyYW5zaXRpb25OYW1lfS1lbnRlci1hY3RpdmVgO1xuICAgIGNvbnN0IHByb3BzID0gQWN0aW9uU2hlZXQuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICBPYmplY3QuYXNzaWduKHByb3BzLCB7IG9uUHJlc3M6IGNiIH0sIHsgZmxhZzogZmxhZyB9KTtcbiAgICBmdW5jdGlvbiBjYihpbmRleDogYW55LCByb3dJbmRleCA9IDAsIGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGluZGV4LCByb3dJbmRleCk7XG4gICAgICBpZiAocmVzICYmIHJlcy50aGVuKSB7XG4gICAgICAgIHJlcy50aGVuKCgpID0+IHtcbiAgICAgICAgICBBY3Rpb25TaGVldC5jbG9zZVdpdGhBbmltYXRpb24odHJhbnNpdGlvbk5hbWUsIG1hc2tUcmFuc2l0aW9uTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQWN0aW9uU2hlZXQuY2xvc2VXaXRoQW5pbWF0aW9uKHRyYW5zaXRpb25OYW1lLCBtYXNrVHJhbnNpdGlvbk5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQWN0aW9uU2hlZXQuX29wZW4ocHJvcHMsIEFjdGlvblNoZWV0Ll9hY3Rpb25TaGVldENvbXBGYWN0b3J5KTtcbiAgfVxuXG4gIHN0YXRpYyBjbG9zZVdpdGhBbmltYXRpb24odHJhbnNpdGlvbk5hbWUsIG1hc2tUcmFuc2l0aW9uTmFtZSkge1xuICAgIEFjdGlvblNoZWV0Lmluc3RhbmNlLnRyYW5zaXRpb25OYW1lID0gYCR7dHJhbnNpdGlvbk5hbWV9LWxlYXZlICR7dHJhbnNpdGlvbk5hbWV9LWxlYXZlLWFjdGl2ZWA7XG4gICAgQWN0aW9uU2hlZXQuaW5zdGFuY2UubWFza1RyYW5zaXRpb25OYW1lID0gYCR7bWFza1RyYW5zaXRpb25OYW1lfS1sZWF2ZSAke21hc2tUcmFuc2l0aW9uTmFtZX0tbGVhdmUtYWN0aXZlYDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIEFjdGlvblNoZWV0LmNsb3NlKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHN0YXRpYyBzaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhjb25maWc6IEFjdGlvblNoZWV0V2l0aE9wdGlvbnMsIGNhbGxiYWNrOiBBY3Rpb25DYWxsQmFjayA9IG5vb3ApIHtcbiAgICBBY3Rpb25TaGVldC5jcmVhdGVBY3Rpb25TaGVldChOT1JNQUwsIGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG5cbiAgc3RhdGljIHNob3dTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMoY29uZmlnOiBTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMsIGNhbGxiYWNrOiBBY3Rpb25DYWxsQmFjayA9IG5vb3ApIHtcbiAgICBBY3Rpb25TaGVldC5jcmVhdGVBY3Rpb25TaGVldChTSEFSRSwgY29uZmlnLCBjYWxsYmFjayk7XG4gIH1cblxuICBzdGF0aWMgY2xvc2UoKSB7XG4gICAgaWYgKEFjdGlvblNoZWV0LmNvbXBSZWYpIHtcbiAgICAgIEFjdGlvblNoZWV0LmNvbXBSZWYuZGVzdHJveSgpO1xuICAgICAgQWN0aW9uU2hlZXQuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tlckNhbGxCYWNrLCBQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi9waWNrZXItb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgeyBQb3B1cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2NvcmUubW9kdWxlJztcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQaWNrZXIgZXh0ZW5kcyBQb3B1cFNlcnZpY2Uge1xuICBzdGF0aWMgZGVmYXVsdE9wdGlvbnM6IFBpY2tlck9wdGlvbnMgPSBuZXcgUGlja2VyT3B0aW9ucygpO1xuXG4gIHN0YXRpYyBzaG93UGlja2VyKFxuICAgIGNvbmZpZzogUGlja2VyT3B0aW9ucyA9IFBpY2tlci5kZWZhdWx0T3B0aW9ucyxcbiAgICBjb25maXJtQ2FsbGJhY2s/OiBQaWNrZXJDYWxsQmFjayxcbiAgICBjYW5jZWxDYWxsYmFjaz86IFBpY2tlckNhbGxCYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgUGlja2VyT3B0aW9ucygpO1xuICAgIE9iamVjdC5hc3NpZ24ob3B0aW9ucywgY29uZmlnLCB7XG4gICAgICBoaWRlUGlja2VyOiAoZXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gICAgICB9LFxuICAgICAgY29uZmlybTogKGV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChjb25maXJtQ2FsbGJhY2spIHtcbiAgICAgICAgICBjb25maXJtQ2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FuY2VsOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxDYWxsYmFjaykge1xuICAgICAgICAgIGNhbmNlbENhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zOiBBcnJheTxhbnk+ID0gW1xuICAgICAgJ2RhdGEnLFxuICAgICAgJ3ZhbHVlJyxcbiAgICAgICdjb2xzJyxcbiAgICAgICdtYXNrJyxcbiAgICAgICd0aXRsZScsXG4gICAgICAnb2tUZXh0JyxcbiAgICAgICdkaXNtaXNzVGV4dCcsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgJ2Nhc2NhZGUnLFxuICAgICAgJ29uT2snLFxuICAgICAgJ29uUGlja2VyQ2hhbmdlJyxcbiAgICAgICdpbmRpY2F0b3JTdHlsZSdcbiAgICBdO1xuICAgIG9wdGlvbmFsUGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzW3BhcmFtXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgKG9wdGlvbnMgYXMgYW55KVtwYXJhbV0gPSB0aGlzW3BhcmFtXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUGlja2VyT3B0aW9ucyxcbiAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgIH1cbiAgICBdKTtcbiAgICBQaWNrZXIuc2hvd1BvcHVwKFBpY2tlckNvbXBvbmVudCwgY2hpbGRJbmplY3Rvcik7XG4gIH1cblxuICBzdGF0aWMgaGlkZVBpY2tlcigpOiB2b2lkIHtcbiAgICBQaWNrZXIuaGlkZVBvcHVwKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjdGl2aXR5SW5kaWNhdG9yTW9kdWxlIH0gZnJvbSAnLi9hY3Rpdml0eS1pbmRpY2F0b3IvYWN0aXZpdHktaW5kaWNhdG9yLm1vZHVsZSc7XG5pbXBvcnQgeyBDYXJkTW9kdWxlIH0gZnJvbSAnLi9jYXJkL2NhcmQubW9kdWxlJztcbmltcG9ydCB7IEJhZGdlTW9kdWxlIH0gZnJvbSAnLi9iYWRnZS9iYWRnZS5tb2R1bGUnO1xuaW1wb3J0IHsgSW5wdXRJdGVtTW9kdWxlIH0gZnJvbSAnLi9pbnB1dC1pdGVtL2lucHV0LWl0ZW0ubW9kdWxlJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgU3dpdGNoTW9kdWxlIH0gZnJvbSAnLi9zd2l0Y2gvc3dpdGNoLm1vZHVsZSc7XG5pbXBvcnQgeyBTZWFyY2hCYXJNb2R1bGUgfSBmcm9tICcuL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5tb2R1bGUnO1xuaW1wb3J0IHsgU3RlcHBlck1vZHVsZSB9IGZyb20gJy4vc3RlcHBlci9zdGVwcGVyLm1vZHVsZSc7XG5pbXBvcnQgeyBTdGVwc01vZHVsZSB9IGZyb20gJy4vc3RlcHMvc3RlcHMubW9kdWxlJztcbmltcG9ydCB7IENhcm91c2VsTW9kdWxlIH0gZnJvbSAnLi9jYXJvdXNlbC9jYXJvdXNlbC5tb2R1bGUnO1xuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICcuL2NoZWNrYm94L2NoZWNrYm94Lm1vZHVsZSc7XG5pbXBvcnQgeyBSYWRpb01vZHVsZSB9IGZyb20gJy4vcmFkaW8vcmFkaW8ubW9kdWxlJztcbmltcG9ydCB7IFByb2dyZXNzTW9kdWxlIH0gZnJvbSAnLi9wcm9ncmVzcy9wcm9ncmVzcy5tb2R1bGUnO1xuaW1wb3J0IHsgQWNjb3JkaW9uTW9kdWxlIH0gZnJvbSAnLi9hY2NvcmRpb24vYWNjb3JkaW9uLm1vZHVsZSc7XG5pbXBvcnQgeyBOb3RpY2VCYXJNb2R1bGUgfSBmcm9tICcuL25vdGljZS1iYXIvbm90aWNlLWJhci5tb2R1bGUnO1xuaW1wb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4vaWNvbi9pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJy4vdG9hc3QvdG9hc3QubW9kdWxlJztcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSAnLi9tb2RhbC9tb2RhbC5tb2R1bGUnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJy4vcG9wb3Zlci9wb3BvdmVyLm1vZHVsZSc7XG5pbXBvcnQgeyBOYXZCYXJNb2R1bGUgfSBmcm9tICcuL25hdi1iYXIvbmF2LWJhci5tb2R1bGUnO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJy4vbGlzdC9saXN0Lm1vZHVsZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vZHVsZSB9IGZyb20gJy4vY2FsZW5kYXIvY2FsZW5kYXIubW9kdWxlJztcbmltcG9ydCB7IFBvcG92ZXJJdGVtTW9kdWxlIH0gZnJvbSAnLi9wb3BvdmVyL3BvcG92ZXItaXRlbS9wb3BvdmVyLWl0ZW0ubW9kdWxlJztcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICcuL2ZsZXgvZmxleC5tb2R1bGUnO1xuaW1wb3J0IHsgR3JpZE1vZHVsZSB9IGZyb20gJy4vZ3JpZC9ncmlkLm1vZHVsZSc7XG5pbXBvcnQgeyBBY3Rpb25TaGVldE1vZHVsZSB9IGZyb20gJy4vYWN0aW9uLXNoZWV0L2FjdGlvbi1zaGVldC5tb2R1bGUnO1xuaW1wb3J0IHsgU2VnbWVudGVkQ29udHJvbE1vZHVsZSB9IGZyb20gJy4vc2VnbWVudGVkLWNvbnRyb2wvc2VnbWVudGVkLWNvbnRyb2wubW9kdWxlJztcblxuaW1wb3J0IHsgVGV4dGFyZWFJdGVtTW9kdWxlIH0gZnJvbSAnLi90ZXh0YXJlYS1pdGVtL3RleHRhcmVhLWl0ZW0ubW9kdWxlJztcbmltcG9ydCB7IE5nWm9ycm9BbnRkTW9iaWxlUGlwZXNNb2R1bGUgfSBmcm9tICcuL3BpcGVzL25nLXpvcnJvLWFudGQtbW9iaWxlLnBpcGVzLm1vZHVsZSc7XG5pbXBvcnQgeyBUYWJzTW9kdWxlIH0gZnJvbSAnLi90YWJzL3RhYnMubW9kdWxlJztcbmltcG9ydCB7IFRhYkJhck1vZHVsZSB9IGZyb20gJy4vdGFiLWJhci90YWItYmFyLm1vZHVsZSc7XG5pbXBvcnQgeyBQaWNrZXJNb2R1bGUgfSBmcm9tICcuL3BpY2tlci9waWNrZXIubW9kdWxlJztcbmltcG9ydCB7IFBpY2tlclZpZXdNb2R1bGUgfSBmcm9tICcuL3BpY2tlci12aWV3L3BpY2tlci12aWV3Lm1vZHVsZSc7XG5pbXBvcnQgeyBJbWFnZVBpY2tlck1vZHVsZSB9IGZyb20gJy4vaW1hZ2UtcGlja2VyL2ltYWdlLXBpY2tlci5tb2R1bGUnO1xuaW1wb3J0IHsgUmVzdWx0TW9kdWxlIH0gZnJvbSAnLi9yZXN1bHQvcmVzdWx0Lm1vZHVsZSc7XG5pbXBvcnQgeyBXaGl0ZVNwYWNlTW9kdWxlIH0gZnJvbSAnLi93aGl0ZS1zcGFjZS93aGl0ZS1zcGFjZS5tb2R1bGUnO1xuaW1wb3J0IHsgV2luZ0JsYW5rTW9kdWxlIH0gZnJvbSAnLi93aW5nLWJsYW5rL3dpbmctYmxhbmsubW9kdWxlJztcbmltcG9ydCB7IFJhbmdlTW9kdWxlIH0gZnJvbSAnLi9yYW5nZS9yYW5nZS5tb2R1bGUnO1xuaW1wb3J0IHsgU2xpZGVyTW9kdWxlIH0gZnJvbSAnLi9zbGlkZXIvc2xpZGVyLm1vZHVsZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uTW9kdWxlIH0gZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlJztcbmltcG9ydCB7IFRhZ01vZHVsZSB9IGZyb20gJy4vdGFnL3RhZy5tb2R1bGUnO1xuaW1wb3J0IHsgTWVudU1vZHVsZSB9IGZyb20gJy4vbWVudS9tZW51Lm1vZHVsZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5tb2R1bGUnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlclZpZXdNb2R1bGUgfSBmcm9tICcuL2RhdGUtcGlja2VyLXZpZXcvZGF0ZS1waWNrZXItdmlldy5tb2R1bGUnO1xuaW1wb3J0IHsgRHJhd2VyTW9kdWxlIH0gZnJvbSAnLi9kcmF3ZXIvZHJhd2VyLm1vZHVsZSc7XG5pbXBvcnQgeyBTd2lwZUFjdGlvbk1vZHVsZSB9IGZyb20gJy4vc3dpcGUtYWN0aW9uL3N3aXBlLWFjdGlvbi5tb2R1bGUnO1xuaW1wb3J0IHsgUHVsbFRvUmVmcmVzaE1vZHVsZSB9IGZyb20gJy4vcHVsbC10by1yZWZyZXNoL3B1bGwtdG8tcmVmcmVzaC5tb2R1bGUnO1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXJNb2R1bGUgfSBmcm9tICcuL2xvY2FsZS1wcm92aWRlci9sb2NhbGUtcHJvdmlkZXIubW9kdWxlJztcblxuZXhwb3J0IHsgQWN0aXZpdHlJbmRpY2F0b3JNb2R1bGUgfSBmcm9tICcuL2FjdGl2aXR5LWluZGljYXRvci9hY3Rpdml0eS1pbmRpY2F0b3IubW9kdWxlJztcbmV4cG9ydCB7IENhcmRNb2R1bGUgfSBmcm9tICcuL2NhcmQvY2FyZC5tb2R1bGUnO1xuZXhwb3J0IHsgUmVzdWx0TW9kdWxlIH0gZnJvbSAnLi9yZXN1bHQvcmVzdWx0Lm1vZHVsZSc7XG5leHBvcnQgeyBXaGl0ZVNwYWNlTW9kdWxlIH0gZnJvbSAnLi93aGl0ZS1zcGFjZS93aGl0ZS1zcGFjZS5tb2R1bGUnO1xuZXhwb3J0IHsgV2luZ0JsYW5rTW9kdWxlIH0gZnJvbSAnLi93aW5nLWJsYW5rL3dpbmctYmxhbmsubW9kdWxlJztcbmV4cG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICcuL3RhYnMvdGFicy5tb2R1bGUnO1xuZXhwb3J0IHsgVGFiQmFyTW9kdWxlIH0gZnJvbSAnLi90YWItYmFyL3RhYi1iYXIubW9kdWxlJztcbmV4cG9ydCB7IEJhZGdlTW9kdWxlIH0gZnJvbSAnLi9iYWRnZS9iYWRnZS5tb2R1bGUnO1xuZXhwb3J0IHsgSW5wdXRJdGVtTW9kdWxlIH0gZnJvbSAnLi9pbnB1dC1pdGVtL2lucHV0LWl0ZW0ubW9kdWxlJztcbmV4cG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuZXhwb3J0IHsgU3dpdGNoTW9kdWxlIH0gZnJvbSAnLi9zd2l0Y2gvc3dpdGNoLm1vZHVsZSc7XG5leHBvcnQgeyBTZWFyY2hCYXJNb2R1bGUgfSBmcm9tICcuL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5tb2R1bGUnO1xuZXhwb3J0IHsgU3RlcHBlck1vZHVsZSB9IGZyb20gJy4vc3RlcHBlci9zdGVwcGVyLm1vZHVsZSc7XG5leHBvcnQgeyBTdGVwc01vZHVsZSB9IGZyb20gJy4vc3RlcHMvc3RlcHMubW9kdWxlJztcbmV4cG9ydCB7IENhcm91c2VsTW9kdWxlIH0gZnJvbSAnLi9jYXJvdXNlbC9jYXJvdXNlbC5tb2R1bGUnO1xuZXhwb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICcuL2NoZWNrYm94L2NoZWNrYm94Lm1vZHVsZSc7XG5leHBvcnQgeyBSYWRpb01vZHVsZSB9IGZyb20gJy4vcmFkaW8vcmFkaW8ubW9kdWxlJztcbmV4cG9ydCB7IFByb2dyZXNzTW9kdWxlIH0gZnJvbSAnLi9wcm9ncmVzcy9wcm9ncmVzcy5tb2R1bGUnO1xuZXhwb3J0IHsgQWNjb3JkaW9uTW9kdWxlIH0gZnJvbSAnLi9hY2NvcmRpb24vYWNjb3JkaW9uLm1vZHVsZSc7XG5leHBvcnQgeyBOb3RpY2VCYXJNb2R1bGUgfSBmcm9tICcuL25vdGljZS1iYXIvbm90aWNlLWJhci5tb2R1bGUnO1xuZXhwb3J0IHsgSWNvbk1vZHVsZSB9IGZyb20gJy4vaWNvbi9pY29uLm1vZHVsZSc7XG5leHBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJy4vdG9hc3QvdG9hc3QubW9kdWxlJztcbmV4cG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSAnLi9tb2RhbC9tb2RhbC5tb2R1bGUnO1xuZXhwb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJy4vcG9wb3Zlci9wb3BvdmVyLm1vZHVsZSc7XG5leHBvcnQgeyBOYXZCYXJNb2R1bGUgfSBmcm9tICcuL25hdi1iYXIvbmF2LWJhci5tb2R1bGUnO1xuZXhwb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJy4vbGlzdC9saXN0Lm1vZHVsZSc7XG5leHBvcnQgeyBQb3BvdmVySXRlbU1vZHVsZSB9IGZyb20gJy4vcG9wb3Zlci9wb3BvdmVyLWl0ZW0vcG9wb3Zlci1pdGVtLm1vZHVsZSc7XG5leHBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnLi9mbGV4L2ZsZXgubW9kdWxlJztcbmV4cG9ydCB7IEdyaWRNb2R1bGUgfSBmcm9tICcuL2dyaWQvZ3JpZC5tb2R1bGUnO1xuZXhwb3J0IHsgQWN0aW9uU2hlZXRNb2R1bGUgfSBmcm9tICcuL2FjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQubW9kdWxlJztcbmV4cG9ydCB7IFNlZ21lbnRlZENvbnRyb2xNb2R1bGUgfSBmcm9tICcuL3NlZ21lbnRlZC1jb250cm9sL3NlZ21lbnRlZC1jb250cm9sLm1vZHVsZSc7XG5cbmV4cG9ydCB7IFRleHRhcmVhSXRlbU1vZHVsZSB9IGZyb20gJy4vdGV4dGFyZWEtaXRlbS90ZXh0YXJlYS1pdGVtLm1vZHVsZSc7XG5leHBvcnQgeyBOZ1pvcnJvQW50ZE1vYmlsZVBpcGVzTW9kdWxlIH0gZnJvbSAnLi9waXBlcy9uZy16b3Jyby1hbnRkLW1vYmlsZS5waXBlcy5tb2R1bGUnO1xuZXhwb3J0IHsgUmFuZ2VNb2R1bGUgfSBmcm9tICcuL3JhbmdlL3JhbmdlLm1vZHVsZSc7XG5leHBvcnQgeyBTbGlkZXJNb2R1bGUgfSBmcm9tICcuL3NsaWRlci9zbGlkZXIubW9kdWxlJztcbmV4cG9ydCB7IFBhZ2luYXRpb25Nb2R1bGUgfSBmcm9tICcuL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5tb2R1bGUnO1xuZXhwb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAnLi90YWcvdGFnLm1vZHVsZSc7XG5leHBvcnQgeyBNZW51TW9kdWxlIH0gZnJvbSAnLi9tZW51L21lbnUubW9kdWxlJztcbmV4cG9ydCB7IFBpY2tlck1vZHVsZSB9IGZyb20gJy4vcGlja2VyL3BpY2tlci5tb2R1bGUnO1xuZXhwb3J0IHsgUGlja2VyVmlld01vZHVsZSB9IGZyb20gJy4vcGlja2VyLXZpZXcvcGlja2VyLXZpZXcubW9kdWxlJztcbmV4cG9ydCB7IEltYWdlUGlja2VyTW9kdWxlIH0gZnJvbSAnLi9pbWFnZS1waWNrZXIvaW1hZ2UtcGlja2VyLm1vZHVsZSc7XG5leHBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0IHsgRGF0ZVBpY2tlclZpZXdNb2R1bGUgfSBmcm9tICcuL2RhdGUtcGlja2VyLXZpZXcvZGF0ZS1waWNrZXItdmlldy5tb2R1bGUnO1xuZXhwb3J0IHsgRHJhd2VyTW9kdWxlIH0gZnJvbSAnLi9kcmF3ZXIvZHJhd2VyLm1vZHVsZSc7XG5leHBvcnQgeyBTd2lwZUFjdGlvbk1vZHVsZSB9IGZyb20gJy4vc3dpcGUtYWN0aW9uL3N3aXBlLWFjdGlvbi5tb2R1bGUnO1xuZXhwb3J0IHsgUHVsbFRvUmVmcmVzaE1vZHVsZSB9IGZyb20gJy4vcHVsbC10by1yZWZyZXNoL3B1bGwtdG8tcmVmcmVzaC5tb2R1bGUnO1xuZXhwb3J0IHsgTG9jYWxlUHJvdmlkZXJNb2R1bGUgfSBmcm9tICcuL2xvY2FsZS1wcm92aWRlci9sb2NhbGUtcHJvdmlkZXIubW9kdWxlJztcbmV4cG9ydCB7IExvY2FsZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4vbG9jYWxlLXByb3ZpZGVyL2xvY2FsZS1wcm92aWRlci5zZXJ2aWNlJztcbmV4cG9ydCB7IExPQ0FMX1BST1ZJREVSX1RPS0VOIH0gZnJvbSAnLi9sb2NhbGUtcHJvdmlkZXIvbG9jYWxlLXByb3ZpZGVyLnRva2VuJztcbmV4cG9ydCB7IExvY2FsZVByb3ZpZGVyUGlwZSB9IGZyb20gJy4vbG9jYWxlLXByb3ZpZGVyL2xvY2FsZS1wcm92aWRlci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYWxlLXByb3ZpZGVyL2xhbmd1YWdlcyc7XG5cbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi90b2FzdC90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGlvblNoZWV0IH0gZnJvbSAnLi9hY3Rpb24tc2hlZXQvYWN0aW9uLXNoZWV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGlja2VyIH0gZnJvbSAnLi9waWNrZXIvcGlja2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgeyBUb2FzdCB9IGZyb20gJy4vdG9hc3QvdG9hc3Quc2VydmljZSc7XG5leHBvcnQgeyBUb2FzdENvbXBvbmVudCB9IGZyb20gJy4vdG9hc3QvdG9hc3QuY29tcG9uZW50JztcbmV4cG9ydCB7IE1vZGFsIH0gZnJvbSAnLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmV4cG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC9tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0IHsgQWN0aW9uU2hlZXQgfSBmcm9tICcuL2FjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQuc2VydmljZSc7XG5leHBvcnQgeyBBY3Rpb25TaGVldENvbXBvbmVudCB9IGZyb20gJy4vYWN0aW9uLXNoZWV0L2FjdGlvbi1zaGVldC5jb21wb25lbnQnO1xuZXhwb3J0IHsgUGlja2VyIH0gZnJvbSAnLi9waWNrZXIvcGlja2VyLnNlcnZpY2UnO1xuZXhwb3J0IHsgUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9waWNrZXIvcGlja2VyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW10sXG4gIGV4cG9ydHM6IFtcbiAgICBBY3Rpdml0eUluZGljYXRvck1vZHVsZSxcbiAgICBDYXJkTW9kdWxlLFxuICAgIFRhYnNNb2R1bGUsXG4gICAgVGFiQmFyTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBTd2l0Y2hNb2R1bGUsXG4gICAgU2VhcmNoQmFyTW9kdWxlLFxuICAgIFN0ZXBwZXJNb2R1bGUsXG4gICAgU3RlcHNNb2R1bGUsXG4gICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgUHJvZ3Jlc3NNb2R1bGUsXG4gICAgU2VnbWVudGVkQ29udHJvbE1vZHVsZSxcbiAgICBCYWRnZU1vZHVsZSxcbiAgICBDYXJvdXNlbE1vZHVsZSxcbiAgICBBY3Rpb25TaGVldE1vZHVsZSxcbiAgICBBY2NvcmRpb25Nb2R1bGUsXG4gICAgTm90aWNlQmFyTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgVG9hc3RNb2R1bGUsXG4gICAgUmFkaW9Nb2R1bGUsXG4gICAgTW9kYWxNb2R1bGUsXG4gICAgUG9wb3Zlck1vZHVsZSxcbiAgICBQb3BvdmVySXRlbU1vZHVsZSxcbiAgICBOYXZCYXJNb2R1bGUsXG4gICAgTGlzdE1vZHVsZSxcbiAgICBDYWxlbmRhck1vZHVsZSxcbiAgICBJbnB1dEl0ZW1Nb2R1bGUsXG4gICAgRmxleE1vZHVsZSxcbiAgICBHcmlkTW9kdWxlLFxuICAgIFJhbmdlTW9kdWxlLFxuICAgIFNsaWRlck1vZHVsZSxcbiAgICBUZXh0YXJlYUl0ZW1Nb2R1bGUsXG4gICAgTmdab3Jyb0FudGRNb2JpbGVQaXBlc01vZHVsZSxcbiAgICBQaWNrZXJNb2R1bGUsXG4gICAgUGlja2VyVmlld01vZHVsZSxcbiAgICBJbWFnZVBpY2tlck1vZHVsZSxcbiAgICBSZXN1bHRNb2R1bGUsXG4gICAgV2hpdGVTcGFjZU1vZHVsZSxcbiAgICBXaW5nQmxhbmtNb2R1bGUsXG4gICAgTG9jYWxlUHJvdmlkZXJNb2R1bGUsXG4gICAgTmdab3Jyb0FudGRNb2JpbGVQaXBlc01vZHVsZSxcbiAgICBQYWdpbmF0aW9uTW9kdWxlLFxuICAgIFRhZ01vZHVsZSxcbiAgICBNZW51TW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgRGF0ZVBpY2tlclZpZXdNb2R1bGUsXG4gICAgRHJhd2VyTW9kdWxlLFxuICAgIFB1bGxUb1JlZnJlc2hNb2R1bGUsXG4gICAgU3dpcGVBY3Rpb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ1pvcnJvQW50ZE1vYmlsZU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmdab3Jyb0FudGRNb2JpbGVNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtBY3Rpb25TaGVldCwgVG9hc3QsIE1vZGFsLCBQaWNrZXJdXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNhbGVuZGFyIiwiSW5wdXRJdGVtIiwiU2VhcmNoQmFyIiwidG91Y2hFdmVudC5nZXRFdmVudFRhcmdldCIsIlBvc2l0aW9uaW5nLmdldFBvc2l0aW9uRWxlbWVudHMiLCJ6aENOIiwiZW5VUyIsIkRhdGVQaWNrZXIiLCJQaWNrZXIiLCJEYXRlUGlja2VyVmlldyIsIk1lbnUiLCJQYWdpbmF0aW9uIiwiUHVsbFRvUmVmcmVzaCIsInZlbG9jaXR5LmdldFZlbG9jaXR5IiwiRGF0ZVBpY2tlckNv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QUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsSUFBSTtxQkFDTDtpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsS0FBSztvQkFDWixRQUFRLEVBQUU7d0JBQ1IsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsSUFBSTtxQkFDTDtpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsS0FBSztvQkFDWixRQUFRLEVBQUU7d0JBQ1IsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsSUFBSTtxQkFDTDtpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsS0FBSztvQkFDWixRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQzNEO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQzdDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7aUJBQzVDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO2lCQUMvQjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsS0FB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Szt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLFNBQVM7d0JBQ1QsU0FBUzt3QkFDVCxJQUFJO3FCQUNMO2lCQUNGO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQ2pFO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQzlDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxNQUFNO29CQUNiLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQzdDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQzdDO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO2lCQUNwRDtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsS0FBSztvQkFDWixRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQzFEO2dCQUNEO29CQUNFLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRTt3QkFDUixLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFL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