Socket
Socket
Sign inDemoInstall

npn-slider

Package Overview
Dependencies
7
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.3 to 1.2.0

esm2015/lib/slider-handler.enum.js

2

bundles/npn-slider.umd.min.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/platform-browser")):"function"==typeof define&&define.amd?define("npn-slider",["exports","@angular/core","@angular/platform-browser"],t):t(e["npn-slider"]={},e.ng.core,e.ng.platformBrowser)}(this,function(e,s,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)};var i=function(){function e(){}return e.prototype.isNumberArray=function(e){return e.filter(function(e){return!isNaN(e)}).length===e.length},e.prototype.isNullOrEmpty=function(e){return e===undefined||null===e||""===e},e.prototype.findNextValidStepValue=function(e,t){for(var i=[],s=Math.sqrt(e),n=0;n<s;n++)e%n==0&&(e/n===n?i.push(n):(i.push(n),i.push(e/n)));i.sort(function(e,t){return(e=Number(e))<(t=Number(t))?-1:t<e?1:0});for(n=i.length-1;0<=n;n--)if(t>i[n]){t=i[n];break}return t},e}(),a=function(i){function e(e){var t=i.call(this)||this;return t.el=e,t.sliderModel=[0,0,0],t.step=1,t.sliderWidth=0,t.totalDiff=0,t.startClientX=0,t.startPleft=0,t.startPRight=0,t.sliderInitiated=!1,t.initValues=[],t.currentValues=[0,0],t.handlerX=[0,0],t.isHandlerActive=!1,t.isTouchEventStart=!1,t.isMouseEventStart=!1,t.currentHandlerIndex=0,t.stepIndicatorPositions=[],t.isDisabled=!1,t.showStepIndicator=!1,t.onChange=new s.EventEmitter,t}return function(e,t){function i(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}(e,i),Object.defineProperty(e.prototype,"setMinValues",{set:function(e){isNaN(e)||(this.minValue=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setMaxValues",{set:function(e){isNaN(e)||(this.maxValue=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setMinSelectedValues",{set:function(e){!isNaN(e)&&this.isNullOrEmpty(this.minSelected)&&(this.minSelected=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setMaxSelectedValues",{set:function(e){!isNaN(e)&&this.isNullOrEmpty(this.maxSelected)&&(this.maxSelected=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"stepValue",{set:function(e){isNaN(e)||(this.step=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setDisabled",{set:function(e){this.isDisabled="true"===e||"disabled"===e},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.initializeSlider()},e.prototype.ngOnChanges=function(e){e.setMinSelectedValues||e.setMaxSelectedValues||!this.sliderInitiated||this.resetModel()},e.prototype.initializeSlider=function(){try{this.sliderWidth=this.el.nativeElement.children[0].children[0].offsetWidth,this.resetModel(),this.sliderInitiated=!0}catch(e){console.error(e)}},e.prototype.resetModel=function(){if(this.validateSliderValues(),this.sliderModel=[this.currentValues[0]-this.initValues[0],this.currentValues[1]-this.currentValues[0],this.initValues[1]-this.currentValues[1]],this.totalDiff=this.sliderModel.reduce(function(e,t){return e+t},0),this.totalDiff%this.step!=0){var e=this.findNextValidStepValue(this.totalDiff,this.step);console.warn('Invalid step value "'+this.step+'" : and took "'+e+'" as default step'),this.step=e}this.sliderWidth/(this.totalDiff/this.step)<10&&console.error("'step' value is too small compared to min & max value difference and slider width.\n Slider might not work properly!. Provide slight large value for 'step'"),this.initializeStepIndicator(),this.setHandlerPosition()},e.prototype.validateSliderValues=function(){this.isNullOrEmpty(this.minValue)||this.isNullOrEmpty(this.maxValue)?(this.updateInitValues([0,0]),this.updateCurrentValue([0,0],!0)):this.minValue>this.maxValue?(this.updateInitValues([0,0]),this.updateCurrentValue([0,0],!0)):(this.initValues=[this.minValue,this.maxValue],this.minSelected=this.isNullOrEmpty(this.minSelected)?0:this.minSelected,this.maxSelected=this.isNullOrEmpty(this.maxSelected)?0:this.maxSelected,(this.minSelected<this.minValue||this.minSelected>this.maxValue)&&(this.minSelected=this.minValue),(this.maxSelected<this.minValue||this.maxSelected>this.maxValue)&&(this.maxSelected=this.maxValue),this.minSelected>this.maxSelected&&(this.minSelected=this.minValue,this.maxSelected=this.maxValue),this.updateCurrentValue([this.minSelected,this.maxSelected],!0))},e.prototype.initializeStepIndicator=function(){if(this.showStepIndicator){this.stepIndicatorPositions=[];var e=this.totalDiff/this.step;if(10<=this.sliderWidth/e)for(var t=this.sliderWidth/e,i=t;this.stepIndicatorPositions.length<e-1;)this.stepIndicatorPositions.push(+i.toFixed(2)),i+=t}},e.prototype.updateCurrentValue=function(e,t){void 0===t&&(t=!1),this.minSelected=this.currentValues[0]=e[0],this.maxSelected=this.currentValues[1]=e[1],t||this.onChange.emit(this.currentValues)},e.prototype.updateInitValues=function(e){this.minValue=this.initValues[0]=e[0],this.maxValue=this.initValues[1]=e[1]},e.prototype.setHandlerPosition=function(){var e=0;this.updateCurrentValue([this.initValues[0]+this.sliderModel[0],this.initValues[1]-this.sliderModel[2]]);for(var t=0,i=this.sliderModel.length-1;t<i;t++)e+=this.sliderModel[t],this.handlerX[t]=e/this.totalDiff*100},e.prototype.setModelValue=function(e,t){1<this.step&&(t=Math.round(t/this.step)*this.step),this.sliderModel[e]=t},e.prototype.setHandlerActiveOff=function(){this.isMouseEventStart=!1,this.isTouchEventStart=!1,this.isHandlerActive=!1},e.prototype.setHandlerActive=function(e,t){e.preventDefault(),this.isDisabled||(e.clientX?(this.startClientX=e.clientX,this.isMouseEventStart=!0,this.isTouchEventStart=!1):e.deltaX&&(this.startClientX=e.deltaX,this.isTouchEventStart=!0,this.isMouseEventStart=!1),(this.isMouseEventStart||this.isTouchEventStart)&&(this.currentHandlerIndex=t,this.startPleft=this.sliderModel[t],this.startPRight=this.sliderModel[t+1],this.isHandlerActive=!0))},e.prototype.handlerSliding=function(e){if(this.isMouseEventStart&&e.clientX||this.isTouchEventStart&&e.deltaX){var t=Math.round(((e.clientX||e.deltaX)-this.startClientX)/this.sliderWidth*this.totalDiff),i=this.startPleft+t,s=this.startPRight-t;0<=i&&0<=s&&(this.setModelValue(this.currentHandlerIndex,i),this.setModelValue(this.currentHandlerIndex+1,s),this.setHandlerPosition())}},e.decorators=[{type:s.Component,args:[{selector:"npn-slider",template:'\x3c!--npn-slider template--\x3e\n<div class="slider" [class.disabled]="isDisabled">\n <div class="bar" (mousemove)="handlerSliding($event)"\n (panmove)="handlerSliding($event)">\n <span class="left-handle"\n [ngClass]="{\'active\':isHandlerActive&&currentHandlerIndex==0,\'last-active\':currentHandlerIndex==0}"\n [style.left.%]="handlerX[0]"\n (mousedown)="setHandlerActive($event,0)"\n (panstart)="setHandlerActive($event,0)">\n <span class="handle-tooltip">{{currentValues[0]}}</span>\n </span>\n <div class="filler">\n <div class="step-indicators">\n <span *ngFor="let stepPos of stepIndicatorPositions" [style.left.px]="stepPos"></span>\n </div>\n <span [style.left.%]="handlerX[0]" [style.width.%]="handlerX[1] - handlerX[0]"></span>\n </div>\n <span class="right-handle"\n [ngClass]="{\'active\':isHandlerActive&&currentHandlerIndex==1, \'last-active\':currentHandlerIndex==1}"\n [style.left.%]="handlerX[1]"\n (mousedown)="setHandlerActive($event,1)"\n (panstart)="setHandlerActive($event,1)">\n <span class="handle-tooltip">{{currentValues[1]}}</span>\n </span>\n </div>\n <div class="values">\n <span>{{initValues[0]}}</span>\n <span>{{initValues[1]}}</span>\n </div>\n</div>\n',styles:['.slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:"";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:"";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:104%;margin-left:-2%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}']}]}],e.ctorParameters=function(){return[{type:s.ElementRef}]},e.propDecorators={setMinValues:[{type:s.Input,args:["min"]}],setMaxValues:[{type:s.Input,args:["max"]}],setMinSelectedValues:[{type:s.Input,args:["minSelected"]}],setMaxSelectedValues:[{type:s.Input,args:["maxSelected"]}],stepValue:[{type:s.Input,args:["step"]}],showStepIndicator:[{type:s.Input}],setDisabled:[{type:s.Input,args:["disabled"]}],onChange:[{type:s.Output}],setHandlerActiveOff:[{type:s.HostListener,args:["document:mouseup"]},{type:s.HostListener,args:["document:panend"]}]},e}(i),l=function(){function e(){}return e.decorators=[{type:s.NgModule,args:[{imports:[t.BrowserModule],declarations:[a],exports:[a]}]}],e}();e.NpnSliderComponent=a,e.NpnSliderModule=l,e.ɵa=i,Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/platform-browser")):"function"==typeof define&&define.amd?define("npn-slider",["exports","@angular/core","@angular/platform-browser"],t):t(e["npn-slider"]={},e.ng.core,e.ng.platformBrowser)}(this,function(e,s,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)};var i=function(){function e(){}return e.prototype.isNumberArray=function(e){return!(!e||!e.length||e.filter(function(e){return!isNaN(e)}).length!==e.length)},e.prototype.isNullOrEmpty=function(e){return e===undefined||null===e||""===e},e.prototype.toBoolean=function(e){for(var t=[],i=1;i<arguments.length;i++)t[i-1]=arguments[i];return""===e||"true"===e||-1!==t.indexOf(e)},e.prototype.findNextValidStepValue=function(e,t){for(var i=[],s=[],n=Math.sqrt(e),l=-1,a=0;a<n;a++)e%a==0&&(e/a===a?i.push(a):(i.push(a),s.push(e/a)));for(a=0;a<s.length;a++)if(t>s[a]){l=s[a];break}if(-1===l)for(a=i.length-1;0<=a;a--)if(t>i[a]){l=i[a];break}return-1===l?1:l},e}(),l={left:0,right:1};l[l.left]="left",l[l.right]="right";var a=function(i){function e(e){var t=i.call(this)||this;return t.el=e,t.sliderModel=[0,0,0],t.step=1,t.sliderWidth=0,t.totalDiff=0,t.startClientX=0,t.startPleft=0,t.startPRight=0,t.sliderInitiated=!1,t.initValues=[],t.currentValues=[0,0],t.handlerX=[0,0],t.isHandlerActive=!1,t.isTouchEventStart=!1,t.isMouseEventStart=!1,t.currentHandlerIndex=0,t.stepIndicatorPositions=[],t.isDisabled=!1,t.hideTooltip=!1,t.hideValues=!1,t.handlerIndex=l,t.showStepIndicator=!1,t.multiRange=!0,t.onChange=new s.EventEmitter,t}return function(e,t){function i(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}(e,i),Object.defineProperty(e.prototype,"setMinValues",{set:function(e){isNaN(e)||(this.minValue=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setMaxValues",{set:function(e){isNaN(e)||(this.maxValue=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setMinSelectedValues",{set:function(e){isNaN(e)||this.minSelected===Number(e)||(this.minSelected=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setMaxSelectedValues",{set:function(e){isNaN(e)||this.maxSelected===Number(e)||(this.maxSelected=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"stepValue",{set:function(e){isNaN(e)||(this.step=Number(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setHideTooltip",{set:function(e){this.hideTooltip=this.toBoolean(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setHideValues",{set:function(e){this.hideValues=this.toBoolean(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"setDisabled",{set:function(e){this.isDisabled=this.toBoolean(e,"disabled")},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.initializeSlider()},e.prototype.ngOnChanges=function(e){if(this.sliderInitiated){if(!this.isNullOrEmpty(e.setMinSelectedValues)&&e.setMinSelectedValues.previousValue===e.setMinSelectedValues.currentValue)return;if(!this.isNullOrEmpty(e.setMaxSelectedValues)&&e.setMaxSelectedValues.previousValue===e.setMaxSelectedValues.currentValue)return;this.resetModel()}},e.prototype.initializeSlider=function(){try{this.sliderWidth=this.el.nativeElement.children[0].children[0].offsetWidth,this.resetModel(),this.sliderInitiated=!0}catch(e){console.error(e)}},e.prototype.resetModel=function(){if(this.validateSliderValues(),this.sliderModel=[this.currentValues[0]-this.initValues[0],this.currentValues[1]-this.currentValues[0],this.initValues[1]-this.currentValues[1]],this.totalDiff=this.sliderModel.reduce(function(e,t){return e+t},0),this.totalDiff%this.step!=0){var e=this.findNextValidStepValue(this.totalDiff,this.step);console.warn('Invalid step value "'+this.step+'" : and took "'+e+'" as default step'),this.step=e}this.initializeStepIndicator(),this.setHandlerPosition()},e.prototype.validateSliderValues=function(){this.isNullOrEmpty(this.minValue)||this.isNullOrEmpty(this.maxValue)?(this.updateInitValues([0,0]),this.updateCurrentValue([0,0],!0)):this.minValue>this.maxValue?(this.updateInitValues([0,0]),this.updateCurrentValue([0,0],!0)):(this.initValues=[this.minValue,this.maxValue],this.minSelected=this.isNullOrEmpty(this.minSelected)?0:this.minSelected,this.maxSelected=this.isNullOrEmpty(this.maxSelected)?0:this.maxSelected,(this.minSelected<this.minValue||this.minSelected>this.maxValue)&&(this.minSelected=this.minValue),(this.maxSelected<this.minValue||this.maxSelected>this.maxValue)&&(this.maxSelected=this.maxValue),this.minSelected>this.maxSelected&&(this.minSelected=this.minValue,this.maxSelected=this.maxValue),this.updateCurrentValue([this.minSelected,this.maxSelected],!0))},e.prototype.initializeStepIndicator=function(){if(this.showStepIndicator){this.stepIndicatorPositions.length=0;var e=this.totalDiff/this.step;if(10<=this.sliderWidth/e)for(var t=this.sliderWidth/e,i=t;this.stepIndicatorPositions.length<e-1;)this.stepIndicatorPositions.push(+i.toFixed(2)),i+=t;else console.warn("As 'step' value is too small compared to min & max value difference and slider width,\n Step Indicator can't be displayed!. Provide slight large value for 'step'")}else this.stepIndicatorPositions.length=0},e.prototype.updateCurrentValue=function(e,t){void 0===t&&(t=!1),this.minSelected=this.currentValues[0]=e[0],this.maxSelected=this.currentValues[1]=e[1],t||this.onChange.emit(this.multiRange?this.currentValues:[this.currentValues[0]])},e.prototype.updateInitValues=function(e){this.minValue=this.initValues[0]=e[0],this.maxValue=this.initValues[1]=e[1]},e.prototype.setHandlerPosition=function(){var e=0;this.updateCurrentValue([this.initValues[0]+this.sliderModel[0],this.initValues[1]-this.sliderModel[2]]);for(var t=0,i=this.sliderModel.length-1;t<i;t++)e+=this.sliderModel[t],this.handlerX[t]=e/this.totalDiff*100},e.prototype.setModelValue=function(e,t){1<this.step&&(t=Math.round(t/this.step)*this.step),this.sliderModel[e]=t},e.prototype.setHandlerActiveOff=function(){this.isMouseEventStart=!1,this.isTouchEventStart=!1,this.isHandlerActive=!1},e.prototype.setHandlerActive=function(e,t){e.preventDefault(),this.isDisabled||(this.isNullOrEmpty(e.clientX)?this.isNullOrEmpty(e.deltaX)||(this.startClientX=e.deltaX,this.isTouchEventStart=!0,this.isMouseEventStart=!1):(this.startClientX=e.clientX,this.isMouseEventStart=!0,this.isTouchEventStart=!1),(this.isMouseEventStart||this.isTouchEventStart)&&(this.currentHandlerIndex=t,this.startPleft=this.sliderModel[t],this.startPRight=this.sliderModel[t+1],this.isHandlerActive=!0))},e.prototype.handlerSliding=function(e){if(this.isMouseEventStart&&e.clientX||this.isTouchEventStart&&e.deltaX){var t=Math.round(((e.clientX||e.deltaX)-this.startClientX)/this.sliderWidth*this.totalDiff),i=this.startPleft+t,s=this.startPRight-t;0<=i&&0<=s&&(this.setModelValue(this.currentHandlerIndex,i),this.setModelValue(this.currentHandlerIndex+1,s),this.setHandlerPosition())}},e.decorators=[{type:s.Component,args:[{selector:"npn-slider",template:'\x3c!--npn-slider template--\x3e\n<div class="slider" [class.disabled]="isDisabled">\n <div class="bar" (mousemove)="handlerSliding($event)" (panmove)="handlerSliding($event)">\n <span class="left-handle" [ngClass]="{\'active\': isHandlerActive && currentHandlerIndex === handlerIndex.left,\n \'last-active\': currentHandlerIndex === handlerIndex.left\n }"\n [style.left.%]="handlerX[handlerIndex.left]" (mousedown)="setHandlerActive($event, handlerIndex.left)" (panstart)="setHandlerActive($event, handlerIndex.left)">\n <span *ngIf="!hideTooltip" class="handle-tooltip">{{currentValues[handlerIndex.left]}}</span>\n </span>\n <div class="filler">\n <div class="step-indicators">\n <span *ngFor="let stepPos of stepIndicatorPositions" [style.left.px]="stepPos"></span>\n </div>\n <span *ngIf="multiRange" [style.left.%]="handlerX[0]" [style.width.%]="handlerX[handlerIndex.right] - handlerX[handlerIndex.left]"></span>\n <span *ngIf="!multiRange" [style.left.%]="0" [style.width.%]="handlerX[0]"></span>\n </div>\n <span *ngIf="multiRange" class="right-handle" [ngClass]="{\'active\': isHandlerActive && currentHandlerIndex === handlerIndex.right,\n \'last-active\': currentHandlerIndex === handlerIndex.right\n }"\n [style.left.%]="handlerX[handlerIndex.right]" (mousedown)="setHandlerActive($event, handlerIndex.right)"\n (panstart)="setHandlerActive($event, handlerIndex.right)">\n <span *ngIf="!hideTooltip" class="handle-tooltip">{{currentValues[handlerIndex.right]}}</span>\n </span>\n </div>\n <div class="values" *ngIf="!hideValues">\n <span>{{initValues[handlerIndex.left]}}</span>\n <span>{{initValues[handlerIndex.right]}}</span>\n </div>\n</div>\n',styles:['.slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:"";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:"";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:102%;margin-left:-1%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}']}]}],e.ctorParameters=function(){return[{type:s.ElementRef}]},e.propDecorators={setMinValues:[{type:s.Input,args:["min"]}],setMaxValues:[{type:s.Input,args:["max"]}],setMinSelectedValues:[{type:s.Input,args:["minSelected"]}],setMaxSelectedValues:[{type:s.Input,args:["maxSelected"]}],stepValue:[{type:s.Input,args:["step"]}],showStepIndicator:[{type:s.Input}],multiRange:[{type:s.Input}],setHideTooltip:[{type:s.Input,args:["hide-tooltip"]}],setHideValues:[{type:s.Input,args:["hide-values"]}],setDisabled:[{type:s.Input,args:["disabled"]}],onChange:[{type:s.Output}],setHandlerActiveOff:[{type:s.HostListener,args:["document:mouseup"]},{type:s.HostListener,args:["document:panend"]}]},e}(i),r=function(){function e(){}return e.decorators=[{type:s.NgModule,args:[{imports:[t.BrowserModule],declarations:[a],exports:[a]}]}],e}();e.NpnSliderComponent=a,e.NpnSliderModule=r,e.ɵa=i,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=npn-slider.umd.min.js.map

@@ -7,2 +7,3 @@ /**

import { Utilities } from './utilities';
import { SliderHandlerEnum } from './slider-handler.enum';
export class NpnSliderComponent extends Utilities {

@@ -32,3 +33,7 @@ /**

this.isDisabled = false;
this.hideTooltip = false;
this.hideValues = false;
this.handlerIndex = SliderHandlerEnum;
this.showStepIndicator = false;
this.multiRange = true;
this.onChange = new EventEmitter();

@@ -59,3 +64,3 @@ }

set setMinSelectedValues(value) {
if (!isNaN(value) && this.isNullOrEmpty(this.minSelected)) {
if (!isNaN(value) && this.minSelected !== Number(value)) {
this.minSelected = Number(value);

@@ -69,3 +74,3 @@ }

set setMaxSelectedValues(value) {
if (!isNaN(value) && this.isNullOrEmpty(this.maxSelected)) {
if (!isNaN(value) && this.maxSelected !== Number(value)) {
this.maxSelected = Number(value);

@@ -87,4 +92,18 @@ }

*/
set setHideTooltip(value) {
this.hideTooltip = this.toBoolean(value);
}
/**
* @param {?} value
* @return {?}
*/
set setHideValues(value) {
this.hideValues = this.toBoolean(value);
}
/**
* @param {?} value
* @return {?}
*/
set setDisabled(value) {
this.isDisabled = (value === 'true' || value === 'disabled') ? true : false;
this.isDisabled = this.toBoolean(value, 'disabled');
}

@@ -102,3 +121,11 @@ /**

ngOnChanges(changes) {
if (!changes['setMinSelectedValues'] && !changes['setMaxSelectedValues'] && this.sliderInitiated) {
if (this.sliderInitiated) {
if (!this.isNullOrEmpty(changes["setMinSelectedValues"])
&& changes["setMinSelectedValues"].previousValue === changes["setMinSelectedValues"].currentValue) {
return;
}
if (!this.isNullOrEmpty(changes["setMaxSelectedValues"])
&& changes["setMaxSelectedValues"].previousValue === changes["setMaxSelectedValues"].currentValue) {
return;
}
this.resetModel();

@@ -139,6 +166,2 @@ }

}
if (this.sliderWidth / (this.totalDiff / this.step) < 10) {
console.error(`'step' value is too small compared to min & max value difference and slider width.
Slider might not work properly!. Provide slight large value for 'step'`);
}
this.initializeStepIndicator();

@@ -184,3 +207,3 @@ this.setHandlerPosition();

if (this.showStepIndicator) {
this.stepIndicatorPositions = [];
this.stepIndicatorPositions.length = 0;
const /** @type {?} */ numOfStepIndicators = this.totalDiff / this.step;

@@ -195,3 +218,10 @@ if (this.sliderWidth / numOfStepIndicators >= 10) {

}
else {
console.warn(`As 'step' value is too small compared to min & max value difference and slider width,
Step Indicator can't be displayed!. Provide slight large value for 'step'`);
}
}
else {
this.stepIndicatorPositions.length = 0;
}
}

@@ -207,3 +237,3 @@ /**

if (!privateChange) {
this.onChange.emit(this.currentValues);
this.onChange.emit((this.multiRange) ? this.currentValues : [this.currentValues[0]]);
}

@@ -262,3 +292,3 @@ }

if (!this.isDisabled) {
if (event.clientX) {
if (!this.isNullOrEmpty(event.clientX)) {
this.startClientX = event.clientX;

@@ -268,3 +298,3 @@ this.isMouseEventStart = true;

}
else if (event.deltaX) {
else if (!this.isNullOrEmpty(event.deltaX)) {
this.startClientX = event.deltaX;

@@ -304,32 +334,31 @@ this.isTouchEventStart = true;

<div class="slider" [class.disabled]="isDisabled">
<div class="bar" (mousemove)="handlerSliding($event)"
(panmove)="handlerSliding($event)">
<span class="left-handle"
[ngClass]="{'active':isHandlerActive&&currentHandlerIndex==0,'last-active':currentHandlerIndex==0}"
[style.left.%]="handlerX[0]"
(mousedown)="setHandlerActive($event,0)"
(panstart)="setHandlerActive($event,0)">
<span class="handle-tooltip">{{currentValues[0]}}</span>
<div class="bar" (mousemove)="handlerSliding($event)" (panmove)="handlerSliding($event)">
<span class="left-handle" [ngClass]="{'active': isHandlerActive && currentHandlerIndex === handlerIndex.left,
'last-active': currentHandlerIndex === handlerIndex.left
}"
[style.left.%]="handlerX[handlerIndex.left]" (mousedown)="setHandlerActive($event, handlerIndex.left)" (panstart)="setHandlerActive($event, handlerIndex.left)">
<span *ngIf="!hideTooltip" class="handle-tooltip">{{currentValues[handlerIndex.left]}}</span>
</span>
<div class="filler">
<div class="step-indicators">
<span *ngFor="let stepPos of stepIndicatorPositions" [style.left.px]="stepPos"></span>
<span *ngFor="let stepPos of stepIndicatorPositions" [style.left.px]="stepPos"></span>
</div>
<span [style.left.%]="handlerX[0]" [style.width.%]="handlerX[1] - handlerX[0]"></span>
<span *ngIf="multiRange" [style.left.%]="handlerX[0]" [style.width.%]="handlerX[handlerIndex.right] - handlerX[handlerIndex.left]"></span>
<span *ngIf="!multiRange" [style.left.%]="0" [style.width.%]="handlerX[0]"></span>
</div>
<span class="right-handle"
[ngClass]="{'active':isHandlerActive&&currentHandlerIndex==1, 'last-active':currentHandlerIndex==1}"
[style.left.%]="handlerX[1]"
(mousedown)="setHandlerActive($event,1)"
(panstart)="setHandlerActive($event,1)">
<span class="handle-tooltip">{{currentValues[1]}}</span>
<span *ngIf="multiRange" class="right-handle" [ngClass]="{'active': isHandlerActive && currentHandlerIndex === handlerIndex.right,
'last-active': currentHandlerIndex === handlerIndex.right
}"
[style.left.%]="handlerX[handlerIndex.right]" (mousedown)="setHandlerActive($event, handlerIndex.right)"
(panstart)="setHandlerActive($event, handlerIndex.right)">
<span *ngIf="!hideTooltip" class="handle-tooltip">{{currentValues[handlerIndex.right]}}</span>
</span>
</div>
<div class="values">
<span>{{initValues[0]}}</span>
<span>{{initValues[1]}}</span>
<div class="values" *ngIf="!hideValues">
<span>{{initValues[handlerIndex.left]}}</span>
<span>{{initValues[handlerIndex.right]}}</span>
</div>
</div>
`,
styles: [`.slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:"";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:"";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:104%;margin-left:-2%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}`]
styles: [`.slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:"";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:"";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:102%;margin-left:-1%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}`]
},] },

@@ -348,2 +377,5 @@ ];

showStepIndicator: [{ type: Input }],
multiRange: [{ type: Input }],
setHideTooltip: [{ type: Input, args: ['hide-tooltip',] }],
setHideValues: [{ type: Input, args: ['hide-values',] }],
setDisabled: [{ type: Input, args: ['disabled',] }],

@@ -397,4 +429,12 @@ onChange: [{ type: Output }],

/** @type {?} */
NpnSliderComponent.prototype.hideTooltip;
/** @type {?} */
NpnSliderComponent.prototype.hideValues;
/** @type {?} */
NpnSliderComponent.prototype.handlerIndex;
/** @type {?} */
NpnSliderComponent.prototype.showStepIndicator;
/** @type {?} */
NpnSliderComponent.prototype.multiRange;
/** @type {?} */
NpnSliderComponent.prototype.onChange;

@@ -405,2 +445,2 @@ /** @type {?} */

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ucG4tc2xpZGVyLyIsInNvdXJjZXMiOlsibGliL25wbi1zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNyQyxVQUFVLEVBQVUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBcUN4QyxNQUFNLHlCQUEwQixTQUFRLFNBQVM7Ozs7SUF3Qi9DLFlBQW9CLEVBQWM7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFEVSxPQUFFLEdBQUYsRUFBRSxDQUFZOzJCQXZCWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixDQUFDOzJCQUNNLENBQUM7eUJBQ0gsQ0FBQzs0QkFDRSxDQUFDOzBCQUNILENBQUM7MkJBQ0EsQ0FBQzsrQkFLRyxLQUFLOzBCQUVELEVBQUU7NkJBQ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzsrQkFDVCxLQUFLO2lDQUNILEtBQUs7aUNBQ0wsS0FBSzttQ0FDSCxDQUFDO3NDQUNFLEVBQUU7MEJBQ2QsS0FBSztpQ0F3Q0ksS0FBSzt3QkFPYixJQUFJLFlBQVksRUFBWTtLQTNDaEQ7Ozs7O0lBRUQsSUFDSSxZQUFZLENBQUMsS0FBYTtRQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7S0FDRjs7Ozs7SUFFRCxJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FB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QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThCWDtnQkFDQyxNQUFNLEVBQUUsQ0FBQyw0L0VBQTQvRSxDQUFDO2FBQ3ZnRjs7OztZQXJDUyxVQUFVOzs7MkJBa0VqQixLQUFLLFNBQUMsS0FBSzsyQkFPWCxLQUFLLFNBQUMsS0FBSzttQ0FPWCxLQUFLLFNBQUMsYUFBYTttQ0FPbkIsS0FBSyxTQUFDLGFBQWE7d0JBTW5CLEtBQUssU0FBQyxNQUFNO2dDQU9aLEtBQUs7MEJBRUwsS0FBSyxTQUFDLFVBQVU7dUJBS2hCLE1BQU07a0NBMklOLFlBQVksU0FBQyxrQkFBa0IsY0FDL0IsWUFBWSxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLFxuICAgICAgICAgIEVsZW1lbnRSZWYsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFV0aWxpdGllcyB9IGZyb20gJy4vdXRpbGl0aWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnBuLXNsaWRlcicsXG4gIHRlbXBsYXRlOiBgPCEtLW5wbi1zbGlkZXIgdGVtcGxhdGUtLT5cclxuPGRpdiBjbGFzcz1cInNsaWRlclwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJhclwiIChtb3VzZW1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAocGFubW92ZSk9XCJoYW5kbGVyU2xpZGluZygkZXZlbnQpXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImxlZnQtaGFuZGxlXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzppc0hhbmRsZXJBY3RpdmUmJmN1cnJlbnRIYW5kbGVySW5kZXg9PTAsJ2xhc3QtYWN0aXZlJzpjdXJyZW50SGFuZGxlckluZGV4PT0wfVwiXHJcbiAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzBdXCJcclxuICAgICAgICAgIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsMClcIlxyXG4gICAgICAgICAgKHBhbnN0YXJ0KT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LDApXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbMF19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxsZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgc3RlcFBvcyBvZiBzdGVwSW5kaWNhdG9yUG9zaXRpb25zXCIgW3N0eWxlLmxlZnQucHhdPVwic3RlcFBvc1wiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxzcGFuIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbMF1cIiBbc3R5bGUud2lkdGguJV09XCJoYW5kbGVyWFsxXSAtIGhhbmRsZXJYWzBdXCI+PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cInJpZ2h0LWhhbmRsZVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6aXNIYW5kbGVyQWN0aXZlJiZjdXJyZW50SGFuZGxlckluZGV4PT0xLCAnbGFzdC1hY3RpdmUnOmN1cnJlbnRIYW5kbGVySW5kZXg9PTF9XCJcclxuICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbMV1cIlxyXG4gICAgICAgICAgKG1vdXNlZG93bik9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwxKVwiXHJcbiAgICAgICAgICAocGFuc3RhcnQpPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsMSlcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJoYW5kbGUtdG9vbHRpcFwiPnt7Y3VycmVudFZhbHVlc1sxXX19PC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ2YWx1ZXNcIj5cclxuICAgIDxzcGFuPnt7aW5pdFZhbHVlc1swXX19PC9zcGFuPlxyXG4gICAgPHNwYW4+e3tpbml0VmFsdWVzWzFdfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5gLFxuICBzdHlsZXM6IFtgLnNsaWRlciwuc2xpZGVyICp7Ym94LXNpemluZzpib3JkZXItYm94fS5zbGlkZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDozMHB4O3BhZGRpbmc6NHB4IDEwcHg7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zaXplOjEycHh9LnNsaWRlciAuYmFye3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZThlOGU4O2hlaWdodDoxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6NXB4O2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCA1cHggI2JhYmFiYX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtiYWNrZ3JvdW5kOiNiZWRjYjI7Ym9yZGVyOjdweCBzb2xpZCAjNzFiMzU3O2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O21hcmdpbi1sZWZ0Oi0xMHB4O3otaW5kZXg6MTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmxlZnQgLjJzIGVhc2V9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUubGFzdC1hY3RpdmUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlLmxhc3QtYWN0aXZle3otaW5kZXg6Mn0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMzRweDtsZWZ0Oi0xNHB4O2JvcmRlcjoxcHggc29saWQgIzhmYzM3YTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA0cHg7bWluLXdpZHRoOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZDllYmQyO2NvbG9yOiM3MWIzNTc7Zm9udC13ZWlnaHQ6NzAwO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZTtvcGFjaXR5OjB9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmJlZm9yZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmJlZm9yZXtjb250ZW50OlwiXCI7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWNvbG9yOiM4ZmMzN2E7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwNCU7bGVmdDozMyV9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmFmdGVyLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YWZ0ZXJ7Y29udGVudDpcIlwiO2JvcmRlcjo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojZDllYmQyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MzMlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLmFjdGl2ZT4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGU6aG92ZXI+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZS5hY3RpdmU+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZTpob3Zlcj4uaGFuZGxlLXRvb2x0aXB7b3BhY2l0eToxfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjYmVkY2IyfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7YmFja2dyb3VuZDojYmVkY2IyO3RyYW5zaXRpb246YWxsIC4ycyBlYXNlfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPmRpdi5zdGVwLWluZGljYXRvcnN7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5kaXYuc3RlcC1pbmRpY2F0b3JzPnNwYW57d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O2JhY2tncm91bmQ6IzcxYjM1Nztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjB9LnNsaWRlciAudmFsdWVze2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6NHB4O3dpZHRoOjEwNCU7bWFyZ2luLWxlZnQ6LTIlO2NvbG9yOiM5MDhmOTB9LnNsaWRlciAudmFsdWVzIHNwYW46Zmlyc3QtY2hpbGR7ZmxvYXQ6bGVmdH0uc2xpZGVyIC52YWx1ZXMgc3BhbjpsYXN0LWNoaWxke2Zsb2F0OnJpZ2h0fS5zbGlkZXIuZGlzYWJsZWR7b3BhY2l0eTouNH0uc2xpZGVyLmRpc2FibGVkIC5iYXJ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSwuc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGV7Y3Vyc29yOm5vdC1hbGxvd2VkfS5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwe2Rpc3BsYXk6bm9uZX1gXVxufSlcbmV4cG9ydCBjbGFzcyBOcG5TbGlkZXJDb21wb25lbnQgZXh0ZW5kcyBVdGlsaXRpZXMgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgc2xpZGVyTW9kZWwgPSBbMCwgMCwgMF07XG4gIHByaXZhdGUgc3RlcCA9IDE7XG4gIHByaXZhdGUgc2xpZGVyV2lkdGggPSAwO1xuICBwcml2YXRlIHRvdGFsRGlmZiA9IDA7XG4gIHByaXZhdGUgc3RhcnRDbGllbnRYID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBsZWZ0ID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBSaWdodCA9IDA7XG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBtYXhWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIG1pblNlbGVjdGVkOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4U2VsZWN0ZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBzbGlkZXJJbml0aWF0ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaW5pdFZhbHVlczogbnVtYmVyW10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRWYWx1ZXM6IG51bWJlcltdID0gWzAsIDBdO1xuICBwdWJsaWMgaGFuZGxlclg6IG51bWJlcltdID0gWzAsIDBdO1xuICBwdWJsaWMgaXNIYW5kbGVyQWN0aXZlID0gZmFsc2U7XG4gIHB1YmxpYyBpc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICBwdWJsaWMgaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnRIYW5kbGVySW5kZXggPSAwO1xuICBwdWJsaWMgc3RlcEluZGljYXRvclBvc2l0aW9ucyA9IFtdO1xuICBwdWJsaWMgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgQElucHV0KCdtaW4nKVxuICBzZXQgc2V0TWluVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5taW5WYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtYXgnKVxuICBzZXQgc2V0TWF4VmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5tYXhWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtaW5TZWxlY3RlZCcpXG4gIHNldCBzZXRNaW5TZWxlY3RlZFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluU2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLm1pblNlbGVjdGVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ21heFNlbGVjdGVkJylcbiAgc2V0IHNldE1heFNlbGVjdGVkVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhTZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoJ3N0ZXAnKVxuICBzZXQgc3RlcFZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGVwID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzaG93U3RlcEluZGljYXRvciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxuICBzZXQgc2V0RGlzYWJsZWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9ICh2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnZGlzYWJsZWQnKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplU2xpZGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCFjaGFuZ2VzWydzZXRNaW5TZWxlY3RlZFZhbHVlcyddICYmICFjaGFuZ2VzWydzZXRNYXhTZWxlY3RlZFZhbHVlcyddICYmIHRoaXMuc2xpZGVySW5pdGlhdGVkKSB7XG4gICAgICB0aGlzLnJlc2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0YWlsaXplIGVudGlyZSBTbGlkZXIqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZVNsaWRlcigpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVGFraW5nIHdpZHRoIG9mIHNsaWRlciBiYXIgZWxlbWVudC5cbiAgICAgIHRoaXMuc2xpZGVyV2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0ub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLnJlc2V0TW9kZWwoKTtcbiAgICAgIHRoaXMuc2xpZGVySW5pdGlhdGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGluaXRpYWxpemUgdmFyaWFibGVzIGFuZCBtb2RlbCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSByZXNldE1vZGVsKCkge1xuICAgIHRoaXMudmFsaWRhdGVTbGlkZXJWYWx1ZXMoKTtcbiAgICAvLyBTZXR0aW5nIHRoZSBtb2RlbCB2YWx1ZXNcbiAgICB0aGlzLnNsaWRlck1vZGVsID0gW1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWVzWzBdIC0gdGhpcy5pbml0VmFsdWVzWzBdLFxuICAgICAgdGhpcy5jdXJyZW50VmFsdWVzWzFdIC0gdGhpcy5jdXJyZW50VmFsdWVzWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5jdXJyZW50VmFsdWVzWzFdXG4gICAgXTtcblxuICAgIHRoaXMudG90YWxEaWZmID0gdGhpcy5zbGlkZXJNb2RlbC5yZWR1Y2UoKHByZXZWYWx1ZSwgY3VyVmFsdWUpID0+IHByZXZWYWx1ZSArIGN1clZhbHVlLCAwKTtcblxuICAgIC8vIFZhbGlkYXRpb24gZm9yIHNsaWRlciBzdGVwXG4gICAgaWYgKHRoaXMudG90YWxEaWZmICUgdGhpcy5zdGVwICE9PSAwKSB7XG4gICAgICBjb25zdCBuZXdTdGVwID0gdGhpcy5maW5kTmV4dFZhbGlkU3RlcFZhbHVlKHRoaXMudG90YWxEaWZmLCB0aGlzLnN0ZXApO1xuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHN0ZXAgdmFsdWUgXCInICsgdGhpcy5zdGVwICsgJ1wiIDogYW5kIHRvb2sgXCInICsgbmV3U3RlcCArICdcIiBhcyBkZWZhdWx0IHN0ZXAnKTtcbiAgICAgIHRoaXMuc3RlcCA9IG5ld1N0ZXA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNsaWRlcldpZHRoIC8gKHRoaXMudG90YWxEaWZmIC8gdGhpcy5zdGVwKSA8IDEwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAnc3RlcCcgdmFsdWUgaXMgdG9vIHNtYWxsIGNvbXBhcmVkIHRvIG1pbiAmIG1heCB2YWx1ZSBkaWZmZXJlbmNlIGFuZCBzbGlkZXIgd2lkdGguXG4gICAgICAgIFNsaWRlciBtaWdodCBub3Qgd29yayBwcm9wZXJseSEuIFByb3ZpZGUgc2xpZ2h0IGxhcmdlIHZhbHVlIGZvciAnc3RlcCdgKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplU3RlcEluZGljYXRvcigpO1xuICAgIHRoaXMuc2V0SGFuZGxlclBvc2l0aW9uKCk7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkbyB2YWxpZGF0aW9uIG9mIGluaXQgYW5kIHNlbGV0ZWQgcmFuZ2UgdmFsdWVzKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNsaWRlclZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluVmFsdWUpIHx8IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgdGhpcy51cGRhdGVJbml0VmFsdWVzKFswLCAwXSk7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbMCwgMF0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5taW5WYWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5pdFZhbHVlcyhbMCwgMF0pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoWzAsIDBdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0VmFsdWVzID0gW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdO1xuICAgICAgLypcbiAgICAgICogVmFsaWRhdGlvbiBmb3IgU2VsZWN0ZWQgcmFuZ2UgdmFsdWVzXG4gICAgICAqL1xuICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblNlbGVjdGVkKSA/IDAgOiB0aGlzLm1pblNlbGVjdGVkO1xuICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1heFNlbGVjdGVkKSA/IDAgOiB0aGlzLm1heFNlbGVjdGVkO1xuXG4gICAgICBpZiAodGhpcy5taW5TZWxlY3RlZCA8IHRoaXMubWluVmFsdWUgfHwgdGhpcy5taW5TZWxlY3RlZCA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3RlZCA8IHRoaXMubWluVmFsdWUgfHwgdGhpcy5tYXhTZWxlY3RlZCA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5taW5TZWxlY3RlZCA+IHRoaXMubWF4U2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoW3RoaXMubWluU2VsZWN0ZWQsIHRoaXMubWF4U2VsZWN0ZWRdLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBhZGQgc3RlcCBpbmlkaWNhdG9yIHRvIHNsaWRlciAqL1xuICBwcml2YXRlIGluaXRpYWxpemVTdGVwSW5kaWNhdG9yKCkge1xuICAgIGlmICh0aGlzLnNob3dTdGVwSW5kaWNhdG9yKSB7XG4gICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IG51bU9mU3RlcEluZGljYXRvcnMgPSB0aGlzLnRvdGFsRGlmZiAvIHRoaXMuc3RlcDtcbiAgICAgIGlmICh0aGlzLnNsaWRlcldpZHRoIC8gbnVtT2ZTdGVwSW5kaWNhdG9ycyA+PSAxMCkge1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLnNsaWRlcldpZHRoIC8gbnVtT2ZTdGVwSW5kaWNhdG9ycztcbiAgICAgICAgbGV0IGxlZnRQb3NpdGlvbiA9IGluY3JlbWVudDtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPCBudW1PZlN0ZXBJbmRpY2F0b3JzIC0gMSkge1xuICAgICAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5wdXNoKCtsZWZ0UG9zaXRpb24udG9GaXhlZCgyKSk7XG4gICAgICAgICAgbGVmdFBvc2l0aW9uICs9IGluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBjdXJyZW50IHNlbGVjdGVkIHZhbHVlcyAqL1xuICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRWYWx1ZShhcnJheVZhbHVlOiBudW1iZXJbXSwgcHJpdmF0ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gICAgaWYgKCFwcml2YXRlQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50VmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVJbml0VmFsdWVzKGFycmF5VmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuaW5pdFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhWYWx1ZSA9IHRoaXMuaW5pdFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgaGFuZGxlciBwb3NpdGlvbiAqL1xuICBwcml2YXRlIHNldEhhbmRsZXJQb3NpdGlvbigpIHtcbiAgICBsZXQgcnVubmluZ1RvdGFsID0gMDtcbiAgICAvLyBVcGRhdGluZyBzZWxlY3RlZCB2YWx1ZXMgOiBjdXJyZW50IHZhbHVlc1xuICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFtcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1swXSArIHRoaXMuc2xpZGVyTW9kZWxbMF0sXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMV0gLSB0aGlzLnNsaWRlck1vZGVsWzJdXG4gICAgXSk7XG4gICAgLypTZXR0aW5nIGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zbGlkZXJNb2RlbC5sZW5ndGggLSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJ1bm5pbmdUb3RhbCArPSB0aGlzLnNsaWRlck1vZGVsW2ldO1xuICAgICAgdGhpcy5oYW5kbGVyWFtpXSA9IChydW5uaW5nVG90YWwgLyB0aGlzLnRvdGFsRGlmZikgKiAxMDA7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IG1vZGVsIGFycmF5IHZhbHVlcyAtIHdpbGwgdHJ5IHRvIHJlZmluZSB0aGUgdmFsdWVzIHVzaW5nIHN0ZXAgKi9cbiAgcHJpdmF0ZSBzZXRNb2RlbFZhbHVlKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zdGVwID4gMSkge1xuICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gdGhpcy5zdGVwKSAqIHRoaXMuc3RlcDtcbiAgICB9XG4gICAgdGhpcy5zbGlkZXJNb2RlbFtpbmRleF0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGRpc2FibGUgaGFuZGxlciBtb3ZlbWVudCovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2V1cFxuICAqIG9uLXBhbmVuZFxuICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJylcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6cGFuZW5kJylcbiAgc2V0SGFuZGxlckFjdGl2ZU9mZigpIHtcbiAgICB0aGlzLmlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkZXRlY3Qgc3RhcnQgZHJhZ2luZyBoYW5kbGVyKi9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZWRvd25cbiAgKiBvbi1wYW5zdGFydFxuICAqL1xuICBwdWJsaWMgc2V0SGFuZGxlckFjdGl2ZShldmVudDogYW55LCBoYW5kbGVySW5kZXg6IG51bWJlcikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmIChldmVudC5jbGllbnRYKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVsdGFYKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuZGVsdGFYO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgfHwgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggPSBoYW5kbGVySW5kZXg7XG4gICAgICAgIHRoaXMuc3RhcnRQbGVmdCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4XTtcbiAgICAgICAgdGhpcy5zdGFydFBSaWdodCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4ICsgMV07XG4gICAgICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qTWV0aG9kIHRvIGNhbGN1bGF0ZSBzaWxkZXIgaGFuZGxlciBtb3ZlbWVudCAqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNlbW92ZVxuICAqIG9uLXBhbm1vdmVcbiAgKi9cbiAgcHVibGljIGhhbmRsZXJTbGlkaW5nKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgJiYgZXZlbnQuY2xpZW50WCkgfHwgKHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgJiYgZXZlbnQuZGVsdGFYKSkge1xuICAgICAgY29uc3QgbW92ZWRYID0gTWF0aC5yb3VuZCgoKGV2ZW50LmNsaWVudFggfHwgZXZlbnQuZGVsdGFYKSAtIHRoaXMuc3RhcnRDbGllbnRYKSAvIHRoaXMuc2xpZGVyV2lkdGggKiB0aGlzLnRvdGFsRGlmZik7XG4gICAgICBjb25zdCBuZXh0UExlZnQgPSB0aGlzLnN0YXJ0UGxlZnQgKyBtb3ZlZFg7XG4gICAgICBjb25zdCBuZXh0UFJpZ2h0ID0gdGhpcy5zdGFydFBSaWdodCAtIG1vdmVkWDtcbiAgICAgIGlmIChuZXh0UExlZnQgPj0gMCAmJiBuZXh0UFJpZ2h0ID49IDApIHtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCwgbmV4dFBMZWZ0KTtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCArIDEsIG5leHRQUmlnaHQpO1xuICAgICAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ucG4tc2xpZGVyLyIsInNvdXJjZXMiOlsibGliL25wbi1zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUN0QyxVQUFVLEVBQVUsWUFBWSxFQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBb0MxRCxNQUFNLHlCQUEwQixTQUFRLFNBQVM7Ozs7SUE0Qi9DLFlBQW9CLEVBQWM7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFEVSxPQUFFLEdBQUYsRUFBRSxDQUFZOzJCQTNCWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixDQUFDOzJCQUNNLENBQUM7eUJBQ0gsQ0FBQzs0QkFDRSxDQUFDOzBCQUNILENBQUM7MkJBQ0EsQ0FBQzsrQkFLRyxLQUFLOzBCQUVELEVBQUU7NkJBQ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzsrQkFDVCxLQUFLO2lDQUNILEtBQUs7aUNBQ0wsS0FBSzttQ0FDSCxDQUFDO3NDQUNFLEVBQUU7MEJBQ2QsS0FBSzsyQkFDSixLQUFLOzBCQUNOLEtBQUs7NEJBRUgsaUJBQWlCO2lDQXdDVixLQUFLOzBCQUNaLElBQUk7d0JBZUwsSUFBSSxZQUFZLEVBQVk7S0FwRGhEOzs7OztJQUVELElBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FB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O3VCQUtoQixNQUFNO2tDQW9KTixZQUFZLFNBQUMsa0JBQWtCLGNBQy9CLFlBQVksU0FBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbiAgRWxlbWVudFJlZiwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFV0aWxpdGllcyB9IGZyb20gJy4vdXRpbGl0aWVzJztcbmltcG9ydCB7IFNsaWRlckhhbmRsZXJFbnVtIH0gZnJvbSAnLi9zbGlkZXItaGFuZGxlci5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnBuLXNsaWRlcicsXG4gIHRlbXBsYXRlOiBgPCEtLW5wbi1zbGlkZXIgdGVtcGxhdGUtLT5cclxuPGRpdiBjbGFzcz1cInNsaWRlclwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJhclwiIChtb3VzZW1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiIChwYW5tb3ZlKT1cImhhbmRsZXJTbGlkaW5nKCRldmVudClcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwibGVmdC1oYW5kbGVcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzSGFuZGxlckFjdGl2ZSAmJiBjdXJyZW50SGFuZGxlckluZGV4ID09PSBoYW5kbGVySW5kZXgubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICdsYXN0LWFjdGl2ZSc6IGN1cnJlbnRIYW5kbGVySW5kZXggPT09IGhhbmRsZXJJbmRleC5sZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbaGFuZGxlckluZGV4LmxlZnRdXCIgKG1vdXNlZG93bik9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwgaGFuZGxlckluZGV4LmxlZnQpXCIgKHBhbnN0YXJ0KT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LCBoYW5kbGVySW5kZXgubGVmdClcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhaGlkZVRvb2x0aXBcIiBjbGFzcz1cImhhbmRsZS10b29sdGlwXCI+e3tjdXJyZW50VmFsdWVzW2hhbmRsZXJJbmRleC5sZWZ0XX19PC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGxlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcC1pbmRpY2F0b3JzXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHN0ZXBQb3Mgb2Ygc3RlcEluZGljYXRvclBvc2l0aW9uc1wiIFtzdHlsZS5sZWZ0LnB4XT1cInN0ZXBQb3NcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIm11bHRpUmFuZ2VcIiBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzBdXCIgW3N0eWxlLndpZHRoLiVdPVwiaGFuZGxlclhbaGFuZGxlckluZGV4LnJpZ2h0XSAtIGhhbmRsZXJYW2hhbmRsZXJJbmRleC5sZWZ0XVwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhbXVsdGlSYW5nZVwiIFtzdHlsZS5sZWZ0LiVdPVwiMFwiIFtzdHlsZS53aWR0aC4lXT1cImhhbmRsZXJYWzBdXCI+PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiAqbmdJZj1cIm11bHRpUmFuZ2VcIiBjbGFzcz1cInJpZ2h0LWhhbmRsZVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNIYW5kbGVyQWN0aXZlICYmIGN1cnJlbnRIYW5kbGVySW5kZXggPT09IGhhbmRsZXJJbmRleC5yaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICdsYXN0LWFjdGl2ZSc6IGN1cnJlbnRIYW5kbGVySW5kZXggPT09IGhhbmRsZXJJbmRleC5yaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYW2hhbmRsZXJJbmRleC5yaWdodF1cIiAobW91c2Vkb3duKT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LCBoYW5kbGVySW5kZXgucmlnaHQpXCJcclxuICAgICAgKHBhbnN0YXJ0KT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LCBoYW5kbGVySW5kZXgucmlnaHQpXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVUb29sdGlwXCIgY2xhc3M9XCJoYW5kbGUtdG9vbHRpcFwiPnt7Y3VycmVudFZhbHVlc1toYW5kbGVySW5kZXgucmlnaHRdfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInZhbHVlc1wiICpuZ0lmPVwiIWhpZGVWYWx1ZXNcIj5cclxuICAgIDxzcGFuPnt7aW5pdFZhbHVlc1toYW5kbGVySW5kZXgubGVmdF19fTwvc3Bhbj5cclxuICAgIDxzcGFuPnt7aW5pdFZhbHVlc1toYW5kbGVySW5kZXgucmlnaHRdfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5gLFxuICBzdHlsZXM6IFtgLnNsaWRlciwuc2xpZGVyICp7Ym94LXNpemluZzpib3JkZXItYm94fS5zbGlkZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDozMHB4O3BhZGRpbmc6NHB4IDEwcHg7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zaXplOjEycHh9LnNsaWRlciAuYmFye3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZThlOGU4O2hlaWdodDoxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6NXB4O2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCA1cHggI2JhYmFiYX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtiYWNrZ3JvdW5kOiNiZWRjYjI7Ym9yZGVyOjdweCBzb2xpZCAjNzFiMzU3O2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O21hcmdpbi1sZWZ0Oi0xMHB4O3otaW5kZXg6MTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmxlZnQgLjJzIGVhc2V9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUubGFzdC1hY3RpdmUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlLmxhc3QtYWN0aXZle3otaW5kZXg6Mn0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMzRweDtsZWZ0Oi0xNHB4O2JvcmRlcjoxcHggc29saWQgIzhmYzM3YTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA0cHg7bWluLXdpZHRoOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZDllYmQyO2NvbG9yOiM3MWIzNTc7Zm9udC13ZWlnaHQ6NzAwO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZTtvcGFjaXR5OjB9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmJlZm9yZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmJlZm9yZXtjb250ZW50OlwiXCI7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWNvbG9yOiM4ZmMzN2E7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwNCU7bGVmdDozMyV9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmFmdGVyLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YWZ0ZXJ7Y29udGVudDpcIlwiO2JvcmRlcjo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojZDllYmQyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MzMlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLmFjdGl2ZT4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGU6aG92ZXI+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZS5hY3RpdmU+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZTpob3Zlcj4uaGFuZGxlLXRvb2x0aXB7b3BhY2l0eToxfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjYmVkY2IyfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7YmFja2dyb3VuZDojYmVkY2IyO3RyYW5zaXRpb246YWxsIC4ycyBlYXNlfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPmRpdi5zdGVwLWluZGljYXRvcnN7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5kaXYuc3RlcC1pbmRpY2F0b3JzPnNwYW57d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O2JhY2tncm91bmQ6IzcxYjM1Nztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjB9LnNsaWRlciAudmFsdWVze2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6NHB4O3dpZHRoOjEwMiU7bWFyZ2luLWxlZnQ6LTElO2NvbG9yOiM5MDhmOTB9LnNsaWRlciAudmFsdWVzIHNwYW46Zmlyc3QtY2hpbGR7ZmxvYXQ6bGVmdH0uc2xpZGVyIC52YWx1ZXMgc3BhbjpsYXN0LWNoaWxke2Zsb2F0OnJpZ2h0fS5zbGlkZXIuZGlzYWJsZWR7b3BhY2l0eTouNH0uc2xpZGVyLmRpc2FibGVkIC5iYXJ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSwuc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGV7Y3Vyc29yOm5vdC1hbGxvd2VkfS5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwe2Rpc3BsYXk6bm9uZX1gXVxufSlcbmV4cG9ydCBjbGFzcyBOcG5TbGlkZXJDb21wb25lbnQgZXh0ZW5kcyBVdGlsaXRpZXMgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgc2xpZGVyTW9kZWwgPSBbMCwgMCwgMF07XG4gIHByaXZhdGUgc3RlcCA9IDE7XG4gIHByaXZhdGUgc2xpZGVyV2lkdGggPSAwO1xuICBwcml2YXRlIHRvdGFsRGlmZiA9IDA7XG4gIHByaXZhdGUgc3RhcnRDbGllbnRYID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBsZWZ0ID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBSaWdodCA9IDA7XG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBtYXhWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIG1pblNlbGVjdGVkOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4U2VsZWN0ZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBzbGlkZXJJbml0aWF0ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaW5pdFZhbHVlczogbnVtYmVyW10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRWYWx1ZXM6IG51bWJlcltdID0gWzAsIDBdO1xuICBwdWJsaWMgaGFuZGxlclg6IG51bWJlcltdID0gWzAsIDBdO1xuICBwdWJsaWMgaXNIYW5kbGVyQWN0aXZlID0gZmFsc2U7XG4gIHB1YmxpYyBpc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICBwdWJsaWMgaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnRIYW5kbGVySW5kZXggPSAwO1xuICBwdWJsaWMgc3RlcEluZGljYXRvclBvc2l0aW9ucyA9IFtdO1xuICBwdWJsaWMgaXNEaXNhYmxlZCA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVRvb2x0aXAgPSBmYWxzZTtcbiAgcHVibGljIGhpZGVWYWx1ZXMgPSBmYWxzZTtcblxuICBwdWJsaWMgaGFuZGxlckluZGV4ID0gU2xpZGVySGFuZGxlckVudW07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBASW5wdXQoJ21pbicpXG4gIHNldCBzZXRNaW5WYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLm1pblZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ21heCcpXG4gIHNldCBzZXRNYXhWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLm1heFZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ21pblNlbGVjdGVkJylcbiAgc2V0IHNldE1pblNlbGVjdGVkVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB0aGlzLm1pblNlbGVjdGVkICE9PSBOdW1iZXIodmFsdWUpKSB7XG4gICAgICB0aGlzLm1pblNlbGVjdGVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ21heFNlbGVjdGVkJylcbiAgc2V0IHNldE1heFNlbGVjdGVkVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB0aGlzLm1heFNlbGVjdGVkICE9PSBOdW1iZXIodmFsdWUpKSB7XG4gICAgICB0aGlzLm1heFNlbGVjdGVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdzdGVwJylcbiAgc2V0IHN0ZXBWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc3RlcCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2hvd1N0ZXBJbmRpY2F0b3IgPSBmYWxzZTtcbiAgQElucHV0KCkgbXVsdGlSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgnaGlkZS10b29sdGlwJylcbiAgc2V0IHNldEhpZGVUb29sdGlwKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5oaWRlVG9vbHRpcCA9IHRoaXMudG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuICBASW5wdXQoJ2hpZGUtdmFsdWVzJylcbiAgc2V0IHNldEhpZGVWYWx1ZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhpZGVWYWx1ZXMgPSB0aGlzLnRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgc2V0IHNldERpc2FibGVkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSB0aGlzLnRvQm9vbGVhbih2YWx1ZSwgJ2Rpc2FibGVkJyk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNsaWRlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLnNsaWRlckluaXRpYXRlZCkge1xuICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkoY2hhbmdlcy5zZXRNaW5TZWxlY3RlZFZhbHVlcylcbiAgICAgICAgJiYgY2hhbmdlcy5zZXRNaW5TZWxlY3RlZFZhbHVlcy5wcmV2aW91c1ZhbHVlID09PSBjaGFuZ2VzLnNldE1pblNlbGVjdGVkVmFsdWVzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShjaGFuZ2VzLnNldE1heFNlbGVjdGVkVmFsdWVzKVxuICAgICAgICAmJiBjaGFuZ2VzLnNldE1heFNlbGVjdGVkVmFsdWVzLnByZXZpb3VzVmFsdWUgPT09IGNoYW5nZXMuc2V0TWF4U2VsZWN0ZWRWYWx1ZXMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzZXRNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGluaXRhaWxpemUgZW50aXJlIFNsaWRlciovXG4gIHB1YmxpYyBpbml0aWFsaXplU2xpZGVyKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUYWtpbmcgd2lkdGggb2Ygc2xpZGVyIGJhciBlbGVtZW50LlxuICAgICAgdGhpcy5zbGlkZXJXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMucmVzZXRNb2RlbCgpO1xuICAgICAgdGhpcy5zbGlkZXJJbml0aWF0ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gaW5pdGlhbGl6ZSB2YXJpYWJsZXMgYW5kIG1vZGVsIHZhbHVlcyAqL1xuICBwcml2YXRlIHJlc2V0TW9kZWwoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVNsaWRlclZhbHVlcygpO1xuICAgIC8vIFNldHRpbmcgdGhlIG1vZGVsIHZhbHVlc1xuICAgIHRoaXMuc2xpZGVyTW9kZWwgPSBbXG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZXNbMF0gLSB0aGlzLmluaXRWYWx1ZXNbMF0sXG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZXNbMV0gLSB0aGlzLmN1cnJlbnRWYWx1ZXNbMF0sXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMV0gLSB0aGlzLmN1cnJlbnRWYWx1ZXNbMV1cbiAgICBdO1xuXG4gICAgdGhpcy50b3RhbERpZmYgPSB0aGlzLnNsaWRlck1vZGVsLnJlZHVjZSgocHJldlZhbHVlLCBjdXJWYWx1ZSkgPT4gcHJldlZhbHVlICsgY3VyVmFsdWUsIDApO1xuXG4gICAgLy8gVmFsaWRhdGlvbiBmb3Igc2xpZGVyIHN0ZXBcbiAgICBpZiAodGhpcy50b3RhbERpZmYgJSB0aGlzLnN0ZXAgIT09IDApIHtcbiAgICAgIGNvbnN0IG5ld1N0ZXAgPSB0aGlzLmZpbmROZXh0VmFsaWRTdGVwVmFsdWUodGhpcy50b3RhbERpZmYsIHRoaXMuc3RlcCk7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgc3RlcCB2YWx1ZSBcIicgKyB0aGlzLnN0ZXAgKyAnXCIgOiBhbmQgdG9vayBcIicgKyBuZXdTdGVwICsgJ1wiIGFzIGRlZmF1bHQgc3RlcCcpO1xuICAgICAgdGhpcy5zdGVwID0gbmV3U3RlcDtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplU3RlcEluZGljYXRvcigpO1xuICAgIHRoaXMuc2V0SGFuZGxlclBvc2l0aW9uKCk7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkbyB2YWxpZGF0aW9uIG9mIGluaXQgYW5kIHNlbGV0ZWQgcmFuZ2UgdmFsdWVzKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNsaWRlclZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluVmFsdWUpIHx8IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgdGhpcy51cGRhdGVJbml0VmFsdWVzKFswLCAwXSk7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbMCwgMF0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5taW5WYWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5pdFZhbHVlcyhbMCwgMF0pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoWzAsIDBdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0VmFsdWVzID0gW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdO1xuICAgICAgLypcbiAgICAgICogVmFsaWRhdGlvbiBmb3IgU2VsZWN0ZWQgcmFuZ2UgdmFsdWVzXG4gICAgICAqL1xuICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblNlbGVjdGVkKSA/IDAgOiB0aGlzLm1pblNlbGVjdGVkO1xuICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1heFNlbGVjdGVkKSA/IDAgOiB0aGlzLm1heFNlbGVjdGVkO1xuXG4gICAgICBpZiAodGhpcy5taW5TZWxlY3RlZCA8IHRoaXMubWluVmFsdWUgfHwgdGhpcy5taW5TZWxlY3RlZCA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3RlZCA8IHRoaXMubWluVmFsdWUgfHwgdGhpcy5tYXhTZWxlY3RlZCA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5taW5TZWxlY3RlZCA+IHRoaXMubWF4U2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoW3RoaXMubWluU2VsZWN0ZWQsIHRoaXMubWF4U2VsZWN0ZWRdLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBhZGQgc3RlcCBpbmlkaWNhdG9yIHRvIHNsaWRlciAqL1xuICBwcml2YXRlIGluaXRpYWxpemVTdGVwSW5kaWNhdG9yKCkge1xuICAgIGlmICh0aGlzLnNob3dTdGVwSW5kaWNhdG9yKSB7XG4gICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMubGVuZ3RoID0gMDtcbiAgICAgIGNvbnN0IG51bU9mU3RlcEluZGljYXRvcnMgPSB0aGlzLnRvdGFsRGlmZiAvIHRoaXMuc3RlcDtcbiAgICAgIGlmICh0aGlzLnNsaWRlcldpZHRoIC8gbnVtT2ZTdGVwSW5kaWNhdG9ycyA+PSAxMCkge1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLnNsaWRlcldpZHRoIC8gbnVtT2ZTdGVwSW5kaWNhdG9ycztcbiAgICAgICAgbGV0IGxlZnRQb3NpdGlvbiA9IGluY3JlbWVudDtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPCBudW1PZlN0ZXBJbmRpY2F0b3JzIC0gMSkge1xuICAgICAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5wdXNoKCtsZWZ0UG9zaXRpb24udG9GaXhlZCgyKSk7XG4gICAgICAgICAgbGVmdFBvc2l0aW9uICs9IGluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBBcyAnc3RlcCcgdmFsdWUgaXMgdG9vIHNtYWxsIGNvbXBhcmVkIHRvIG1pbiAmIG1heCB2YWx1ZSBkaWZmZXJlbmNlIGFuZCBzbGlkZXIgd2lkdGgsXG4gICAgICAgICAgU3RlcCBJbmRpY2F0b3IgY2FuJ3QgYmUgZGlzcGxheWVkIS4gUHJvdmlkZSBzbGlnaHQgbGFyZ2UgdmFsdWUgZm9yICdzdGVwJ2ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50VmFsdWUoYXJyYXlWYWx1ZTogbnVtYmVyW10sIHByaXZhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICAgIGlmICghcHJpdmF0ZUNoYW5nZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KCh0aGlzLm11bHRpUmFuZ2UpID8gdGhpcy5jdXJyZW50VmFsdWVzIDogW3RoaXMuY3VycmVudFZhbHVlc1swXV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBjdXJyZW50IHNlbGVjdGVkIHZhbHVlcyAqL1xuICBwcml2YXRlIHVwZGF0ZUluaXRWYWx1ZXMoYXJyYXlWYWx1ZTogbnVtYmVyW10pIHtcbiAgICB0aGlzLm1pblZhbHVlID0gdGhpcy5pbml0VmFsdWVzWzBdID0gYXJyYXlWYWx1ZVswXTtcbiAgICB0aGlzLm1heFZhbHVlID0gdGhpcy5pbml0VmFsdWVzWzFdID0gYXJyYXlWYWx1ZVsxXTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBoYW5kbGVyIHBvc2l0aW9uICovXG4gIHByaXZhdGUgc2V0SGFuZGxlclBvc2l0aW9uKCkge1xuICAgIGxldCBydW5uaW5nVG90YWwgPSAwO1xuICAgIC8vIFVwZGF0aW5nIHNlbGVjdGVkIHZhbHVlcyA6IGN1cnJlbnQgdmFsdWVzXG4gICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoW1xuICAgICAgdGhpcy5pbml0VmFsdWVzWzBdICsgdGhpcy5zbGlkZXJNb2RlbFswXSxcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1sxXSAtIHRoaXMuc2xpZGVyTW9kZWxbMl1cbiAgICBdKTtcbiAgICAvKlNldHRpbmcgaGFuZGxlciBwb3NpdGlvbiAqL1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLnNsaWRlck1vZGVsLmxlbmd0aCAtIDE7IGkgPCBsZW47IGkrKykge1xuICAgICAgcnVubmluZ1RvdGFsICs9IHRoaXMuc2xpZGVyTW9kZWxbaV07XG4gICAgICB0aGlzLmhhbmRsZXJYW2ldID0gKHJ1bm5pbmdUb3RhbCAvIHRoaXMudG90YWxEaWZmKSAqIDEwMDtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgbW9kZWwgYXJyYXkgdmFsdWVzIC0gd2lsbCB0cnkgdG8gcmVmaW5lIHRoZSB2YWx1ZXMgdXNpbmcgc3RlcCAqL1xuICBwcml2YXRlIHNldE1vZGVsVmFsdWUoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnN0ZXAgPiAxKSB7XG4gICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyB0aGlzLnN0ZXApICogdGhpcy5zdGVwO1xuICAgIH1cbiAgICB0aGlzLnNsaWRlck1vZGVsW2luZGV4XSA9IHZhbHVlO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZGlzYWJsZSBoYW5kbGVyIG1vdmVtZW50Ki9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZXVwXG4gICogb24tcGFuZW5kXG4gICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpwYW5lbmQnKVxuICBzZXRIYW5kbGVyQWN0aXZlT2ZmKCkge1xuICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5pc0hhbmRsZXJBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGRldGVjdCBzdGFydCBkcmFnaW5nIGhhbmRsZXIqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNlZG93blxuICAqIG9uLXBhbnN0YXJ0XG4gICovXG4gIHB1YmxpYyBzZXRIYW5kbGVyQWN0aXZlKGV2ZW50OiBhbnksIGhhbmRsZXJJbmRleDogbnVtYmVyKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuXG4gICAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShldmVudC5jbGllbnRYKSkge1xuICAgICAgICB0aGlzLnN0YXJ0Q2xpZW50WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkoZXZlbnQuZGVsdGFYKSkge1xuICAgICAgICB0aGlzLnN0YXJ0Q2xpZW50WCA9IGV2ZW50LmRlbHRhWDtcbiAgICAgICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTW91c2VFdmVudFN0YXJ0IHx8IHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SGFuZGxlckluZGV4ID0gaGFuZGxlckluZGV4O1xuICAgICAgICB0aGlzLnN0YXJ0UGxlZnQgPSB0aGlzLnNsaWRlck1vZGVsW2hhbmRsZXJJbmRleF07XG4gICAgICAgIHRoaXMuc3RhcnRQUmlnaHQgPSB0aGlzLnNsaWRlck1vZGVsW2hhbmRsZXJJbmRleCArIDFdO1xuICAgICAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKk1ldGhvZCB0byBjYWxjdWxhdGUgc2lsZGVyIGhhbmRsZXIgbW92ZW1lbnQgKi9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZW1vdmVcbiAgKiBvbi1wYW5tb3ZlXG4gICovXG4gIHB1YmxpYyBoYW5kbGVyU2xpZGluZyhldmVudDogYW55KSB7XG4gICAgaWYgKCh0aGlzLmlzTW91c2VFdmVudFN0YXJ0ICYmIGV2ZW50LmNsaWVudFgpIHx8ICh0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ICYmIGV2ZW50LmRlbHRhWCkpIHtcbiAgICAgIGNvbnN0IG1vdmVkWCA9IE1hdGgucm91bmQoKChldmVudC5jbGllbnRYIHx8IGV2ZW50LmRlbHRhWCkgLSB0aGlzLnN0YXJ0Q2xpZW50WCkgLyB0aGlzLnNsaWRlcldpZHRoICogdGhpcy50b3RhbERpZmYpO1xuICAgICAgY29uc3QgbmV4dFBMZWZ0ID0gdGhpcy5zdGFydFBsZWZ0ICsgbW92ZWRYO1xuICAgICAgY29uc3QgbmV4dFBSaWdodCA9IHRoaXMuc3RhcnRQUmlnaHQgLSBtb3ZlZFg7XG4gICAgICBpZiAobmV4dFBMZWZ0ID49IDAgJiYgbmV4dFBSaWdodCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZSh0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXgsIG5leHRQTGVmdCk7XG4gICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZSh0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggKyAxLCBuZXh0UFJpZ2h0KTtcbiAgICAgICAgdGhpcy5zZXRIYW5kbGVyUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==

@@ -11,3 +11,3 @@ /**

isNumberArray(arr) {
return arr.filter((value) => !isNaN(value)).length === arr.length;
return (arr && arr.length && arr.filter((value) => !isNaN(value)).length === arr.length) ? true : false;
}

@@ -22,2 +22,10 @@ /**

/**
* @param {?} obj
* @param {...?} allowedValues
* @return {?}
*/
toBoolean(obj, ...allowedValues) {
return (obj === '' || obj === 'true' || allowedValues.indexOf(obj) !== -1) ? true : false;
}
/**
* @param {?} n

@@ -28,36 +36,37 @@ * @param {?} step

findNextValidStepValue(n, step) {
const /** @type {?} */ divisors = [];
const /** @type {?} */ divisorsSet1 = [];
const /** @type {?} */ divisorsSet2 = [];
const /** @type {?} */ sqrtNum = Math.sqrt(n);
let /** @type {?} */ newStep = -1;
for (let /** @type {?} */ i = 0; i < sqrtNum; i++) {
if (n % i === 0) {
if ((n / i) === i) {
divisors.push(i);
divisorsSet1.push(i);
}
else {
divisors.push(i);
divisors.push(n / i);
divisorsSet1.push(i);
divisorsSet2.push(n / i);
}
}
}
divisors.sort((a, b) => {
a = Number(a);
b = Number(b);
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
});
for (let /** @type {?} */ i = divisors.length - 1; i >= 0; i--) {
if (step > divisors[i]) {
step = divisors[i];
// Picking newStep by checking large set of divisors first
for (let /** @type {?} */ i = 0; i < divisorsSet2.length; i++) {
if (step > divisorsSet2[i]) {
newStep = divisorsSet2[i];
break;
}
}
return step;
if (newStep === -1) {
// checking set of small divisors if newStep didn't find out till.
for (let /** @type {?} */ i = divisorsSet1.length - 1; i >= 0; i--) {
if (step > divisorsSet1[i]) {
newStep = divisorsSet1[i];
break;
}
}
}
return (newStep === -1) ? 1 : newStep;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbnBuLXNsaWRlci8iLCJzb3VyY2VzIjpbImxpYi91dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLE1BQU07Ozs7O0lBRUcsYUFBYSxDQUFDLEdBQWE7UUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUM7Ozs7OztJQUU3RCxhQUFhLENBQUMsR0FBUTtRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Ozs7Ozs7SUFFbEQsc0JBQXNCLENBQUMsQ0FBUyxFQUFFLElBQVk7UUFDbkQsdUJBQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5Qix1QkFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1NBQ0Y7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2QsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7WUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsS0FBSyxDQUFDO2FBQ1A7U0FDRjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7O0NBRWYiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbi8qVXRpbGl0aWVzICovXHJcbmV4cG9ydCBjbGFzcyBVdGlsaXRpZXMge1xyXG5cclxuICBwdWJsaWMgaXNOdW1iZXJBcnJheShhcnI6IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYXJyLmZpbHRlcigodmFsdWUpID0+ICFpc05hTih2YWx1ZSkpLmxlbmd0aCA9PT0gYXJyLmxlbmd0aDtcclxuICB9XHJcbiAgcHVibGljIGlzTnVsbE9yRW1wdHkob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgb2JqID09PSAnJztcclxuICB9XHJcbiAgcHVibGljIGZpbmROZXh0VmFsaWRTdGVwVmFsdWUobjogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZGl2aXNvcnM6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCBzcXJ0TnVtID0gTWF0aC5zcXJ0KG4pO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcXJ0TnVtOyBpKyspIHtcclxuICAgICAgaWYgKG4gJSBpID09PSAwKSB7XHJcbiAgICAgICAgaWYgKChuIC8gaSkgPT09IGkpIHtcclxuICAgICAgICAgIGRpdmlzb3JzLnB1c2goaSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpdmlzb3JzLnB1c2goaSk7XHJcbiAgICAgICAgICBkaXZpc29ycy5wdXNoKG4gLyBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRpdmlzb3JzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgYSA9IE51bWJlcihhKTtcclxuICAgICAgYiA9IE51bWJlcihiKTtcclxuICAgICAgaWYgKGEgPCBiKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhID4gYikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICBmb3IgKGxldCBpID0gZGl2aXNvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKHN0ZXAgPiBkaXZpc29yc1tpXSkge1xyXG4gICAgICAgIHN0ZXAgPSBkaXZpc29yc1tpXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0ZXA7XHJcbiAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbnBuLXNsaWRlci8iLCJzb3VyY2VzIjpbImxpYi91dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLE1BQU07Ozs7O0lBRUcsYUFBYSxDQUFDLEdBQWE7UUFDaEMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7Ozs7O0lBRW5HLGFBQWEsQ0FBQyxHQUFRO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQzs7Ozs7OztJQUVsRCxTQUFTLENBQUMsR0FBUSxFQUFFLEdBQUcsYUFBYTtRQUN6QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7Ozs7OztJQUVyRixzQkFBc0IsQ0FBQyxDQUFTLEVBQUUsSUFBWTtRQUNuRCx1QkFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLHVCQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsdUJBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IscUJBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO2FBQ0Y7U0FDRjs7UUFFRCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQzthQUNQO1NBQ0Y7UUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUNuQixHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsS0FBSyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUNELE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzs7Q0FFekMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbi8qVXRpbGl0aWVzICovXHJcbmV4cG9ydCBjbGFzcyBVdGlsaXRpZXMge1xyXG5cclxuICBwdWJsaWMgaXNOdW1iZXJBcnJheShhcnI6IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKGFyciAmJiBhcnIubGVuZ3RoICYmIGFyci5maWx0ZXIoKHZhbHVlKSA9PiAhaXNOYU4odmFsdWUpKS5sZW5ndGggPT09IGFyci5sZW5ndGgpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgaXNOdWxsT3JFbXB0eShvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBvYmogPT09ICcnO1xyXG4gIH1cclxuICBwdWJsaWMgdG9Cb29sZWFuKG9iajogYW55LCAuLi5hbGxvd2VkVmFsdWVzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKG9iaiA9PT0gJycgfHwgb2JqID09PSAndHJ1ZScgfHwgYWxsb3dlZFZhbHVlcy5pbmRleE9mKG9iaikgIT09IC0xKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGZpbmROZXh0VmFsaWRTdGVwVmFsdWUobjogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZGl2aXNvcnNTZXQxOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgY29uc3QgZGl2aXNvcnNTZXQyOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3FydE51bSA9IE1hdGguc3FydChuKTtcclxuICAgIGxldCBuZXdTdGVwID0gLTE7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNxcnROdW07IGkrKykge1xyXG4gICAgICBpZiAobiAlIGkgPT09IDApIHtcclxuICAgICAgICBpZiAoKG4gLyBpKSA9PT0gaSkge1xyXG4gICAgICAgICAgZGl2aXNvcnNTZXQxLnB1c2goaSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpdmlzb3JzU2V0MS5wdXNoKGkpO1xyXG4gICAgICAgICAgZGl2aXNvcnNTZXQyLnB1c2gobiAvIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gUGlja2luZyBuZXdTdGVwIGJ5IGNoZWNraW5nIGxhcmdlIHNldCBvZiBkaXZpc29ycyBmaXJzdFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXZpc29yc1NldDIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHN0ZXAgPiBkaXZpc29yc1NldDJbaV0pIHtcclxuICAgICAgICBuZXdTdGVwID0gZGl2aXNvcnNTZXQyW2ldO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobmV3U3RlcCA9PT0gLTEpIHsgLy8gY2hlY2tpbmcgc2V0IG9mIHNtYWxsIGRpdmlzb3JzIGlmIG5ld1N0ZXAgZGlkbid0IGZpbmQgb3V0IHRpbGwuXHJcbiAgICAgIGZvciAobGV0IGkgPSBkaXZpc29yc1NldDEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAoc3RlcCA+IGRpdmlzb3JzU2V0MVtpXSkge1xyXG4gICAgICAgICAgbmV3U3RlcCA9IGRpdmlzb3JzU2V0MVtpXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXdTdGVwID09PSAtMSkgPyAxIDogbmV3U3RlcDtcclxuICB9XHJcbn1cclxuIl19

@@ -8,2 +8,3 @@ /**

import { Utilities } from './utilities';
import { SliderHandlerEnum } from './slider-handler.enum';
var NpnSliderComponent = /** @class */ (function (_super) {

@@ -31,3 +32,7 @@ tslib_1.__extends(NpnSliderComponent, _super);

_this.isDisabled = false;
_this.hideTooltip = false;
_this.hideValues = false;
_this.handlerIndex = SliderHandlerEnum;
_this.showStepIndicator = false;
_this.multiRange = true;
_this.onChange = new EventEmitter();

@@ -68,3 +73,3 @@ return _this;

function (value) {
if (!isNaN(value) && this.isNullOrEmpty(this.minSelected)) {
if (!isNaN(value) && this.minSelected !== Number(value)) {
this.minSelected = Number(value);

@@ -82,3 +87,3 @@ }

function (value) {
if (!isNaN(value) && this.isNullOrEmpty(this.maxSelected)) {
if (!isNaN(value) && this.maxSelected !== Number(value)) {
this.maxSelected = Number(value);

@@ -103,2 +108,24 @@ }

});
Object.defineProperty(NpnSliderComponent.prototype, "setHideTooltip", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.hideTooltip = this.toBoolean(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NpnSliderComponent.prototype, "setHideValues", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.hideValues = this.toBoolean(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NpnSliderComponent.prototype, "setDisabled", {

@@ -110,3 +137,3 @@ set: /**

function (value) {
this.isDisabled = (value === 'true' || value === 'disabled') ? true : false;
this.isDisabled = this.toBoolean(value, 'disabled');
},

@@ -134,3 +161,11 @@ enumerable: true,

function (changes) {
if (!changes['setMinSelectedValues'] && !changes['setMaxSelectedValues'] && this.sliderInitiated) {
if (this.sliderInitiated) {
if (!this.isNullOrEmpty(changes["setMinSelectedValues"])
&& changes["setMinSelectedValues"].previousValue === changes["setMinSelectedValues"].currentValue) {
return;
}
if (!this.isNullOrEmpty(changes["setMaxSelectedValues"])
&& changes["setMaxSelectedValues"].previousValue === changes["setMaxSelectedValues"].currentValue) {
return;
}
this.resetModel();

@@ -177,5 +212,2 @@ }

}
if (this.sliderWidth / (this.totalDiff / this.step) < 10) {
console.error("'step' value is too small compared to min & max value difference and slider width.\n Slider might not work properly!. Provide slight large value for 'step'");
}
this.initializeStepIndicator();

@@ -227,3 +259,3 @@ this.setHandlerPosition();

if (this.showStepIndicator) {
this.stepIndicatorPositions = [];
this.stepIndicatorPositions.length = 0;
var /** @type {?} */ numOfStepIndicators = this.totalDiff / this.step;

@@ -238,3 +270,9 @@ if (this.sliderWidth / numOfStepIndicators >= 10) {

}
else {
console.warn("As 'step' value is too small compared to min & max value difference and slider width,\n Step Indicator can't be displayed!. Provide slight large value for 'step'");
}
}
else {
this.stepIndicatorPositions.length = 0;
}
};

@@ -256,3 +294,3 @@ /**

if (!privateChange) {
this.onChange.emit(this.currentValues);
this.onChange.emit((this.multiRange) ? this.currentValues : [this.currentValues[0]]);
}

@@ -336,3 +374,3 @@ };

if (!this.isDisabled) {
if (event.clientX) {
if (!this.isNullOrEmpty(event.clientX)) {
this.startClientX = event.clientX;

@@ -342,3 +380,3 @@ this.isMouseEventStart = true;

}
else if (event.deltaX) {
else if (!this.isNullOrEmpty(event.deltaX)) {
this.startClientX = event.deltaX;

@@ -379,4 +417,4 @@ this.isTouchEventStart = true;

selector: 'npn-slider',
template: "<!--npn-slider template-->\n<div class=\"slider\" [class.disabled]=\"isDisabled\">\n <div class=\"bar\" (mousemove)=\"handlerSliding($event)\"\n (panmove)=\"handlerSliding($event)\">\n <span class=\"left-handle\"\n [ngClass]=\"{'active':isHandlerActive&&currentHandlerIndex==0,'last-active':currentHandlerIndex==0}\"\n [style.left.%]=\"handlerX[0]\"\n (mousedown)=\"setHandlerActive($event,0)\"\n (panstart)=\"setHandlerActive($event,0)\">\n <span class=\"handle-tooltip\">{{currentValues[0]}}</span>\n </span>\n <div class=\"filler\">\n <div class=\"step-indicators\">\n <span *ngFor=\"let stepPos of stepIndicatorPositions\" [style.left.px]=\"stepPos\"></span>\n </div>\n <span [style.left.%]=\"handlerX[0]\" [style.width.%]=\"handlerX[1] - handlerX[0]\"></span>\n </div>\n <span class=\"right-handle\"\n [ngClass]=\"{'active':isHandlerActive&&currentHandlerIndex==1, 'last-active':currentHandlerIndex==1}\"\n [style.left.%]=\"handlerX[1]\"\n (mousedown)=\"setHandlerActive($event,1)\"\n (panstart)=\"setHandlerActive($event,1)\">\n <span class=\"handle-tooltip\">{{currentValues[1]}}</span>\n </span>\n </div>\n <div class=\"values\">\n <span>{{initValues[0]}}</span>\n <span>{{initValues[1]}}</span>\n </div>\n</div>\n",
styles: [".slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:\"\";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:\"\";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:104%;margin-left:-2%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}"]
template: "<!--npn-slider template-->\n<div class=\"slider\" [class.disabled]=\"isDisabled\">\n <div class=\"bar\" (mousemove)=\"handlerSliding($event)\" (panmove)=\"handlerSliding($event)\">\n <span class=\"left-handle\" [ngClass]=\"{'active': isHandlerActive && currentHandlerIndex === handlerIndex.left,\n 'last-active': currentHandlerIndex === handlerIndex.left\n }\"\n [style.left.%]=\"handlerX[handlerIndex.left]\" (mousedown)=\"setHandlerActive($event, handlerIndex.left)\" (panstart)=\"setHandlerActive($event, handlerIndex.left)\">\n <span *ngIf=\"!hideTooltip\" class=\"handle-tooltip\">{{currentValues[handlerIndex.left]}}</span>\n </span>\n <div class=\"filler\">\n <div class=\"step-indicators\">\n <span *ngFor=\"let stepPos of stepIndicatorPositions\" [style.left.px]=\"stepPos\"></span>\n </div>\n <span *ngIf=\"multiRange\" [style.left.%]=\"handlerX[0]\" [style.width.%]=\"handlerX[handlerIndex.right] - handlerX[handlerIndex.left]\"></span>\n <span *ngIf=\"!multiRange\" [style.left.%]=\"0\" [style.width.%]=\"handlerX[0]\"></span>\n </div>\n <span *ngIf=\"multiRange\" class=\"right-handle\" [ngClass]=\"{'active': isHandlerActive && currentHandlerIndex === handlerIndex.right,\n 'last-active': currentHandlerIndex === handlerIndex.right\n }\"\n [style.left.%]=\"handlerX[handlerIndex.right]\" (mousedown)=\"setHandlerActive($event, handlerIndex.right)\"\n (panstart)=\"setHandlerActive($event, handlerIndex.right)\">\n <span *ngIf=\"!hideTooltip\" class=\"handle-tooltip\">{{currentValues[handlerIndex.right]}}</span>\n </span>\n </div>\n <div class=\"values\" *ngIf=\"!hideValues\">\n <span>{{initValues[handlerIndex.left]}}</span>\n <span>{{initValues[handlerIndex.right]}}</span>\n </div>\n</div>\n",
styles: [".slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:\"\";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:\"\";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:102%;margin-left:-1%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}"]
},] },

@@ -395,2 +433,5 @@ ];

showStepIndicator: [{ type: Input }],
multiRange: [{ type: Input }],
setHideTooltip: [{ type: Input, args: ['hide-tooltip',] }],
setHideValues: [{ type: Input, args: ['hide-values',] }],
setDisabled: [{ type: Input, args: ['disabled',] }],

@@ -447,4 +488,12 @@ onChange: [{ type: Output }],

/** @type {?} */
NpnSliderComponent.prototype.hideTooltip;
/** @type {?} */
NpnSliderComponent.prototype.hideValues;
/** @type {?} */
NpnSliderComponent.prototype.handlerIndex;
/** @type {?} */
NpnSliderComponent.prototype.showStepIndicator;
/** @type {?} */
NpnSliderComponent.prototype.multiRange;
/** @type {?} */
NpnSliderComponent.prototype.onChange;

@@ -455,2 +504,2 @@ /** @type {?} */

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ucG4tc2xpZGVyLyIsInNvdXJjZXMiOlsibGliL25wbi1zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFDckMsVUFBVSxFQUFVLFlBQVksRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7SUFxQ0EsOENBQVM7SUF3Qi9DLDRCQUFvQixFQUFjO1FBQWxDLFlBQ0UsaUJBQU8sU0FDUjtRQUZtQixRQUFFLEdBQUYsRUFBRSxDQUFZOzRCQXZCWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNoQixDQUFDOzRCQUNNLENBQUM7MEJBQ0gsQ0FBQzs2QkFDRSxDQUFDOzJCQUNILENBQUM7NEJBQ0EsQ0FBQztnQ0FLRyxLQUFLOzJCQUVELEVBQUU7OEJBQ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FDVCxLQUFLO2tDQUNILEtBQUs7a0NBQ0wsS0FBSztvQ0FDSCxDQUFDO3VDQUNFLEVBQUU7MkJBQ2QsS0FBSztrQ0F3Q0ksS0FBSzt5QkFPYixJQUFJLFlBQVksRUFBWTs7S0EzQ2hEO0lBRUQsc0JBQ0ksNENBQVk7Ozs7O1FBRGhCLFVBQ2lCLEtBQWE7WUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMvQjtTQUNGOzs7T0FBQTtJQUVELHNCQUNJLDRDQUFZOzs7OztRQURoQixVQUNpQixLQUFhO1lBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxD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LG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0Y7OztnQkFyU0osU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsazJDQThCWDtvQkFDQyxNQUFNLEVBQUUsQ0FBQyxnZ0ZBQTQvRSxDQUFDO2lCQUN2Z0Y7Ozs7Z0JBckNTLFVBQVU7OzsrQkFrRWpCLEtBQUssU0FBQyxLQUFLOytCQU9YLEtBQUssU0FBQyxLQUFLO3VDQU9YLEtBQUssU0FBQyxhQUFhO3VDQU9uQixLQUFLLFNBQUMsYUFBYTs0QkFNbkIsS0FBSyxTQUFDLE1BQU07b0NBT1osS0FBSzs4QkFFTCxLQUFLLFNBQUMsVUFBVTsyQkFLaEIsTUFBTTtzQ0EySU4sWUFBWSxTQUFDLGtCQUFrQixjQUMvQixZQUFZLFNBQUMsaUJBQWlCOzs2QkF4UGpDO0VBdUN3QyxTQUFTO1NBQXBDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLFxuICAgICAgICAgIEVsZW1lbnRSZWYsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFV0aWxpdGllcyB9IGZyb20gJy4vdXRpbGl0aWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnBuLXNsaWRlcicsXG4gIHRlbXBsYXRlOiBgPCEtLW5wbi1zbGlkZXIgdGVtcGxhdGUtLT5cclxuPGRpdiBjbGFzcz1cInNsaWRlclwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJhclwiIChtb3VzZW1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAocGFubW92ZSk9XCJoYW5kbGVyU2xpZGluZygkZXZlbnQpXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImxlZnQtaGFuZGxlXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzppc0hhbmRsZXJBY3RpdmUmJmN1cnJlbnRIYW5kbGVySW5kZXg9PTAsJ2xhc3QtYWN0aXZlJzpjdXJyZW50SGFuZGxlckluZGV4PT0wfVwiXHJcbiAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzBdXCJcclxuICAgICAgICAgIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsMClcIlxyXG4gICAgICAgICAgKHBhbnN0YXJ0KT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LDApXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbMF19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxsZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgc3RlcFBvcyBvZiBzdGVwSW5kaWNhdG9yUG9zaXRpb25zXCIgW3N0eWxlLmxlZnQucHhdPVwic3RlcFBvc1wiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxzcGFuIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbMF1cIiBbc3R5bGUud2lkdGguJV09XCJoYW5kbGVyWFsxXSAtIGhhbmRsZXJYWzBdXCI+PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cInJpZ2h0LWhhbmRsZVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6aXNIYW5kbGVyQWN0aXZlJiZjdXJyZW50SGFuZGxlckluZGV4PT0xLCAnbGFzdC1hY3RpdmUnOmN1cnJlbnRIYW5kbGVySW5kZXg9PTF9XCJcclxuICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbMV1cIlxyXG4gICAgICAgICAgKG1vdXNlZG93bik9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwxKVwiXHJcbiAgICAgICAgICAocGFuc3RhcnQpPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsMSlcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJoYW5kbGUtdG9vbHRpcFwiPnt7Y3VycmVudFZhbHVlc1sxXX19PC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ2YWx1ZXNcIj5cclxuICAgIDxzcGFuPnt7aW5pdFZhbHVlc1swXX19PC9zcGFuPlxyXG4gICAgPHNwYW4+e3tpbml0VmFsdWVzWzFdfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5gLFxuICBzdHlsZXM6IFtgLnNsaWRlciwuc2xpZGVyICp7Ym94LXNpemluZzpib3JkZXItYm94fS5zbGlkZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDozMHB4O3BhZGRpbmc6NHB4IDEwcHg7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zaXplOjEycHh9LnNsaWRlciAuYmFye3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZThlOGU4O2hlaWdodDoxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6NXB4O2JveC1zaGFkb3c6aW5zZXQgMXB4IDFweCA1cHggI2JhYmFiYX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtiYWNrZ3JvdW5kOiNiZWRjYjI7Ym9yZGVyOjdweCBzb2xpZCAjNzFiMzU3O2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O21hcmdpbi1sZWZ0Oi0xMHB4O3otaW5kZXg6MTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmxlZnQgLjJzIGVhc2V9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUubGFzdC1hY3RpdmUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlLmxhc3QtYWN0aXZle3otaW5kZXg6Mn0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMzRweDtsZWZ0Oi0xNHB4O2JvcmRlcjoxcHggc29saWQgIzhmYzM3YTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA0cHg7bWluLXdpZHRoOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZDllYmQyO2NvbG9yOiM3MWIzNTc7Zm9udC13ZWlnaHQ6NzAwO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZTtvcGFjaXR5OjB9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmJlZm9yZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmJlZm9yZXtjb250ZW50OlwiXCI7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWNvbG9yOiM4ZmMzN2E7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwNCU7bGVmdDozMyV9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmFmdGVyLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YWZ0ZXJ7Y29udGVudDpcIlwiO2JvcmRlcjo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojZDllYmQyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MzMlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLmFjdGl2ZT4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGU6aG92ZXI+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZS5hY3RpdmU+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZTpob3Zlcj4uaGFuZGxlLXRvb2x0aXB7b3BhY2l0eToxfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjYmVkY2IyfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7YmFja2dyb3VuZDojYmVkY2IyO3RyYW5zaXRpb246YWxsIC4ycyBlYXNlfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPmRpdi5zdGVwLWluZGljYXRvcnN7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5kaXYuc3RlcC1pbmRpY2F0b3JzPnNwYW57d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O2JhY2tncm91bmQ6IzcxYjM1Nztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjB9LnNsaWRlciAudmFsdWVze2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6NHB4O3dpZHRoOjEwNCU7bWFyZ2luLWxlZnQ6LTIlO2NvbG9yOiM5MDhmOTB9LnNsaWRlciAudmFsdWVzIHNwYW46Zmlyc3QtY2hpbGR7ZmxvYXQ6bGVmdH0uc2xpZGVyIC52YWx1ZXMgc3BhbjpsYXN0LWNoaWxke2Zsb2F0OnJpZ2h0fS5zbGlkZXIuZGlzYWJsZWR7b3BhY2l0eTouNH0uc2xpZGVyLmRpc2FibGVkIC5iYXJ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSwuc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGV7Y3Vyc29yOm5vdC1hbGxvd2VkfS5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwe2Rpc3BsYXk6bm9uZX1gXVxufSlcbmV4cG9ydCBjbGFzcyBOcG5TbGlkZXJDb21wb25lbnQgZXh0ZW5kcyBVdGlsaXRpZXMgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgc2xpZGVyTW9kZWwgPSBbMCwgMCwgMF07XG4gIHByaXZhdGUgc3RlcCA9IDE7XG4gIHByaXZhdGUgc2xpZGVyV2lkdGggPSAwO1xuICBwcml2YXRlIHRvdGFsRGlmZiA9IDA7XG4gIHByaXZhdGUgc3RhcnRDbGllbnRYID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBsZWZ0ID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBSaWdodCA9IDA7XG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBtYXhWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIG1pblNlbGVjdGVkOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4U2VsZWN0ZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBzbGlkZXJJbml0aWF0ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaW5pdFZhbHVlczogbnVtYmVyW10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRWYWx1ZXM6IG51bWJlcltdID0gWzAsIDBdO1xuICBwdWJsaWMgaGFuZGxlclg6IG51bWJlcltdID0gWzAsIDBdO1xuICBwdWJsaWMgaXNIYW5kbGVyQWN0aXZlID0gZmFsc2U7XG4gIHB1YmxpYyBpc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICBwdWJsaWMgaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnRIYW5kbGVySW5kZXggPSAwO1xuICBwdWJsaWMgc3RlcEluZGljYXRvclBvc2l0aW9ucyA9IFtdO1xuICBwdWJsaWMgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgQElucHV0KCdtaW4nKVxuICBzZXQgc2V0TWluVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5taW5WYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtYXgnKVxuICBzZXQgc2V0TWF4VmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5tYXhWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtaW5TZWxlY3RlZCcpXG4gIHNldCBzZXRNaW5TZWxlY3RlZFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluU2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLm1pblNlbGVjdGVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ21heFNlbGVjdGVkJylcbiAgc2V0IHNldE1heFNlbGVjdGVkVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhTZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoJ3N0ZXAnKVxuICBzZXQgc3RlcFZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGVwID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzaG93U3RlcEluZGljYXRvciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxuICBzZXQgc2V0RGlzYWJsZWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9ICh2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnZGlzYWJsZWQnKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplU2xpZGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCFjaGFuZ2VzWydzZXRNaW5TZWxlY3RlZFZhbHVlcyddICYmICFjaGFuZ2VzWydzZXRNYXhTZWxlY3RlZFZhbHVlcyddICYmIHRoaXMuc2xpZGVySW5pdGlhdGVkKSB7XG4gICAgICB0aGlzLnJlc2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0YWlsaXplIGVudGlyZSBTbGlkZXIqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZVNsaWRlcigpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVGFraW5nIHdpZHRoIG9mIHNsaWRlciBiYXIgZWxlbWVudC5cbiAgICAgIHRoaXMuc2xpZGVyV2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0ub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLnJlc2V0TW9kZWwoKTtcbiAgICAgIHRoaXMuc2xpZGVySW5pdGlhdGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGluaXRpYWxpemUgdmFyaWFibGVzIGFuZCBtb2RlbCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSByZXNldE1vZGVsKCkge1xuICAgIHRoaXMudmFsaWRhdGVTbGlkZXJWYWx1ZXMoKTtcbiAgICAvLyBTZXR0aW5nIHRoZSBtb2RlbCB2YWx1ZXNcbiAgICB0aGlzLnNsaWRlck1vZGVsID0gW1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWVzWzBdIC0gdGhpcy5pbml0VmFsdWVzWzBdLFxuICAgICAgdGhpcy5jdXJyZW50VmFsdWVzWzFdIC0gdGhpcy5jdXJyZW50VmFsdWVzWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5jdXJyZW50VmFsdWVzWzFdXG4gICAgXTtcblxuICAgIHRoaXMudG90YWxEaWZmID0gdGhpcy5zbGlkZXJNb2RlbC5yZWR1Y2UoKHByZXZWYWx1ZSwgY3VyVmFsdWUpID0+IHByZXZWYWx1ZSArIGN1clZhbHVlLCAwKTtcblxuICAgIC8vIFZhbGlkYXRpb24gZm9yIHNsaWRlciBzdGVwXG4gICAgaWYgKHRoaXMudG90YWxEaWZmICUgdGhpcy5zdGVwICE9PSAwKSB7XG4gICAgICBjb25zdCBuZXdTdGVwID0gdGhpcy5maW5kTmV4dFZhbGlkU3RlcFZhbHVlKHRoaXMudG90YWxEaWZmLCB0aGlzLnN0ZXApO1xuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHN0ZXAgdmFsdWUgXCInICsgdGhpcy5zdGVwICsgJ1wiIDogYW5kIHRvb2sgXCInICsgbmV3U3RlcCArICdcIiBhcyBkZWZhdWx0IHN0ZXAnKTtcbiAgICAgIHRoaXMuc3RlcCA9IG5ld1N0ZXA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNsaWRlcldpZHRoIC8gKHRoaXMudG90YWxEaWZmIC8gdGhpcy5zdGVwKSA8IDEwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAnc3RlcCcgdmFsdWUgaXMgdG9vIHNtYWxsIGNvbXBhcmVkIHRvIG1pbiAmIG1heCB2YWx1ZSBkaWZmZXJlbmNlIGFuZCBzbGlkZXIgd2lkdGguXG4gICAgICAgIFNsaWRlciBtaWdodCBub3Qgd29yayBwcm9wZXJseSEuIFByb3ZpZGUgc2xpZ2h0IGxhcmdlIHZhbHVlIGZvciAnc3RlcCdgKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplU3RlcEluZGljYXRvcigpO1xuICAgIHRoaXMuc2V0SGFuZGxlclBvc2l0aW9uKCk7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkbyB2YWxpZGF0aW9uIG9mIGluaXQgYW5kIHNlbGV0ZWQgcmFuZ2UgdmFsdWVzKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNsaWRlclZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluVmFsdWUpIHx8IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgdGhpcy51cGRhdGVJbml0VmFsdWVzKFswLCAwXSk7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbMCwgMF0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5taW5WYWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5pdFZhbHVlcyhbMCwgMF0pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoWzAsIDBdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0VmFsdWVzID0gW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdO1xuICAgICAgLypcbiAgICAgICogVmFsaWRhdGlvbiBmb3IgU2VsZWN0ZWQgcmFuZ2UgdmFsdWVzXG4gICAgICAqL1xuICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblNlbGVjdGVkKSA/IDAgOiB0aGlzLm1pblNlbGVjdGVkO1xuICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1heFNlbGVjdGVkKSA/IDAgOiB0aGlzLm1heFNlbGVjdGVkO1xuXG4gICAgICBpZiAodGhpcy5taW5TZWxlY3RlZCA8IHRoaXMubWluVmFsdWUgfHwgdGhpcy5taW5TZWxlY3RlZCA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3RlZCA8IHRoaXMubWluVmFsdWUgfHwgdGhpcy5tYXhTZWxlY3RlZCA+IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5taW5TZWxlY3RlZCA+IHRoaXMubWF4U2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoW3RoaXMubWluU2VsZWN0ZWQsIHRoaXMubWF4U2VsZWN0ZWRdLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBhZGQgc3RlcCBpbmlkaWNhdG9yIHRvIHNsaWRlciAqL1xuICBwcml2YXRlIGluaXRpYWxpemVTdGVwSW5kaWNhdG9yKCkge1xuICAgIGlmICh0aGlzLnNob3dTdGVwSW5kaWNhdG9yKSB7XG4gICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IG51bU9mU3RlcEluZGljYXRvcnMgPSB0aGlzLnRvdGFsRGlmZiAvIHRoaXMuc3RlcDtcbiAgICAgIGlmICh0aGlzLnNsaWRlcldpZHRoIC8gbnVtT2ZTdGVwSW5kaWNhdG9ycyA+PSAxMCkge1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLnNsaWRlcldpZHRoIC8gbnVtT2ZTdGVwSW5kaWNhdG9ycztcbiAgICAgICAgbGV0IGxlZnRQb3NpdGlvbiA9IGluY3JlbWVudDtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPCBudW1PZlN0ZXBJbmRpY2F0b3JzIC0gMSkge1xuICAgICAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5wdXNoKCtsZWZ0UG9zaXRpb24udG9GaXhlZCgyKSk7XG4gICAgICAgICAgbGVmdFBvc2l0aW9uICs9IGluY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBjdXJyZW50IHNlbGVjdGVkIHZhbHVlcyAqL1xuICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRWYWx1ZShhcnJheVZhbHVlOiBudW1iZXJbXSwgcHJpdmF0ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gICAgaWYgKCFwcml2YXRlQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50VmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVJbml0VmFsdWVzKGFycmF5VmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuaW5pdFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhWYWx1ZSA9IHRoaXMuaW5pdFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgaGFuZGxlciBwb3NpdGlvbiAqL1xuICBwcml2YXRlIHNldEhhbmRsZXJQb3NpdGlvbigpIHtcbiAgICBsZXQgcnVubmluZ1RvdGFsID0gMDtcbiAgICAvLyBVcGRhdGluZyBzZWxlY3RlZCB2YWx1ZXMgOiBjdXJyZW50IHZhbHVlc1xuICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFtcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1swXSArIHRoaXMuc2xpZGVyTW9kZWxbMF0sXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMV0gLSB0aGlzLnNsaWRlck1vZGVsWzJdXG4gICAgXSk7XG4gICAgLypTZXR0aW5nIGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zbGlkZXJNb2RlbC5sZW5ndGggLSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJ1bm5pbmdUb3RhbCArPSB0aGlzLnNsaWRlck1vZGVsW2ldO1xuICAgICAgdGhpcy5oYW5kbGVyWFtpXSA9IChydW5uaW5nVG90YWwgLyB0aGlzLnRvdGFsRGlmZikgKiAxMDA7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IG1vZGVsIGFycmF5IHZhbHVlcyAtIHdpbGwgdHJ5IHRvIHJlZmluZSB0aGUgdmFsdWVzIHVzaW5nIHN0ZXAgKi9cbiAgcHJpdmF0ZSBzZXRNb2RlbFZhbHVlKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zdGVwID4gMSkge1xuICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gdGhpcy5zdGVwKSAqIHRoaXMuc3RlcDtcbiAgICB9XG4gICAgdGhpcy5zbGlkZXJNb2RlbFtpbmRleF0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGRpc2FibGUgaGFuZGxlciBtb3ZlbWVudCovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2V1cFxuICAqIG9uLXBhbmVuZFxuICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJylcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6cGFuZW5kJylcbiAgc2V0SGFuZGxlckFjdGl2ZU9mZigpIHtcbiAgICB0aGlzLmlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkZXRlY3Qgc3RhcnQgZHJhZ2luZyBoYW5kbGVyKi9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZWRvd25cbiAgKiBvbi1wYW5zdGFydFxuICAqL1xuICBwdWJsaWMgc2V0SGFuZGxlckFjdGl2ZShldmVudDogYW55LCBoYW5kbGVySW5kZXg6IG51bWJlcikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmIChldmVudC5jbGllbnRYKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVsdGFYKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuZGVsdGFYO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgfHwgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggPSBoYW5kbGVySW5kZXg7XG4gICAgICAgIHRoaXMuc3RhcnRQbGVmdCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4XTtcbiAgICAgICAgdGhpcy5zdGFydFBSaWdodCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4ICsgMV07XG4gICAgICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qTWV0aG9kIHRvIGNhbGN1bGF0ZSBzaWxkZXIgaGFuZGxlciBtb3ZlbWVudCAqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNlbW92ZVxuICAqIG9uLXBhbm1vdmVcbiAgKi9cbiAgcHVibGljIGhhbmRsZXJTbGlkaW5nKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgJiYgZXZlbnQuY2xpZW50WCkgfHwgKHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgJiYgZXZlbnQuZGVsdGFYKSkge1xuICAgICAgY29uc3QgbW92ZWRYID0gTWF0aC5yb3VuZCgoKGV2ZW50LmNsaWVudFggfHwgZXZlbnQuZGVsdGFYKSAtIHRoaXMuc3RhcnRDbGllbnRYKSAvIHRoaXMuc2xpZGVyV2lkdGggKiB0aGlzLnRvdGFsRGlmZik7XG4gICAgICBjb25zdCBuZXh0UExlZnQgPSB0aGlzLnN0YXJ0UGxlZnQgKyBtb3ZlZFg7XG4gICAgICBjb25zdCBuZXh0UFJpZ2h0ID0gdGhpcy5zdGFydFBSaWdodCAtIG1vdmVkWDtcbiAgICAgIGlmIChuZXh0UExlZnQgPj0gMCAmJiBuZXh0UFJpZ2h0ID49IDApIHtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCwgbmV4dFBMZWZ0KTtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCArIDEsIG5leHRQUmlnaHQpO1xuICAgICAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ucG4tc2xpZGVyLyIsInNvdXJjZXMiOlsibGliL25wbi1zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFDdEMsVUFBVSxFQUFVLFlBQVksRUFDakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7SUFvQ2xCLDhDQUFTO0lBNEIvQyw0QkFBb0IsRUFBYztRQUFsQyxZQUNFLGlCQUFPLFNBQ1I7UUFGbUIsUUFBRSxHQUFGLEVBQUUsQ0FBWTs0QkEzQlosQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDaEIsQ0FBQzs0QkFDTSxDQUFDOzBCQUNILENBQUM7NkJBQ0UsQ0FBQzsyQkFDSCxDQUFDOzRCQUNBLENBQUM7Z0NBS0csS0FBSzsyQkFFRCxFQUFFOzhCQUNDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDWCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBQ1QsS0FBSztrQ0FDSCxLQUFLO2tDQUNMLEtBQUs7b0NBQ0gsQ0FBQzt1Q0FDRSxFQUFFOzJCQUNkLEtBQUs7NEJBQ0osS0FBSzsyQkFDTixLQUFLOzZCQUVILGlCQUFpQjtrQ0F3Q1YsS0FBSzsyQkFDWixJQUFJO3lCQWVMLElBQUksWUFBWSxFQUFZOztLQXBEaEQ7SUFFRCxzQkFDSSw0Q0FBWTs7Ozs7UUFEaEIsVUFDaUIsS0FBYTtZQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxD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VUFBVTs7OytCQXVFVCxLQUFLLFNBQUMsS0FBSzsrQkFPWCxLQUFLLFNBQUMsS0FBSzt1Q0FPWCxLQUFLLFNBQUMsYUFBYTt1Q0FPbkIsS0FBSyxTQUFDLGFBQWE7NEJBTW5CLEtBQUssU0FBQyxNQUFNO29DQU9aLEtBQUs7NkJBQ0wsS0FBSztpQ0FDTCxLQUFLLFNBQUMsY0FBYztnQ0FJcEIsS0FBSyxTQUFDLGFBQWE7OEJBS25CLEtBQUssU0FBQyxVQUFVOzJCQUtoQixNQUFNO3NDQW9KTixZQUFZLFNBQUMsa0JBQWtCLGNBQy9CLFlBQVksU0FBQyxpQkFBaUI7OzZCQWhSakM7RUF5Q3dDLFNBQVM7U0FBcEMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG4gIEVsZW1lbnRSZWYsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVdGlsaXRpZXMgfSBmcm9tICcuL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBTbGlkZXJIYW5kbGVyRW51bSB9IGZyb20gJy4vc2xpZGVyLWhhbmRsZXIuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25wbi1zbGlkZXInLFxuICB0ZW1wbGF0ZTogYDwhLS1ucG4tc2xpZGVyIHRlbXBsYXRlLS0+XHJcbjxkaXYgY2xhc3M9XCJzbGlkZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJiYXJcIiAobW91c2Vtb3ZlKT1cImhhbmRsZXJTbGlkaW5nKCRldmVudClcIiAocGFubW92ZSk9XCJoYW5kbGVyU2xpZGluZygkZXZlbnQpXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImxlZnQtaGFuZGxlXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0hhbmRsZXJBY3RpdmUgJiYgY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LmxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnbGFzdC1hY3RpdmUnOiBjdXJyZW50SGFuZGxlckluZGV4ID09PSBoYW5kbGVySW5kZXgubGVmdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYW2hhbmRsZXJJbmRleC5sZWZ0XVwiIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5sZWZ0KVwiIChwYW5zdGFydCk9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwgaGFuZGxlckluZGV4LmxlZnQpXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVUb29sdGlwXCIgY2xhc3M9XCJoYW5kbGUtdG9vbHRpcFwiPnt7Y3VycmVudFZhbHVlc1toYW5kbGVySW5kZXgubGVmdF19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxsZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yc1wiPlxyXG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBzdGVwUG9zIG9mIHN0ZXBJbmRpY2F0b3JQb3NpdGlvbnNcIiBbc3R5bGUubGVmdC5weF09XCJzdGVwUG9zXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aVJhbmdlXCIgW3N0eWxlLmxlZnQuJV09XCJoYW5kbGVyWFswXVwiIFtzdHlsZS53aWR0aC4lXT1cImhhbmRsZXJYW2hhbmRsZXJJbmRleC5yaWdodF0gLSBoYW5kbGVyWFtoYW5kbGVySW5kZXgubGVmdF1cIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiIW11bHRpUmFuZ2VcIiBbc3R5bGUubGVmdC4lXT1cIjBcIiBbc3R5bGUud2lkdGguJV09XCJoYW5kbGVyWFswXVwiPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gKm5nSWY9XCJtdWx0aVJhbmdlXCIgY2xhc3M9XCJyaWdodC1oYW5kbGVcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzSGFuZGxlckFjdGl2ZSAmJiBjdXJyZW50SGFuZGxlckluZGV4ID09PSBoYW5kbGVySW5kZXgucmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnbGFzdC1hY3RpdmUnOiBjdXJyZW50SGFuZGxlckluZGV4ID09PSBoYW5kbGVySW5kZXgucmlnaHRcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgW3N0eWxlLmxlZnQuJV09XCJoYW5kbGVyWFtoYW5kbGVySW5kZXgucmlnaHRdXCIgKG1vdXNlZG93bik9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwgaGFuZGxlckluZGV4LnJpZ2h0KVwiXHJcbiAgICAgIChwYW5zdGFydCk9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwgaGFuZGxlckluZGV4LnJpZ2h0KVwiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFoaWRlVG9vbHRpcFwiIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbaGFuZGxlckluZGV4LnJpZ2h0XX19PC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ2YWx1ZXNcIiAqbmdJZj1cIiFoaWRlVmFsdWVzXCI+XHJcbiAgICA8c3Bhbj57e2luaXRWYWx1ZXNbaGFuZGxlckluZGV4LmxlZnRdfX08L3NwYW4+XHJcbiAgICA8c3Bhbj57e2luaXRWYWx1ZXNbaGFuZGxlckluZGV4LnJpZ2h0XX19PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuYCxcbiAgc3R5bGVzOiBbYC5zbGlkZXIsLnNsaWRlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uc2xpZGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MzBweDtwYWRkaW5nOjRweCAxMHB4O2N1cnNvcjpkZWZhdWx0O2ZvbnQtc2l6ZToxMnB4fS5zbGlkZXIgLmJhcnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2U4ZThlODtoZWlnaHQ6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjVweDtib3gtc2hhZG93Omluc2V0IDFweCAxcHggNXB4ICNiYWJhYmF9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDojYmVkY2IyO2JvcmRlcjo3cHggc29saWQgIzcxYjM1Nztib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweDttYXJnaW4tbGVmdDotMTBweDt6LWluZGV4OjE7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpsZWZ0IC4ycyBlYXNlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLmxhc3QtYWN0aXZlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZS5sYXN0LWFjdGl2ZXt6LWluZGV4OjJ9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXB7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTM0cHg7bGVmdDotMTRweDtib3JkZXI6MXB4IHNvbGlkICM4ZmMzN2E7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNHB4O21pbi13aWR0aDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2Q5ZWJkMjtjb2xvcjojNzFiMzU3O2ZvbnQtd2VpZ2h0OjcwMDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2U7b3BhY2l0eTowfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDpiZWZvcmUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDpiZWZvcmV7Y29udGVudDpcIlwiO2JvcmRlcjo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojOGZjMzdhO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDQlO2xlZnQ6MzMlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDphZnRlciwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmFmdGVye2NvbnRlbnQ6XCJcIjtib3JkZXI6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3AtY29sb3I6I2Q5ZWJkMjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjMzJX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZS5hY3RpdmU+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlOmhvdmVyPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUuYWN0aXZlPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGU6aG92ZXI+LmhhbmRsZS10b29sdGlwe29wYWNpdHk6MX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6NXB4O2JvcmRlcjoxcHggc29saWQgI2JlZGNiMn0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5zcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JhY2tncm91bmQ6I2JlZGNiMjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5kaXYuc3RlcC1pbmRpY2F0b3Jze3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+ZGl2LnN0ZXAtaW5kaWNhdG9ycz5zcGFue3dpZHRoOjFweDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDtiYWNrZ3JvdW5kOiM3MWIzNTc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5zbGlkZXIgLnZhbHVlc3tkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjRweDt3aWR0aDoxMDIlO21hcmdpbi1sZWZ0Oi0xJTtjb2xvcjojOTA4ZjkwfS5zbGlkZXIgLnZhbHVlcyBzcGFuOmZpcnN0LWNoaWxke2Zsb2F0OmxlZnR9LnNsaWRlciAudmFsdWVzIHNwYW46bGFzdC1jaGlsZHtmbG9hdDpyaWdodH0uc2xpZGVyLmRpc2FibGVke29wYWNpdHk6LjR9LnNsaWRlci5kaXNhYmxlZCAuYmFye2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ubGVmdC1oYW5kbGUsLnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ucmlnaHQtaGFuZGxle2N1cnNvcjpub3QtYWxsb3dlZH0uc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXAsLnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcHtkaXNwbGF5Om5vbmV9YF1cbn0pXG5leHBvcnQgY2xhc3MgTnBuU2xpZGVyQ29tcG9uZW50IGV4dGVuZHMgVXRpbGl0aWVzIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHNsaWRlck1vZGVsID0gWzAsIDAsIDBdO1xuICBwcml2YXRlIHN0ZXAgPSAxO1xuICBwcml2YXRlIHNsaWRlcldpZHRoID0gMDtcbiAgcHJpdmF0ZSB0b3RhbERpZmYgPSAwO1xuICBwcml2YXRlIHN0YXJ0Q2xpZW50WCA9IDA7XG4gIHByaXZhdGUgc3RhcnRQbGVmdCA9IDA7XG4gIHByaXZhdGUgc3RhcnRQUmlnaHQgPSAwO1xuICBwcml2YXRlIG1pblZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4VmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBtaW5TZWxlY3RlZDogbnVtYmVyO1xuICBwcml2YXRlIG1heFNlbGVjdGVkOiBudW1iZXI7XG4gIHByaXZhdGUgc2xpZGVySW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGluaXRWYWx1ZXM6IG51bWJlcltdID0gW107XG4gIHB1YmxpYyBjdXJyZW50VmFsdWVzOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgcHVibGljIGhhbmRsZXJYOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgcHVibGljIGlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgcHVibGljIGlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50SGFuZGxlckluZGV4ID0gMDtcbiAgcHVibGljIHN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMgPSBbXTtcbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgcHVibGljIGhpZGVUb29sdGlwID0gZmFsc2U7XG4gIHB1YmxpYyBoaWRlVmFsdWVzID0gZmFsc2U7XG5cbiAgcHVibGljIGhhbmRsZXJJbmRleCA9IFNsaWRlckhhbmRsZXJFbnVtO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgQElucHV0KCdtaW4nKVxuICBzZXQgc2V0TWluVmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5taW5WYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtYXgnKVxuICBzZXQgc2V0TWF4VmFsdWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5tYXhWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtaW5TZWxlY3RlZCcpXG4gIHNldCBzZXRNaW5TZWxlY3RlZFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdGhpcy5taW5TZWxlY3RlZCAhPT0gTnVtYmVyKHZhbHVlKSkge1xuICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtYXhTZWxlY3RlZCcpXG4gIHNldCBzZXRNYXhTZWxlY3RlZFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdGhpcy5tYXhTZWxlY3RlZCAhPT0gTnVtYmVyKHZhbHVlKSkge1xuICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgnc3RlcCcpXG4gIHNldCBzdGVwVmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aGlzLnN0ZXAgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNob3dTdGVwSW5kaWNhdG9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpUmFuZ2UgPSB0cnVlO1xuICBASW5wdXQoJ2hpZGUtdG9vbHRpcCcpXG4gIHNldCBzZXRIaWRlVG9vbHRpcCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaGlkZVRvb2x0aXAgPSB0aGlzLnRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCdoaWRlLXZhbHVlcycpXG4gIHNldCBzZXRIaWRlVmFsdWVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5oaWRlVmFsdWVzID0gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCdkaXNhYmxlZCcpXG4gIHNldCBzZXREaXNhYmxlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc0Rpc2FibGVkID0gdGhpcy50b0Jvb2xlYW4odmFsdWUsICdkaXNhYmxlZCcpO1xuICB9XG5cbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXJbXT4oKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVTbGlkZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5zbGlkZXJJbml0aWF0ZWQpIHtcbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KGNoYW5nZXMuc2V0TWluU2VsZWN0ZWRWYWx1ZXMpXG4gICAgICAgICYmIGNoYW5nZXMuc2V0TWluU2VsZWN0ZWRWYWx1ZXMucHJldmlvdXNWYWx1ZSA9PT0gY2hhbmdlcy5zZXRNaW5TZWxlY3RlZFZhbHVlcy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkoY2hhbmdlcy5zZXRNYXhTZWxlY3RlZFZhbHVlcylcbiAgICAgICAgJiYgY2hhbmdlcy5zZXRNYXhTZWxlY3RlZFZhbHVlcy5wcmV2aW91c1ZhbHVlID09PSBjaGFuZ2VzLnNldE1heFNlbGVjdGVkVmFsdWVzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlc2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0YWlsaXplIGVudGlyZSBTbGlkZXIqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZVNsaWRlcigpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVGFraW5nIHdpZHRoIG9mIHNsaWRlciBiYXIgZWxlbWVudC5cbiAgICAgIHRoaXMuc2xpZGVyV2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0ub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLnJlc2V0TW9kZWwoKTtcbiAgICAgIHRoaXMuc2xpZGVySW5pdGlhdGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGluaXRpYWxpemUgdmFyaWFibGVzIGFuZCBtb2RlbCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSByZXNldE1vZGVsKCkge1xuICAgIHRoaXMudmFsaWRhdGVTbGlkZXJWYWx1ZXMoKTtcbiAgICAvLyBTZXR0aW5nIHRoZSBtb2RlbCB2YWx1ZXNcbiAgICB0aGlzLnNsaWRlck1vZGVsID0gW1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWVzWzBdIC0gdGhpcy5pbml0VmFsdWVzWzBdLFxuICAgICAgdGhpcy5jdXJyZW50VmFsdWVzWzFdIC0gdGhpcy5jdXJyZW50VmFsdWVzWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5jdXJyZW50VmFsdWVzWzFdXG4gICAgXTtcblxuICAgIHRoaXMudG90YWxEaWZmID0gdGhpcy5zbGlkZXJNb2RlbC5yZWR1Y2UoKHByZXZWYWx1ZSwgY3VyVmFsdWUpID0+IHByZXZWYWx1ZSArIGN1clZhbHVlLCAwKTtcblxuICAgIC8vIFZhbGlkYXRpb24gZm9yIHNsaWRlciBzdGVwXG4gICAgaWYgKHRoaXMudG90YWxEaWZmICUgdGhpcy5zdGVwICE9PSAwKSB7XG4gICAgICBjb25zdCBuZXdTdGVwID0gdGhpcy5maW5kTmV4dFZhbGlkU3RlcFZhbHVlKHRoaXMudG90YWxEaWZmLCB0aGlzLnN0ZXApO1xuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHN0ZXAgdmFsdWUgXCInICsgdGhpcy5zdGVwICsgJ1wiIDogYW5kIHRvb2sgXCInICsgbmV3U3RlcCArICdcIiBhcyBkZWZhdWx0IHN0ZXAnKTtcbiAgICAgIHRoaXMuc3RlcCA9IG5ld1N0ZXA7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZXBJbmRpY2F0b3IoKTtcbiAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZG8gdmFsaWRhdGlvbiBvZiBpbml0IGFuZCBzZWxldGVkIHJhbmdlIHZhbHVlcyovXG4gIHByaXZhdGUgdmFsaWRhdGVTbGlkZXJWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblZhbHVlKSB8fCB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhWYWx1ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5pdFZhbHVlcyhbMCwgMF0pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoWzAsIDBdLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluVmFsdWUgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUluaXRWYWx1ZXMoWzAsIDBdKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFswLCAwXSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFZhbHVlcyA9IFt0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlXTtcbiAgICAgIC8qXG4gICAgICAqIFZhbGlkYXRpb24gZm9yIFNlbGVjdGVkIHJhbmdlIHZhbHVlc1xuICAgICAgKi9cbiAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5taW5TZWxlY3RlZCkgPyAwIDogdGhpcy5taW5TZWxlY3RlZDtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhTZWxlY3RlZCkgPyAwIDogdGhpcy5tYXhTZWxlY3RlZDtcblxuICAgICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgPCB0aGlzLm1pblZhbHVlIHx8IHRoaXMubWluU2VsZWN0ZWQgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0ZWQgPCB0aGlzLm1pblZhbHVlIHx8IHRoaXMubWF4U2VsZWN0ZWQgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgPiB0aGlzLm1heFNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFt0aGlzLm1pblNlbGVjdGVkLCB0aGlzLm1heFNlbGVjdGVkXSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gYWRkIHN0ZXAgaW5pZGljYXRvciB0byBzbGlkZXIgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RlcEluZGljYXRvcigpIHtcbiAgICBpZiAodGhpcy5zaG93U3RlcEluZGljYXRvcikge1xuICAgICAgdGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zLmxlbmd0aCA9IDA7XG4gICAgICBjb25zdCBudW1PZlN0ZXBJbmRpY2F0b3JzID0gdGhpcy50b3RhbERpZmYgLyB0aGlzLnN0ZXA7XG4gICAgICBpZiAodGhpcy5zbGlkZXJXaWR0aCAvIG51bU9mU3RlcEluZGljYXRvcnMgPj0gMTApIHtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gdGhpcy5zbGlkZXJXaWR0aCAvIG51bU9mU3RlcEluZGljYXRvcnM7XG4gICAgICAgIGxldCBsZWZ0UG9zaXRpb24gPSBpbmNyZW1lbnQ7XG4gICAgICAgIHdoaWxlICh0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMubGVuZ3RoIDwgbnVtT2ZTdGVwSW5kaWNhdG9ycyAtIDEpIHtcbiAgICAgICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMucHVzaCgrbGVmdFBvc2l0aW9uLnRvRml4ZWQoMikpO1xuICAgICAgICAgIGxlZnRQb3NpdGlvbiArPSBpbmNyZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQXMgJ3N0ZXAnIHZhbHVlIGlzIHRvbyBzbWFsbCBjb21wYXJlZCB0byBtaW4gJiBtYXggdmFsdWUgZGlmZmVyZW5jZSBhbmQgc2xpZGVyIHdpZHRoLFxuICAgICAgICAgIFN0ZXAgSW5kaWNhdG9yIGNhbid0IGJlIGRpc3BsYXllZCEuIFByb3ZpZGUgc2xpZ2h0IGxhcmdlIHZhbHVlIGZvciAnc3RlcCdgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWVzICovXG4gIHByaXZhdGUgdXBkYXRlQ3VycmVudFZhbHVlKGFycmF5VmFsdWU6IG51bWJlcltdLCBwcml2YXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5jdXJyZW50VmFsdWVzWzBdID0gYXJyYXlWYWx1ZVswXTtcbiAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5jdXJyZW50VmFsdWVzWzFdID0gYXJyYXlWYWx1ZVsxXTtcbiAgICBpZiAoIXByaXZhdGVDaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgodGhpcy5tdWx0aVJhbmdlKSA/IHRoaXMuY3VycmVudFZhbHVlcyA6IFt0aGlzLmN1cnJlbnRWYWx1ZXNbMF1dKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVJbml0VmFsdWVzKGFycmF5VmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuaW5pdFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhWYWx1ZSA9IHRoaXMuaW5pdFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgaGFuZGxlciBwb3NpdGlvbiAqL1xuICBwcml2YXRlIHNldEhhbmRsZXJQb3NpdGlvbigpIHtcbiAgICBsZXQgcnVubmluZ1RvdGFsID0gMDtcbiAgICAvLyBVcGRhdGluZyBzZWxlY3RlZCB2YWx1ZXMgOiBjdXJyZW50IHZhbHVlc1xuICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFtcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1swXSArIHRoaXMuc2xpZGVyTW9kZWxbMF0sXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMV0gLSB0aGlzLnNsaWRlck1vZGVsWzJdXG4gICAgXSk7XG4gICAgLypTZXR0aW5nIGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zbGlkZXJNb2RlbC5sZW5ndGggLSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJ1bm5pbmdUb3RhbCArPSB0aGlzLnNsaWRlck1vZGVsW2ldO1xuICAgICAgdGhpcy5oYW5kbGVyWFtpXSA9IChydW5uaW5nVG90YWwgLyB0aGlzLnRvdGFsRGlmZikgKiAxMDA7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IG1vZGVsIGFycmF5IHZhbHVlcyAtIHdpbGwgdHJ5IHRvIHJlZmluZSB0aGUgdmFsdWVzIHVzaW5nIHN0ZXAgKi9cbiAgcHJpdmF0ZSBzZXRNb2RlbFZhbHVlKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zdGVwID4gMSkge1xuICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gdGhpcy5zdGVwKSAqIHRoaXMuc3RlcDtcbiAgICB9XG4gICAgdGhpcy5zbGlkZXJNb2RlbFtpbmRleF0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGRpc2FibGUgaGFuZGxlciBtb3ZlbWVudCovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2V1cFxuICAqIG9uLXBhbmVuZFxuICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJylcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6cGFuZW5kJylcbiAgc2V0SGFuZGxlckFjdGl2ZU9mZigpIHtcbiAgICB0aGlzLmlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkZXRlY3Qgc3RhcnQgZHJhZ2luZyBoYW5kbGVyKi9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZWRvd25cbiAgKiBvbi1wYW5zdGFydFxuICAqL1xuICBwdWJsaWMgc2V0SGFuZGxlckFjdGl2ZShldmVudDogYW55LCBoYW5kbGVySW5kZXg6IG51bWJlcikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcblxuICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkoZXZlbnQuY2xpZW50WCkpIHtcbiAgICAgICAgdGhpcy5zdGFydENsaWVudFggPSBldmVudC5jbGllbnRYO1xuICAgICAgICB0aGlzLmlzTW91c2VFdmVudFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc051bGxPckVtcHR5KGV2ZW50LmRlbHRhWCkpIHtcbiAgICAgICAgdGhpcy5zdGFydENsaWVudFggPSBldmVudC5kZWx0YVg7XG4gICAgICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc01vdXNlRXZlbnRTdGFydCB8fCB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCA9IGhhbmRsZXJJbmRleDtcbiAgICAgICAgdGhpcy5zdGFydFBsZWZ0ID0gdGhpcy5zbGlkZXJNb2RlbFtoYW5kbGVySW5kZXhdO1xuICAgICAgICB0aGlzLnN0YXJ0UFJpZ2h0ID0gdGhpcy5zbGlkZXJNb2RlbFtoYW5kbGVySW5kZXggKyAxXTtcbiAgICAgICAgdGhpcy5pc0hhbmRsZXJBY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLypNZXRob2QgdG8gY2FsY3VsYXRlIHNpbGRlciBoYW5kbGVyIG1vdmVtZW50ICovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2Vtb3ZlXG4gICogb24tcGFubW92ZVxuICAqL1xuICBwdWJsaWMgaGFuZGxlclNsaWRpbmcoZXZlbnQ6IGFueSkge1xuICAgIGlmICgodGhpcy5pc01vdXNlRXZlbnRTdGFydCAmJiBldmVudC5jbGllbnRYKSB8fCAodGhpcy5pc1RvdWNoRXZlbnRTdGFydCAmJiBldmVudC5kZWx0YVgpKSB7XG4gICAgICBjb25zdCBtb3ZlZFggPSBNYXRoLnJvdW5kKCgoZXZlbnQuY2xpZW50WCB8fCBldmVudC5kZWx0YVgpIC0gdGhpcy5zdGFydENsaWVudFgpIC8gdGhpcy5zbGlkZXJXaWR0aCAqIHRoaXMudG90YWxEaWZmKTtcbiAgICAgIGNvbnN0IG5leHRQTGVmdCA9IHRoaXMuc3RhcnRQbGVmdCArIG1vdmVkWDtcbiAgICAgIGNvbnN0IG5leHRQUmlnaHQgPSB0aGlzLnN0YXJ0UFJpZ2h0IC0gbW92ZWRYO1xuICAgICAgaWYgKG5leHRQTGVmdCA+PSAwICYmIG5leHRQUmlnaHQgPj0gMCkge1xuICAgICAgICB0aGlzLnNldE1vZGVsVmFsdWUodGhpcy5jdXJyZW50SGFuZGxlckluZGV4LCBuZXh0UExlZnQpO1xuICAgICAgICB0aGlzLnNldE1vZGVsVmFsdWUodGhpcy5jdXJyZW50SGFuZGxlckluZGV4ICsgMSwgbmV4dFBSaWdodCk7XG4gICAgICAgIHRoaXMuc2V0SGFuZGxlclBvc2l0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=

@@ -17,3 +17,3 @@ /**

function (arr) {
return arr.filter(function (value) { return !isNaN(value); }).length === arr.length;
return (arr && arr.length && arr.filter(function (value) { return !isNaN(value); }).length === arr.length) ? true : false;
};

@@ -32,2 +32,19 @@ /**

/**
* @param {?} obj
* @param {...?} allowedValues
* @return {?}
*/
Utilities.prototype.toBoolean = /**
* @param {?} obj
* @param {...?} allowedValues
* @return {?}
*/
function (obj) {
var allowedValues = [];
for (var _i = 1; _i < arguments.length; _i++) {
allowedValues[_i - 1] = arguments[_i];
}
return (obj === '' || obj === 'true' || allowedValues.indexOf(obj) !== -1) ? true : false;
};
/**
* @param {?} n

@@ -43,33 +60,34 @@ * @param {?} step

function (n, step) {
var /** @type {?} */ divisors = [];
var /** @type {?} */ divisorsSet1 = [];
var /** @type {?} */ divisorsSet2 = [];
var /** @type {?} */ sqrtNum = Math.sqrt(n);
var /** @type {?} */ newStep = -1;
for (var /** @type {?} */ i = 0; i < sqrtNum; i++) {
if (n % i === 0) {
if ((n / i) === i) {
divisors.push(i);
divisorsSet1.push(i);
}
else {
divisors.push(i);
divisors.push(n / i);
divisorsSet1.push(i);
divisorsSet2.push(n / i);
}
}
}
divisors.sort(function (a, b) {
a = Number(a);
b = Number(b);
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
});
for (var /** @type {?} */ i = divisors.length - 1; i >= 0; i--) {
if (step > divisors[i]) {
step = divisors[i];
// Picking newStep by checking large set of divisors first
for (var /** @type {?} */ i = 0; i < divisorsSet2.length; i++) {
if (step > divisorsSet2[i]) {
newStep = divisorsSet2[i];
break;
}
}
return step;
if (newStep === -1) {
// checking set of small divisors if newStep didn't find out till.
for (var /** @type {?} */ i = divisorsSet1.length - 1; i >= 0; i--) {
if (step > divisorsSet1[i]) {
newStep = divisorsSet1[i];
break;
}
}
}
return (newStep === -1) ? 1 : newStep;
};

@@ -80,2 +98,2 @@ return Utilities;

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbnBuLXNsaWRlci8iLCJzb3VyY2VzIjpbImxpYi91dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLElBQUE7Ozs7Ozs7SUFFUyxpQ0FBYTs7OztjQUFDLEdBQWE7UUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBQyxLQUFLLElBQUssT0FBQSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBYixDQUFhLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0lBRTdELGlDQUFhOzs7O2NBQUMsR0FBUTtRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Ozs7Ozs7SUFFbEQsMENBQXNCOzs7OztjQUFDLENBQVMsRUFBRSxJQUFZO1FBQ25ELHFCQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIscUJBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsQjtnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtTQUNGO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2QsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7WUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsS0FBSyxDQUFDO2FBQ1A7U0FDRjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7O29CQXpDaEI7SUEyQ0MsQ0FBQTtBQXhDRCxxQkF3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbi8qVXRpbGl0aWVzICovXHJcbmV4cG9ydCBjbGFzcyBVdGlsaXRpZXMge1xyXG5cclxuICBwdWJsaWMgaXNOdW1iZXJBcnJheShhcnI6IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYXJyLmZpbHRlcigodmFsdWUpID0+ICFpc05hTih2YWx1ZSkpLmxlbmd0aCA9PT0gYXJyLmxlbmd0aDtcclxuICB9XHJcbiAgcHVibGljIGlzTnVsbE9yRW1wdHkob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgb2JqID09PSAnJztcclxuICB9XHJcbiAgcHVibGljIGZpbmROZXh0VmFsaWRTdGVwVmFsdWUobjogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZGl2aXNvcnM6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCBzcXJ0TnVtID0gTWF0aC5zcXJ0KG4pO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcXJ0TnVtOyBpKyspIHtcclxuICAgICAgaWYgKG4gJSBpID09PSAwKSB7XHJcbiAgICAgICAgaWYgKChuIC8gaSkgPT09IGkpIHtcclxuICAgICAgICAgIGRpdmlzb3JzLnB1c2goaSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpdmlzb3JzLnB1c2goaSk7XHJcbiAgICAgICAgICBkaXZpc29ycy5wdXNoKG4gLyBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRpdmlzb3JzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgYSA9IE51bWJlcihhKTtcclxuICAgICAgYiA9IE51bWJlcihiKTtcclxuICAgICAgaWYgKGEgPCBiKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhID4gYikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICBmb3IgKGxldCBpID0gZGl2aXNvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKHN0ZXAgPiBkaXZpc29yc1tpXSkge1xyXG4gICAgICAgIHN0ZXAgPSBkaXZpc29yc1tpXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0ZXA7XHJcbiAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbnBuLXNsaWRlci8iLCJzb3VyY2VzIjpbImxpYi91dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLElBQUE7Ozs7Ozs7SUFFUyxpQ0FBYTs7OztjQUFDLEdBQWE7UUFDaEMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFiLENBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFFbkcsaUNBQWE7Ozs7Y0FBQyxHQUFRO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQzs7Ozs7OztJQUVsRCw2QkFBUzs7Ozs7Y0FBQyxHQUFRO1FBQUUsdUJBQWdCO2FBQWhCLFVBQWdCLEVBQWhCLHFCQUFnQixFQUFoQixJQUFnQjtZQUFoQixzQ0FBZ0I7O1FBQ3pDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDOzs7Ozs7O0lBRXJGLDBDQUFzQjs7Ozs7Y0FBQyxDQUFTLEVBQUUsSUFBWTtRQUNuRCxxQkFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLHFCQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMscUJBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IscUJBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO2FBQ0Y7U0FDRjs7UUFFRCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEtBQUssQ0FBQzthQUNQO1NBQ0Y7UUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUNuQixHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsS0FBSyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUNELE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzs7b0JBNUMxQztJQThDQyxDQUFBO0FBM0NELHFCQTJDQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuLypVdGlsaXRpZXMgKi9cclxuZXhwb3J0IGNsYXNzIFV0aWxpdGllcyB7XHJcblxyXG4gIHB1YmxpYyBpc051bWJlckFycmF5KGFycjogbnVtYmVyW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoYXJyICYmIGFyci5sZW5ndGggJiYgYXJyLmZpbHRlcigodmFsdWUpID0+ICFpc05hTih2YWx1ZSkpLmxlbmd0aCA9PT0gYXJyLmxlbmd0aCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBpc051bGxPckVtcHR5KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IG9iaiA9PT0gJyc7XHJcbiAgfVxyXG4gIHB1YmxpYyB0b0Jvb2xlYW4ob2JqOiBhbnksIC4uLmFsbG93ZWRWYWx1ZXMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAob2JqID09PSAnJyB8fCBvYmogPT09ICd0cnVlJyB8fCBhbGxvd2VkVmFsdWVzLmluZGV4T2Yob2JqKSAhPT0gLTEpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgZmluZE5leHRWYWxpZFN0ZXBWYWx1ZShuOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBkaXZpc29yc1NldDE6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCBkaXZpc29yc1NldDI6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCBzcXJ0TnVtID0gTWF0aC5zcXJ0KG4pO1xyXG4gICAgbGV0IG5ld1N0ZXAgPSAtMTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FydE51bTsgaSsrKSB7XHJcbiAgICAgIGlmIChuICUgaSA9PT0gMCkge1xyXG4gICAgICAgIGlmICgobiAvIGkpID09PSBpKSB7XHJcbiAgICAgICAgICBkaXZpc29yc1NldDEucHVzaChpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZGl2aXNvcnNTZXQxLnB1c2goaSk7XHJcbiAgICAgICAgICBkaXZpc29yc1NldDIucHVzaChuIC8gaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBQaWNraW5nIG5ld1N0ZXAgYnkgY2hlY2tpbmcgbGFyZ2Ugc2V0IG9mIGRpdmlzb3JzIGZpcnN0XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpdmlzb3JzU2V0Mi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoc3RlcCA+IGRpdmlzb3JzU2V0MltpXSkge1xyXG4gICAgICAgIG5ld1N0ZXAgPSBkaXZpc29yc1NldDJbaV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChuZXdTdGVwID09PSAtMSkgeyAvLyBjaGVja2luZyBzZXQgb2Ygc21hbGwgZGl2aXNvcnMgaWYgbmV3U3RlcCBkaWRuJ3QgZmluZCBvdXQgdGlsbC5cclxuICAgICAgZm9yIChsZXQgaSA9IGRpdmlzb3JzU2V0MS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChzdGVwID4gZGl2aXNvcnNTZXQxW2ldKSB7XHJcbiAgICAgICAgICBuZXdTdGVwID0gZGl2aXNvcnNTZXQxW2ldO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG5ld1N0ZXAgPT09IC0xKSA/IDEgOiBuZXdTdGVwO1xyXG4gIH1cclxufVxyXG4iXX0=

@@ -14,3 +14,3 @@ import { Component, Input, Output, EventEmitter, ElementRef, HostListener, NgModule } from '@angular/core';

isNumberArray(arr) {
return arr.filter((value) => !isNaN(value)).length === arr.length;
return (arr && arr.length && arr.filter((value) => !isNaN(value)).length === arr.length) ? true : false;
}

@@ -25,2 +25,10 @@ /**

/**
* @param {?} obj
* @param {...?} allowedValues
* @return {?}
*/
toBoolean(obj, ...allowedValues) {
return (obj === '' || obj === 'true' || allowedValues.indexOf(obj) !== -1) ? true : false;
}
/**
* @param {?} n

@@ -31,33 +39,34 @@ * @param {?} step

findNextValidStepValue(n, step) {
const /** @type {?} */ divisors = [];
const /** @type {?} */ divisorsSet1 = [];
const /** @type {?} */ divisorsSet2 = [];
const /** @type {?} */ sqrtNum = Math.sqrt(n);
let /** @type {?} */ newStep = -1;
for (let /** @type {?} */ i = 0; i < sqrtNum; i++) {
if (n % i === 0) {
if ((n / i) === i) {
divisors.push(i);
divisorsSet1.push(i);
}
else {
divisors.push(i);
divisors.push(n / i);
divisorsSet1.push(i);
divisorsSet2.push(n / i);
}
}
}
divisors.sort((a, b) => {
a = Number(a);
b = Number(b);
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
});
for (let /** @type {?} */ i = divisors.length - 1; i >= 0; i--) {
if (step > divisors[i]) {
step = divisors[i];
// Picking newStep by checking large set of divisors first
for (let /** @type {?} */ i = 0; i < divisorsSet2.length; i++) {
if (step > divisorsSet2[i]) {
newStep = divisorsSet2[i];
break;
}
}
return step;
if (newStep === -1) {
// checking set of small divisors if newStep didn't find out till.
for (let /** @type {?} */ i = divisorsSet1.length - 1; i >= 0; i--) {
if (step > divisorsSet1[i]) {
newStep = divisorsSet1[i];
break;
}
}
}
return (newStep === -1) ? 1 : newStep;
}

@@ -70,2 +79,14 @@ }

*/
/** @enum {number} */
const SliderHandlerEnum = {
left: 0,
right: 1,
};
SliderHandlerEnum[SliderHandlerEnum.left] = "left";
SliderHandlerEnum[SliderHandlerEnum.right] = "right";
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class NpnSliderComponent extends Utilities {

@@ -95,3 +116,7 @@ /**

this.isDisabled = false;
this.hideTooltip = false;
this.hideValues = false;
this.handlerIndex = SliderHandlerEnum;
this.showStepIndicator = false;
this.multiRange = true;
this.onChange = new EventEmitter();

@@ -122,3 +147,3 @@ }

set setMinSelectedValues(value) {
if (!isNaN(value) && this.isNullOrEmpty(this.minSelected)) {
if (!isNaN(value) && this.minSelected !== Number(value)) {
this.minSelected = Number(value);

@@ -132,3 +157,3 @@ }

set setMaxSelectedValues(value) {
if (!isNaN(value) && this.isNullOrEmpty(this.maxSelected)) {
if (!isNaN(value) && this.maxSelected !== Number(value)) {
this.maxSelected = Number(value);

@@ -150,4 +175,18 @@ }

*/
set setHideTooltip(value) {
this.hideTooltip = this.toBoolean(value);
}
/**
* @param {?} value
* @return {?}
*/
set setHideValues(value) {
this.hideValues = this.toBoolean(value);
}
/**
* @param {?} value
* @return {?}
*/
set setDisabled(value) {
this.isDisabled = (value === 'true' || value === 'disabled') ? true : false;
this.isDisabled = this.toBoolean(value, 'disabled');
}

@@ -165,3 +204,11 @@ /**

ngOnChanges(changes) {
if (!changes['setMinSelectedValues'] && !changes['setMaxSelectedValues'] && this.sliderInitiated) {
if (this.sliderInitiated) {
if (!this.isNullOrEmpty(changes["setMinSelectedValues"])
&& changes["setMinSelectedValues"].previousValue === changes["setMinSelectedValues"].currentValue) {
return;
}
if (!this.isNullOrEmpty(changes["setMaxSelectedValues"])
&& changes["setMaxSelectedValues"].previousValue === changes["setMaxSelectedValues"].currentValue) {
return;
}
this.resetModel();

@@ -202,6 +249,2 @@ }

}
if (this.sliderWidth / (this.totalDiff / this.step) < 10) {
console.error(`'step' value is too small compared to min & max value difference and slider width.
Slider might not work properly!. Provide slight large value for 'step'`);
}
this.initializeStepIndicator();

@@ -247,3 +290,3 @@ this.setHandlerPosition();

if (this.showStepIndicator) {
this.stepIndicatorPositions = [];
this.stepIndicatorPositions.length = 0;
const /** @type {?} */ numOfStepIndicators = this.totalDiff / this.step;

@@ -258,3 +301,10 @@ if (this.sliderWidth / numOfStepIndicators >= 10) {

}
else {
console.warn(`As 'step' value is too small compared to min & max value difference and slider width,
Step Indicator can't be displayed!. Provide slight large value for 'step'`);
}
}
else {
this.stepIndicatorPositions.length = 0;
}
}

@@ -270,3 +320,3 @@ /**

if (!privateChange) {
this.onChange.emit(this.currentValues);
this.onChange.emit((this.multiRange) ? this.currentValues : [this.currentValues[0]]);
}

@@ -325,3 +375,3 @@ }

if (!this.isDisabled) {
if (event.clientX) {
if (!this.isNullOrEmpty(event.clientX)) {
this.startClientX = event.clientX;

@@ -331,3 +381,3 @@ this.isMouseEventStart = true;

}
else if (event.deltaX) {
else if (!this.isNullOrEmpty(event.deltaX)) {
this.startClientX = event.deltaX;

@@ -367,32 +417,31 @@ this.isTouchEventStart = true;

<div class="slider" [class.disabled]="isDisabled">
<div class="bar" (mousemove)="handlerSliding($event)"
(panmove)="handlerSliding($event)">
<span class="left-handle"
[ngClass]="{'active':isHandlerActive&&currentHandlerIndex==0,'last-active':currentHandlerIndex==0}"
[style.left.%]="handlerX[0]"
(mousedown)="setHandlerActive($event,0)"
(panstart)="setHandlerActive($event,0)">
<span class="handle-tooltip">{{currentValues[0]}}</span>
<div class="bar" (mousemove)="handlerSliding($event)" (panmove)="handlerSliding($event)">
<span class="left-handle" [ngClass]="{'active': isHandlerActive && currentHandlerIndex === handlerIndex.left,
'last-active': currentHandlerIndex === handlerIndex.left
}"
[style.left.%]="handlerX[handlerIndex.left]" (mousedown)="setHandlerActive($event, handlerIndex.left)" (panstart)="setHandlerActive($event, handlerIndex.left)">
<span *ngIf="!hideTooltip" class="handle-tooltip">{{currentValues[handlerIndex.left]}}</span>
</span>
<div class="filler">
<div class="step-indicators">
<span *ngFor="let stepPos of stepIndicatorPositions" [style.left.px]="stepPos"></span>
<span *ngFor="let stepPos of stepIndicatorPositions" [style.left.px]="stepPos"></span>
</div>
<span [style.left.%]="handlerX[0]" [style.width.%]="handlerX[1] - handlerX[0]"></span>
<span *ngIf="multiRange" [style.left.%]="handlerX[0]" [style.width.%]="handlerX[handlerIndex.right] - handlerX[handlerIndex.left]"></span>
<span *ngIf="!multiRange" [style.left.%]="0" [style.width.%]="handlerX[0]"></span>
</div>
<span class="right-handle"
[ngClass]="{'active':isHandlerActive&&currentHandlerIndex==1, 'last-active':currentHandlerIndex==1}"
[style.left.%]="handlerX[1]"
(mousedown)="setHandlerActive($event,1)"
(panstart)="setHandlerActive($event,1)">
<span class="handle-tooltip">{{currentValues[1]}}</span>
<span *ngIf="multiRange" class="right-handle" [ngClass]="{'active': isHandlerActive && currentHandlerIndex === handlerIndex.right,
'last-active': currentHandlerIndex === handlerIndex.right
}"
[style.left.%]="handlerX[handlerIndex.right]" (mousedown)="setHandlerActive($event, handlerIndex.right)"
(panstart)="setHandlerActive($event, handlerIndex.right)">
<span *ngIf="!hideTooltip" class="handle-tooltip">{{currentValues[handlerIndex.right]}}</span>
</span>
</div>
<div class="values">
<span>{{initValues[0]}}</span>
<span>{{initValues[1]}}</span>
<div class="values" *ngIf="!hideValues">
<span>{{initValues[handlerIndex.left]}}</span>
<span>{{initValues[handlerIndex.right]}}</span>
</div>
</div>
`,
styles: [`.slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:"";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:"";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:104%;margin-left:-2%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}`]
styles: [`.slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:"";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:"";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:102%;margin-left:-1%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}`]
},] },

@@ -411,2 +460,5 @@ ];

showStepIndicator: [{ type: Input }],
multiRange: [{ type: Input }],
setHideTooltip: [{ type: Input, args: ['hide-tooltip',] }],
setHideValues: [{ type: Input, args: ['hide-values',] }],
setDisabled: [{ type: Input, args: ['disabled',] }],

@@ -445,2 +497,2 @@ onChange: [{ type: Output }],

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbnBuLXNsaWRlci9saWIvdXRpbGl0aWVzLnRzIiwibmc6Ly9ucG4tc2xpZGVyL2xpYi9ucG4tc2xpZGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbnBuLXNsaWRlci9saWIvbnBuLXNsaWRlci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vKlV0aWxpdGllcyAqL1xyXG5leHBvcnQgY2xhc3MgVXRpbGl0aWVzIHtcclxuXHJcbiAgcHVibGljIGlzTnVtYmVyQXJyYXkoYXJyOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoKHZhbHVlKSA9PiAhaXNOYU4odmFsdWUpKS5sZW5ndGggPT09IGFyci5sZW5ndGg7XHJcbiAgfVxyXG4gIHB1YmxpYyBpc051bGxPckVtcHR5KG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IG9iaiA9PT0gJyc7XHJcbiAgfVxyXG4gIHB1YmxpYyBmaW5kTmV4dFZhbGlkU3RlcFZhbHVlKG46IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGRpdmlzb3JzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3FydE51bSA9IE1hdGguc3FydChuKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FydE51bTsgaSsrKSB7XHJcbiAgICAgIGlmIChuICUgaSA9PT0gMCkge1xyXG4gICAgICAgIGlmICgobiAvIGkpID09PSBpKSB7XHJcbiAgICAgICAgICBkaXZpc29ycy5wdXNoKGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkaXZpc29ycy5wdXNoKGkpO1xyXG4gICAgICAgICAgZGl2aXNvcnMucHVzaChuIC8gaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBkaXZpc29ycy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGEgPSBOdW1iZXIoYSk7XHJcbiAgICAgIGIgPSBOdW1iZXIoYik7XHJcbiAgICAgIGlmIChhIDwgYikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYSA+IGIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gICAgZm9yIChsZXQgaSA9IGRpdmlzb3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChzdGVwID4gZGl2aXNvcnNbaV0pIHtcclxuICAgICAgICBzdGVwID0gZGl2aXNvcnNbaV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdGVwO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbiAgICAgICAgICBFbGVtZW50UmVmLCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVdGlsaXRpZXMgfSBmcm9tICcuL3V0aWxpdGllcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25wbi1zbGlkZXInLFxuICB0ZW1wbGF0ZTogYDwhLS1ucG4tc2xpZGVyIHRlbXBsYXRlLS0+XHJcbjxkaXYgY2xhc3M9XCJzbGlkZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJiYXJcIiAobW91c2Vtb3ZlKT1cImhhbmRsZXJTbGlkaW5nKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgKHBhbm1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJsZWZ0LWhhbmRsZVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6aXNIYW5kbGVyQWN0aXZlJiZjdXJyZW50SGFuZGxlckluZGV4PT0wLCdsYXN0LWFjdGl2ZSc6Y3VycmVudEhhbmRsZXJJbmRleD09MH1cIlxyXG4gICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJoYW5kbGVyWFswXVwiXHJcbiAgICAgICAgICAobW91c2Vkb3duKT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LDApXCJcclxuICAgICAgICAgIChwYW5zdGFydCk9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwwKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImhhbmRsZS10b29sdGlwXCI+e3tjdXJyZW50VmFsdWVzWzBdfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsbGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWluZGljYXRvcnNcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHN0ZXBQb3Mgb2Ygc3RlcEluZGljYXRvclBvc2l0aW9uc1wiIFtzdHlsZS5sZWZ0LnB4XT1cInN0ZXBQb3NcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3BhbiBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzBdXCIgW3N0eWxlLndpZHRoLiVdPVwiaGFuZGxlclhbMV0gLSBoYW5kbGVyWFswXVwiPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJyaWdodC1oYW5kbGVcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOmlzSGFuZGxlckFjdGl2ZSYmY3VycmVudEhhbmRsZXJJbmRleD09MSwgJ2xhc3QtYWN0aXZlJzpjdXJyZW50SGFuZGxlckluZGV4PT0xfVwiXHJcbiAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzFdXCJcclxuICAgICAgICAgIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsMSlcIlxyXG4gICAgICAgICAgKHBhbnN0YXJ0KT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LDEpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbMV19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsdWVzXCI+XHJcbiAgICA8c3Bhbj57e2luaXRWYWx1ZXNbMF19fTwvc3Bhbj5cclxuICAgIDxzcGFuPnt7aW5pdFZhbHVlc1sxXX19PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuYCxcbiAgc3R5bGVzOiBbYC5zbGlkZXIsLnNsaWRlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uc2xpZGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MzBweDtwYWRkaW5nOjRweCAxMHB4O2N1cnNvcjpkZWZhdWx0O2ZvbnQtc2l6ZToxMnB4fS5zbGlkZXIgLmJhcnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2U4ZThlODtoZWlnaHQ6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjVweDtib3gtc2hhZG93Omluc2V0IDFweCAxcHggNXB4ICNiYWJhYmF9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDojYmVkY2IyO2JvcmRlcjo3cHggc29saWQgIzcxYjM1Nztib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweDttYXJnaW4tbGVmdDotMTBweDt6LWluZGV4OjE7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpsZWZ0IC4ycyBlYXNlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLmxhc3QtYWN0aXZlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZS5sYXN0LWFjdGl2ZXt6LWluZGV4OjJ9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXB7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTM0cHg7bGVmdDotMTRweDtib3JkZXI6MXB4IHNvbGlkICM4ZmMzN2E7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNHB4O21pbi13aWR0aDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2Q5ZWJkMjtjb2xvcjojNzFiMzU3O2ZvbnQtd2VpZ2h0OjcwMDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2U7b3BhY2l0eTowfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDpiZWZvcmUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDpiZWZvcmV7Y29udGVudDpcIlwiO2JvcmRlcjo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojOGZjMzdhO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDQlO2xlZnQ6MzMlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDphZnRlciwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmFmdGVye2NvbnRlbnQ6XCJcIjtib3JkZXI6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3AtY29sb3I6I2Q5ZWJkMjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjMzJX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZS5hY3RpdmU+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlOmhvdmVyPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUuYWN0aXZlPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGU6aG92ZXI+LmhhbmRsZS10b29sdGlwe29wYWNpdHk6MX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6NXB4O2JvcmRlcjoxcHggc29saWQgI2JlZGNiMn0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5zcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JhY2tncm91bmQ6I2JlZGNiMjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5kaXYuc3RlcC1pbmRpY2F0b3Jze3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+ZGl2LnN0ZXAtaW5kaWNhdG9ycz5zcGFue3dpZHRoOjFweDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDtiYWNrZ3JvdW5kOiM3MWIzNTc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5zbGlkZXIgLnZhbHVlc3tkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjRweDt3aWR0aDoxMDQlO21hcmdpbi1sZWZ0Oi0yJTtjb2xvcjojOTA4ZjkwfS5zbGlkZXIgLnZhbHVlcyBzcGFuOmZpcnN0LWNoaWxke2Zsb2F0OmxlZnR9LnNsaWRlciAudmFsdWVzIHNwYW46bGFzdC1jaGlsZHtmbG9hdDpyaWdodH0uc2xpZGVyLmRpc2FibGVke29wYWNpdHk6LjR9LnNsaWRlci5kaXNhYmxlZCAuYmFye2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ubGVmdC1oYW5kbGUsLnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ucmlnaHQtaGFuZGxle2N1cnNvcjpub3QtYWxsb3dlZH0uc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXAsLnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcHtkaXNwbGF5Om5vbmV9YF1cbn0pXG5leHBvcnQgY2xhc3MgTnBuU2xpZGVyQ29tcG9uZW50IGV4dGVuZHMgVXRpbGl0aWVzIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHNsaWRlck1vZGVsID0gWzAsIDAsIDBdO1xuICBwcml2YXRlIHN0ZXAgPSAxO1xuICBwcml2YXRlIHNsaWRlcldpZHRoID0gMDtcbiAgcHJpdmF0ZSB0b3RhbERpZmYgPSAwO1xuICBwcml2YXRlIHN0YXJ0Q2xpZW50WCA9IDA7XG4gIHByaXZhdGUgc3RhcnRQbGVmdCA9IDA7XG4gIHByaXZhdGUgc3RhcnRQUmlnaHQgPSAwO1xuICBwcml2YXRlIG1pblZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4VmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBtaW5TZWxlY3RlZDogbnVtYmVyO1xuICBwcml2YXRlIG1heFNlbGVjdGVkOiBudW1iZXI7XG4gIHByaXZhdGUgc2xpZGVySW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGluaXRWYWx1ZXM6IG51bWJlcltdID0gW107XG4gIHB1YmxpYyBjdXJyZW50VmFsdWVzOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgcHVibGljIGhhbmRsZXJYOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgcHVibGljIGlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgcHVibGljIGlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50SGFuZGxlckluZGV4ID0gMDtcbiAgcHVibGljIHN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMgPSBbXTtcbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBJbnB1dCgnbWluJylcbiAgc2V0IHNldE1pblZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWluVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWF4JylcbiAgc2V0IHNldE1heFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWF4VmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWluU2VsZWN0ZWQnKVxuICBzZXQgc2V0TWluU2VsZWN0ZWRWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtYXhTZWxlY3RlZCcpXG4gIHNldCBzZXRNYXhTZWxlY3RlZFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWF4U2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLm1heFNlbGVjdGVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdzdGVwJylcbiAgc2V0IHN0ZXBWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc3RlcCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2hvd1N0ZXBJbmRpY2F0b3IgPSBmYWxzZTtcblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgc2V0IHNldERpc2FibGVkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSAodmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJ2Rpc2FibGVkJykgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNsaWRlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlc1snc2V0TWluU2VsZWN0ZWRWYWx1ZXMnXSAmJiAhY2hhbmdlc1snc2V0TWF4U2VsZWN0ZWRWYWx1ZXMnXSAmJiB0aGlzLnNsaWRlckluaXRpYXRlZCkge1xuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gaW5pdGFpbGl6ZSBlbnRpcmUgU2xpZGVyKi9cbiAgcHVibGljIGluaXRpYWxpemVTbGlkZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRha2luZyB3aWR0aCBvZiBzbGlkZXIgYmFyIGVsZW1lbnQuXG4gICAgICB0aGlzLnNsaWRlcldpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgICB0aGlzLnNsaWRlckluaXRpYXRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0aWFsaXplIHZhcmlhYmxlcyBhbmQgbW9kZWwgdmFsdWVzICovXG4gIHByaXZhdGUgcmVzZXRNb2RlbCgpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2xpZGVyVmFsdWVzKCk7XG4gICAgLy8gU2V0dGluZyB0aGUgbW9kZWwgdmFsdWVzXG4gICAgdGhpcy5zbGlkZXJNb2RlbCA9IFtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1swXSAtIHRoaXMuaW5pdFZhbHVlc1swXSxcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1swXSxcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1sxXVxuICAgIF07XG5cbiAgICB0aGlzLnRvdGFsRGlmZiA9IHRoaXMuc2xpZGVyTW9kZWwucmVkdWNlKChwcmV2VmFsdWUsIGN1clZhbHVlKSA9PiBwcmV2VmFsdWUgKyBjdXJWYWx1ZSwgMCk7XG5cbiAgICAvLyBWYWxpZGF0aW9uIGZvciBzbGlkZXIgc3RlcFxuICAgIGlmICh0aGlzLnRvdGFsRGlmZiAlIHRoaXMuc3RlcCAhPT0gMCkge1xuICAgICAgY29uc3QgbmV3U3RlcCA9IHRoaXMuZmluZE5leHRWYWxpZFN0ZXBWYWx1ZSh0aGlzLnRvdGFsRGlmZiwgdGhpcy5zdGVwKTtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBzdGVwIHZhbHVlIFwiJyArIHRoaXMuc3RlcCArICdcIiA6IGFuZCB0b29rIFwiJyArIG5ld1N0ZXAgKyAnXCIgYXMgZGVmYXVsdCBzdGVwJyk7XG4gICAgICB0aGlzLnN0ZXAgPSBuZXdTdGVwO1xuICAgIH1cbiAgICBpZiAodGhpcy5zbGlkZXJXaWR0aCAvICh0aGlzLnRvdGFsRGlmZiAvIHRoaXMuc3RlcCkgPCAxMCkge1xuICAgICAgY29uc29sZS5lcnJvcihgJ3N0ZXAnIHZhbHVlIGlzIHRvbyBzbWFsbCBjb21wYXJlZCB0byBtaW4gJiBtYXggdmFsdWUgZGlmZmVyZW5jZSBhbmQgc2xpZGVyIHdpZHRoLlxuICAgICAgICBTbGlkZXIgbWlnaHQgbm90IHdvcmsgcHJvcGVybHkhLiBQcm92aWRlIHNsaWdodCBsYXJnZSB2YWx1ZSBmb3IgJ3N0ZXAnYCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZXBJbmRpY2F0b3IoKTtcbiAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZG8gdmFsaWRhdGlvbiBvZiBpbml0IGFuZCBzZWxldGVkIHJhbmdlIHZhbHVlcyovXG4gIHByaXZhdGUgdmFsaWRhdGVTbGlkZXJWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblZhbHVlKSB8fCB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhWYWx1ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5pdFZhbHVlcyhbMCwgMF0pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoWzAsIDBdLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluVmFsdWUgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUluaXRWYWx1ZXMoWzAsIDBdKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFswLCAwXSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFZhbHVlcyA9IFt0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlXTtcbiAgICAgIC8qXG4gICAgICAqIFZhbGlkYXRpb24gZm9yIFNlbGVjdGVkIHJhbmdlIHZhbHVlc1xuICAgICAgKi9cbiAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5taW5TZWxlY3RlZCkgPyAwIDogdGhpcy5taW5TZWxlY3RlZDtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhTZWxlY3RlZCkgPyAwIDogdGhpcy5tYXhTZWxlY3RlZDtcblxuICAgICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgPCB0aGlzLm1pblZhbHVlIHx8IHRoaXMubWluU2VsZWN0ZWQgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0ZWQgPCB0aGlzLm1pblZhbHVlIHx8IHRoaXMubWF4U2VsZWN0ZWQgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgPiB0aGlzLm1heFNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFt0aGlzLm1pblNlbGVjdGVkLCB0aGlzLm1heFNlbGVjdGVkXSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gYWRkIHN0ZXAgaW5pZGljYXRvciB0byBzbGlkZXIgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RlcEluZGljYXRvcigpIHtcbiAgICBpZiAodGhpcy5zaG93U3RlcEluZGljYXRvcikge1xuICAgICAgdGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zID0gW107XG4gICAgICBjb25zdCBudW1PZlN0ZXBJbmRpY2F0b3JzID0gdGhpcy50b3RhbERpZmYgLyB0aGlzLnN0ZXA7XG4gICAgICBpZiAodGhpcy5zbGlkZXJXaWR0aCAvIG51bU9mU3RlcEluZGljYXRvcnMgPj0gMTApIHtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gdGhpcy5zbGlkZXJXaWR0aCAvIG51bU9mU3RlcEluZGljYXRvcnM7XG4gICAgICAgIGxldCBsZWZ0UG9zaXRpb24gPSBpbmNyZW1lbnQ7XG4gICAgICAgIHdoaWxlICh0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMubGVuZ3RoIDwgbnVtT2ZTdGVwSW5kaWNhdG9ycyAtIDEpIHtcbiAgICAgICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMucHVzaCgrbGVmdFBvc2l0aW9uLnRvRml4ZWQoMikpO1xuICAgICAgICAgIGxlZnRQb3NpdGlvbiArPSBpbmNyZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50VmFsdWUoYXJyYXlWYWx1ZTogbnVtYmVyW10sIHByaXZhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICAgIGlmICghcHJpdmF0ZUNoYW5nZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuY3VycmVudFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWVzICovXG4gIHByaXZhdGUgdXBkYXRlSW5pdFZhbHVlcyhhcnJheVZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMubWluVmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4VmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyUG9zaXRpb24oKSB7XG4gICAgbGV0IHJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgLy8gVXBkYXRpbmcgc2VsZWN0ZWQgdmFsdWVzIDogY3VycmVudCB2YWx1ZXNcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMF0gKyB0aGlzLnNsaWRlck1vZGVsWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5zbGlkZXJNb2RlbFsyXVxuICAgIF0pO1xuICAgIC8qU2V0dGluZyBoYW5kbGVyIHBvc2l0aW9uICovXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc2xpZGVyTW9kZWwubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBydW5uaW5nVG90YWwgKz0gdGhpcy5zbGlkZXJNb2RlbFtpXTtcbiAgICAgIHRoaXMuaGFuZGxlclhbaV0gPSAocnVubmluZ1RvdGFsIC8gdGhpcy50b3RhbERpZmYpICogMTAwO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBtb2RlbCBhcnJheSB2YWx1ZXMgLSB3aWxsIHRyeSB0byByZWZpbmUgdGhlIHZhbHVlcyB1c2luZyBzdGVwICovXG4gIHByaXZhdGUgc2V0TW9kZWxWYWx1ZShpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc3RlcCA+IDEpIHtcbiAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHRoaXMuc3RlcCkgKiB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyTW9kZWxbaW5kZXhdID0gdmFsdWU7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkaXNhYmxlIGhhbmRsZXIgbW92ZW1lbnQqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNldXBcbiAgKiBvbi1wYW5lbmRcbiAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcpXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhbmVuZCcpXG4gIHNldEhhbmRsZXJBY3RpdmVPZmYoKSB7XG4gICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZGV0ZWN0IHN0YXJ0IGRyYWdpbmcgaGFuZGxlciovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2Vkb3duXG4gICogb24tcGFuc3RhcnRcbiAgKi9cbiAgcHVibGljIHNldEhhbmRsZXJBY3RpdmUoZXZlbnQ6IGFueSwgaGFuZGxlckluZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZXZlbnQuY2xpZW50WCkge1xuICAgICAgICB0aGlzLnN0YXJ0Q2xpZW50WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmRlbHRhWCkge1xuICAgICAgICB0aGlzLnN0YXJ0Q2xpZW50WCA9IGV2ZW50LmRlbHRhWDtcbiAgICAgICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTW91c2VFdmVudFN0YXJ0IHx8IHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SGFuZGxlckluZGV4ID0gaGFuZGxlckluZGV4O1xuICAgICAgICB0aGlzLnN0YXJ0UGxlZnQgPSB0aGlzLnNsaWRlck1vZGVsW2hhbmRsZXJJbmRleF07XG4gICAgICAgIHRoaXMuc3RhcnRQUmlnaHQgPSB0aGlzLnNsaWRlck1vZGVsW2hhbmRsZXJJbmRleCArIDFdO1xuICAgICAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKk1ldGhvZCB0byBjYWxjdWxhdGUgc2lsZGVyIGhhbmRsZXIgbW92ZW1lbnQgKi9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZW1vdmVcbiAgKiBvbi1wYW5tb3ZlXG4gICovXG4gIHB1YmxpYyBoYW5kbGVyU2xpZGluZyhldmVudDogYW55KSB7XG4gICAgaWYgKCh0aGlzLmlzTW91c2VFdmVudFN0YXJ0ICYmIGV2ZW50LmNsaWVudFgpIHx8ICh0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ICYmIGV2ZW50LmRlbHRhWCkpIHtcbiAgICAgIGNvbnN0IG1vdmVkWCA9IE1hdGgucm91bmQoKChldmVudC5jbGllbnRYIHx8IGV2ZW50LmRlbHRhWCkgLSB0aGlzLnN0YXJ0Q2xpZW50WCkgLyB0aGlzLnNsaWRlcldpZHRoICogdGhpcy50b3RhbERpZmYpO1xuICAgICAgY29uc3QgbmV4dFBMZWZ0ID0gdGhpcy5zdGFydFBsZWZ0ICsgbW92ZWRYO1xuICAgICAgY29uc3QgbmV4dFBSaWdodCA9IHRoaXMuc3RhcnRQUmlnaHQgLSBtb3ZlZFg7XG4gICAgICBpZiAobmV4dFBMZWZ0ID49IDAgJiYgbmV4dFBSaWdodCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZSh0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXgsIG5leHRQTGVmdCk7XG4gICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZSh0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggKyAxLCBuZXh0UFJpZ2h0KTtcbiAgICAgICAgdGhpcy5zZXRIYW5kbGVyUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJyb3dzZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOcG5TbGlkZXJDb21wb25lbnQgfSBmcm9tICcuL25wbi1zbGlkZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIEJyb3dzZXJNb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbTnBuU2xpZGVyQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW05wblNsaWRlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTnBuU2xpZGVyTW9kdWxlIHsgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7Ozs7SUFFUyxhQUFhLENBQUMsR0FBYTtRQUNoQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0lBRTdELGFBQWEsQ0FBQyxHQUFRO1FBQzNCLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Ozs7Ozs7SUFFbEQsc0JBQXNCLENBQUMsQ0FBUyxFQUFFLElBQVk7UUFDbkQsdUJBQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5Qix1QkFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDakIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEI7cUJBQU07b0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCO2FBQ0Y7U0FDRjtRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lB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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbnBuLXNsaWRlci9saWIvdXRpbGl0aWVzLnRzIiwibmc6Ly9ucG4tc2xpZGVyL2xpYi9ucG4tc2xpZGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbnBuLXNsaWRlci9saWIvbnBuLXNsaWRlci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vKlV0aWxpdGllcyAqL1xyXG5leHBvcnQgY2xhc3MgVXRpbGl0aWVzIHtcclxuXHJcbiAgcHVibGljIGlzTnVtYmVyQXJyYXkoYXJyOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChhcnIgJiYgYXJyLmxlbmd0aCAmJiBhcnIuZmlsdGVyKCh2YWx1ZSkgPT4gIWlzTmFOKHZhbHVlKSkubGVuZ3RoID09PSBhcnIubGVuZ3RoKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGlzTnVsbE9yRW1wdHkob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgb2JqID09PSAnJztcclxuICB9XHJcbiAgcHVibGljIHRvQm9vbGVhbihvYmo6IGFueSwgLi4uYWxsb3dlZFZhbHVlcyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChvYmogPT09ICcnIHx8IG9iaiA9PT0gJ3RydWUnIHx8IGFsbG93ZWRWYWx1ZXMuaW5kZXhPZihvYmopICE9PSAtMSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBmaW5kTmV4dFZhbGlkU3RlcFZhbHVlKG46IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGRpdmlzb3JzU2V0MTogbnVtYmVyW10gPSBbXTtcclxuICAgIGNvbnN0IGRpdmlzb3JzU2V0MjogbnVtYmVyW10gPSBbXTtcclxuICAgIGNvbnN0IHNxcnROdW0gPSBNYXRoLnNxcnQobik7XHJcbiAgICBsZXQgbmV3U3RlcCA9IC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcXJ0TnVtOyBpKyspIHtcclxuICAgICAgaWYgKG4gJSBpID09PSAwKSB7XHJcbiAgICAgICAgaWYgKChuIC8gaSkgPT09IGkpIHtcclxuICAgICAgICAgIGRpdmlzb3JzU2V0MS5wdXNoKGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkaXZpc29yc1NldDEucHVzaChpKTtcclxuICAgICAgICAgIGRpdmlzb3JzU2V0Mi5wdXNoKG4gLyBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFBpY2tpbmcgbmV3U3RlcCBieSBjaGVja2luZyBsYXJnZSBzZXQgb2YgZGl2aXNvcnMgZmlyc3RcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGl2aXNvcnNTZXQyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChzdGVwID4gZGl2aXNvcnNTZXQyW2ldKSB7XHJcbiAgICAgICAgbmV3U3RlcCA9IGRpdmlzb3JzU2V0MltpXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG5ld1N0ZXAgPT09IC0xKSB7IC8vIGNoZWNraW5nIHNldCBvZiBzbWFsbCBkaXZpc29ycyBpZiBuZXdTdGVwIGRpZG4ndCBmaW5kIG91dCB0aWxsLlxyXG4gICAgICBmb3IgKGxldCBpID0gZGl2aXNvcnNTZXQxLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHN0ZXAgPiBkaXZpc29yc1NldDFbaV0pIHtcclxuICAgICAgICAgIG5ld1N0ZXAgPSBkaXZpc29yc1NldDFbaV07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAobmV3U3RlcCA9PT0gLTEpID8gMSA6IG5ld1N0ZXA7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXRpbGl0aWVzIH0gZnJvbSAnLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgU2xpZGVySGFuZGxlckVudW0gfSBmcm9tICcuL3NsaWRlci1oYW5kbGVyLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICducG4tc2xpZGVyJyxcbiAgdGVtcGxhdGU6IGA8IS0tbnBuLXNsaWRlciB0ZW1wbGF0ZS0tPlxyXG48ZGl2IGNsYXNzPVwic2xpZGVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiYmFyXCIgKG1vdXNlbW92ZSk9XCJoYW5kbGVyU2xpZGluZygkZXZlbnQpXCIgKHBhbm1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJsZWZ0LWhhbmRsZVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNIYW5kbGVyQWN0aXZlICYmIGN1cnJlbnRIYW5kbGVySW5kZXggPT09IGhhbmRsZXJJbmRleC5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2xhc3QtYWN0aXZlJzogY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LmxlZnRcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgW3N0eWxlLmxlZnQuJV09XCJoYW5kbGVyWFtoYW5kbGVySW5kZXgubGVmdF1cIiAobW91c2Vkb3duKT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LCBoYW5kbGVySW5kZXgubGVmdClcIiAocGFuc3RhcnQpPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5sZWZ0KVwiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFoaWRlVG9vbHRpcFwiIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbaGFuZGxlckluZGV4LmxlZnRdfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsbGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWluZGljYXRvcnNcIj5cclxuICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgc3RlcFBvcyBvZiBzdGVwSW5kaWNhdG9yUG9zaXRpb25zXCIgW3N0eWxlLmxlZnQucHhdPVwic3RlcFBvc1wiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlSYW5nZVwiIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbMF1cIiBbc3R5bGUud2lkdGguJV09XCJoYW5kbGVyWFtoYW5kbGVySW5kZXgucmlnaHRdIC0gaGFuZGxlclhbaGFuZGxlckluZGV4LmxlZnRdXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFtdWx0aVJhbmdlXCIgW3N0eWxlLmxlZnQuJV09XCIwXCIgW3N0eWxlLndpZHRoLiVdPVwiaGFuZGxlclhbMF1cIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuICpuZ0lmPVwibXVsdGlSYW5nZVwiIGNsYXNzPVwicmlnaHQtaGFuZGxlXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0hhbmRsZXJBY3RpdmUgJiYgY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LnJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2xhc3QtYWN0aXZlJzogY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LnJpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbaGFuZGxlckluZGV4LnJpZ2h0XVwiIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5yaWdodClcIlxyXG4gICAgICAocGFuc3RhcnQpPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5yaWdodClcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhaGlkZVRvb2x0aXBcIiBjbGFzcz1cImhhbmRsZS10b29sdGlwXCI+e3tjdXJyZW50VmFsdWVzW2hhbmRsZXJJbmRleC5yaWdodF19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsdWVzXCIgKm5nSWY9XCIhaGlkZVZhbHVlc1wiPlxyXG4gICAgPHNwYW4+e3tpbml0VmFsdWVzW2hhbmRsZXJJbmRleC5sZWZ0XX19PC9zcGFuPlxyXG4gICAgPHNwYW4+e3tpbml0VmFsdWVzW2hhbmRsZXJJbmRleC5yaWdodF19fTwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbmAsXG4gIHN0eWxlczogW2Auc2xpZGVyLC5zbGlkZXIgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnNsaWRlcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjMwcHg7cGFkZGluZzo0cHggMTBweDtjdXJzb3I6ZGVmYXVsdDtmb250LXNpemU6MTJweH0uc2xpZGVyIC5iYXJ7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNlOGU4ZTg7aGVpZ2h0OjEwcHg7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czo1cHg7Ym94LXNoYWRvdzppbnNldCAxcHggMXB4IDVweCAjYmFiYWJhfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2JhY2tncm91bmQ6I2JlZGNiMjtib3JkZXI6N3B4IHNvbGlkICM3MWIzNTc7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bWFyZ2luLWxlZnQ6LTEwcHg7ei1pbmRleDoxO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246bGVmdCAuMnMgZWFzZX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZS5sYXN0LWFjdGl2ZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUubGFzdC1hY3RpdmV7ei1pbmRleDoyfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwe2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zNHB4O2xlZnQ6LTE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOGZjMzdhO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDRweDttaW4td2lkdGg6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNkOWViZDI7Y29sb3I6IzcxYjM1Nztmb250LXdlaWdodDo3MDA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlO29wYWNpdHk6MH0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YmVmb3JlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YmVmb3Jle2NvbnRlbnQ6XCJcIjtib3JkZXI6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3AtY29sb3I6IzhmYzM3YTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTA0JTtsZWZ0OjMzJX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YWZ0ZXIsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDphZnRlcntjb250ZW50OlwiXCI7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWNvbG9yOiNkOWViZDI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDozMyV9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUuYWN0aXZlPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZTpob3Zlcj4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlLmFjdGl2ZT4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlOmhvdmVyPi5oYW5kbGUtdG9vbHRpcHtvcGFjaXR5OjF9LnNsaWRlciAuYmFyIGRpdi5maWxsZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOjVweDtib3JkZXI6MXB4IHNvbGlkICNiZWRjYjJ9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtiYWNrZ3JvdW5kOiNiZWRjYjI7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2V9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+ZGl2LnN0ZXAtaW5kaWNhdG9yc3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPmRpdi5zdGVwLWluZGljYXRvcnM+c3Bhbnt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7YmFja2dyb3VuZDojNzFiMzU3O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uc2xpZGVyIC52YWx1ZXN7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDo0cHg7d2lkdGg6MTAyJTttYXJnaW4tbGVmdDotMSU7Y29sb3I6IzkwOGY5MH0uc2xpZGVyIC52YWx1ZXMgc3BhbjpmaXJzdC1jaGlsZHtmbG9hdDpsZWZ0fS5zbGlkZXIgLnZhbHVlcyBzcGFuOmxhc3QtY2hpbGR7ZmxvYXQ6cmlnaHR9LnNsaWRlci5kaXNhYmxlZHtvcGFjaXR5Oi40fS5zbGlkZXIuZGlzYWJsZWQgLmJhcntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLC5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZXtjdXJzb3I6bm90LWFsbG93ZWR9LnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwLC5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXB7ZGlzcGxheTpub25lfWBdXG59KVxuZXhwb3J0IGNsYXNzIE5wblNsaWRlckNvbXBvbmVudCBleHRlbmRzIFV0aWxpdGllcyBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBzbGlkZXJNb2RlbCA9IFswLCAwLCAwXTtcbiAgcHJpdmF0ZSBzdGVwID0gMTtcbiAgcHJpdmF0ZSBzbGlkZXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgdG90YWxEaWZmID0gMDtcbiAgcHJpdmF0ZSBzdGFydENsaWVudFggPSAwO1xuICBwcml2YXRlIHN0YXJ0UGxlZnQgPSAwO1xuICBwcml2YXRlIHN0YXJ0UFJpZ2h0ID0gMDtcbiAgcHJpdmF0ZSBtaW5WYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIG1heFZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgbWluU2VsZWN0ZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBtYXhTZWxlY3RlZDogbnVtYmVyO1xuICBwcml2YXRlIHNsaWRlckluaXRpYXRlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbml0VmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgY3VycmVudFZhbHVlczogbnVtYmVyW10gPSBbMCwgMF07XG4gIHB1YmxpYyBoYW5kbGVyWDogbnVtYmVyW10gPSBbMCwgMF07XG4gIHB1YmxpYyBpc0hhbmRsZXJBY3RpdmUgPSBmYWxzZTtcbiAgcHVibGljIGlzVG91Y2hFdmVudFN0YXJ0ID0gZmFsc2U7XG4gIHB1YmxpYyBpc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudEhhbmRsZXJJbmRleCA9IDA7XG4gIHB1YmxpYyBzdGVwSW5kaWNhdG9yUG9zaXRpb25zID0gW107XG4gIHB1YmxpYyBpc0Rpc2FibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBoaWRlVG9vbHRpcCA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVZhbHVlcyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBoYW5kbGVySW5kZXggPSBTbGlkZXJIYW5kbGVyRW51bTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBJbnB1dCgnbWluJylcbiAgc2V0IHNldE1pblZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWluVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWF4JylcbiAgc2V0IHNldE1heFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWF4VmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWluU2VsZWN0ZWQnKVxuICBzZXQgc2V0TWluU2VsZWN0ZWRWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHRoaXMubWluU2VsZWN0ZWQgIT09IE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWF4U2VsZWN0ZWQnKVxuICBzZXQgc2V0TWF4U2VsZWN0ZWRWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHRoaXMubWF4U2VsZWN0ZWQgIT09IE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoJ3N0ZXAnKVxuICBzZXQgc3RlcFZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGVwID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzaG93U3RlcEluZGljYXRvciA9IGZhbHNlO1xuICBASW5wdXQoKSBtdWx0aVJhbmdlID0gdHJ1ZTtcbiAgQElucHV0KCdoaWRlLXRvb2x0aXAnKVxuICBzZXQgc2V0SGlkZVRvb2x0aXAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhpZGVUb29sdGlwID0gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICB9XG4gIEBJbnB1dCgnaGlkZS12YWx1ZXMnKVxuICBzZXQgc2V0SGlkZVZhbHVlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaGlkZVZhbHVlcyA9IHRoaXMudG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxuICBzZXQgc2V0RGlzYWJsZWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMudG9Cb29sZWFuKHZhbHVlLCAnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplU2xpZGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuc2xpZGVySW5pdGlhdGVkKSB7XG4gICAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShjaGFuZ2VzLnNldE1pblNlbGVjdGVkVmFsdWVzKVxuICAgICAgICAmJiBjaGFuZ2VzLnNldE1pblNlbGVjdGVkVmFsdWVzLnByZXZpb3VzVmFsdWUgPT09IGNoYW5nZXMuc2V0TWluU2VsZWN0ZWRWYWx1ZXMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KGNoYW5nZXMuc2V0TWF4U2VsZWN0ZWRWYWx1ZXMpXG4gICAgICAgICYmIGNoYW5nZXMuc2V0TWF4U2VsZWN0ZWRWYWx1ZXMucHJldmlvdXNWYWx1ZSA9PT0gY2hhbmdlcy5zZXRNYXhTZWxlY3RlZFZhbHVlcy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gaW5pdGFpbGl6ZSBlbnRpcmUgU2xpZGVyKi9cbiAgcHVibGljIGluaXRpYWxpemVTbGlkZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRha2luZyB3aWR0aCBvZiBzbGlkZXIgYmFyIGVsZW1lbnQuXG4gICAgICB0aGlzLnNsaWRlcldpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgICB0aGlzLnNsaWRlckluaXRpYXRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0aWFsaXplIHZhcmlhYmxlcyBhbmQgbW9kZWwgdmFsdWVzICovXG4gIHByaXZhdGUgcmVzZXRNb2RlbCgpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2xpZGVyVmFsdWVzKCk7XG4gICAgLy8gU2V0dGluZyB0aGUgbW9kZWwgdmFsdWVzXG4gICAgdGhpcy5zbGlkZXJNb2RlbCA9IFtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1swXSAtIHRoaXMuaW5pdFZhbHVlc1swXSxcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1swXSxcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1sxXVxuICAgIF07XG5cbiAgICB0aGlzLnRvdGFsRGlmZiA9IHRoaXMuc2xpZGVyTW9kZWwucmVkdWNlKChwcmV2VmFsdWUsIGN1clZhbHVlKSA9PiBwcmV2VmFsdWUgKyBjdXJWYWx1ZSwgMCk7XG5cbiAgICAvLyBWYWxpZGF0aW9uIGZvciBzbGlkZXIgc3RlcFxuICAgIGlmICh0aGlzLnRvdGFsRGlmZiAlIHRoaXMuc3RlcCAhPT0gMCkge1xuICAgICAgY29uc3QgbmV3U3RlcCA9IHRoaXMuZmluZE5leHRWYWxpZFN0ZXBWYWx1ZSh0aGlzLnRvdGFsRGlmZiwgdGhpcy5zdGVwKTtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBzdGVwIHZhbHVlIFwiJyArIHRoaXMuc3RlcCArICdcIiA6IGFuZCB0b29rIFwiJyArIG5ld1N0ZXAgKyAnXCIgYXMgZGVmYXVsdCBzdGVwJyk7XG4gICAgICB0aGlzLnN0ZXAgPSBuZXdTdGVwO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVTdGVwSW5kaWNhdG9yKCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGRvIHZhbGlkYXRpb24gb2YgaW5pdCBhbmQgc2VsZXRlZCByYW5nZSB2YWx1ZXMqL1xuICBwcml2YXRlIHZhbGlkYXRlU2xpZGVyVmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5taW5WYWx1ZSkgfHwgdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWF4VmFsdWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUluaXRWYWx1ZXMoWzAsIDBdKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFswLCAwXSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pblZhbHVlID4gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVJbml0VmFsdWVzKFswLCAwXSk7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbMCwgMF0sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRWYWx1ZXMgPSBbdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZV07XG4gICAgICAvKlxuICAgICAgKiBWYWxpZGF0aW9uIGZvciBTZWxlY3RlZCByYW5nZSB2YWx1ZXNcbiAgICAgICovXG4gICAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluU2VsZWN0ZWQpID8gMCA6IHRoaXMubWluU2VsZWN0ZWQ7XG4gICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWF4U2VsZWN0ZWQpID8gMCA6IHRoaXMubWF4U2VsZWN0ZWQ7XG5cbiAgICAgIGlmICh0aGlzLm1pblNlbGVjdGVkIDwgdGhpcy5taW5WYWx1ZSB8fCB0aGlzLm1pblNlbGVjdGVkID4gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5taW5WYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1heFNlbGVjdGVkIDwgdGhpcy5taW5WYWx1ZSB8fCB0aGlzLm1heFNlbGVjdGVkID4gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1pblNlbGVjdGVkID4gdGhpcy5tYXhTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5taW5WYWx1ZTtcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbdGhpcy5taW5TZWxlY3RlZCwgdGhpcy5tYXhTZWxlY3RlZF0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGFkZCBzdGVwIGluaWRpY2F0b3IgdG8gc2xpZGVyICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0ZXBJbmRpY2F0b3IoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1N0ZXBJbmRpY2F0b3IpIHtcbiAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgY29uc3QgbnVtT2ZTdGVwSW5kaWNhdG9ycyA9IHRoaXMudG90YWxEaWZmIC8gdGhpcy5zdGVwO1xuICAgICAgaWYgKHRoaXMuc2xpZGVyV2lkdGggLyBudW1PZlN0ZXBJbmRpY2F0b3JzID49IDEwKSB7XG4gICAgICAgIGNvbnN0IGluY3JlbWVudCA9IHRoaXMuc2xpZGVyV2lkdGggLyBudW1PZlN0ZXBJbmRpY2F0b3JzO1xuICAgICAgICBsZXQgbGVmdFBvc2l0aW9uID0gaW5jcmVtZW50O1xuICAgICAgICB3aGlsZSAodGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zLmxlbmd0aCA8IG51bU9mU3RlcEluZGljYXRvcnMgLSAxKSB7XG4gICAgICAgICAgdGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zLnB1c2goK2xlZnRQb3NpdGlvbi50b0ZpeGVkKDIpKTtcbiAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gaW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYEFzICdzdGVwJyB2YWx1ZSBpcyB0b28gc21hbGwgY29tcGFyZWQgdG8gbWluICYgbWF4IHZhbHVlIGRpZmZlcmVuY2UgYW5kIHNsaWRlciB3aWR0aCxcbiAgICAgICAgICBTdGVwIEluZGljYXRvciBjYW4ndCBiZSBkaXNwbGF5ZWQhLiBQcm92aWRlIHNsaWdodCBsYXJnZSB2YWx1ZSBmb3IgJ3N0ZXAnYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBjdXJyZW50IHNlbGVjdGVkIHZhbHVlcyAqL1xuICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRWYWx1ZShhcnJheVZhbHVlOiBudW1iZXJbXSwgcHJpdmF0ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gICAgaWYgKCFwcml2YXRlQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoKHRoaXMubXVsdGlSYW5nZSkgPyB0aGlzLmN1cnJlbnRWYWx1ZXMgOiBbdGhpcy5jdXJyZW50VmFsdWVzWzBdXSk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWVzICovXG4gIHByaXZhdGUgdXBkYXRlSW5pdFZhbHVlcyhhcnJheVZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMubWluVmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4VmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyUG9zaXRpb24oKSB7XG4gICAgbGV0IHJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgLy8gVXBkYXRpbmcgc2VsZWN0ZWQgdmFsdWVzIDogY3VycmVudCB2YWx1ZXNcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMF0gKyB0aGlzLnNsaWRlck1vZGVsWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5zbGlkZXJNb2RlbFsyXVxuICAgIF0pO1xuICAgIC8qU2V0dGluZyBoYW5kbGVyIHBvc2l0aW9uICovXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc2xpZGVyTW9kZWwubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBydW5uaW5nVG90YWwgKz0gdGhpcy5zbGlkZXJNb2RlbFtpXTtcbiAgICAgIHRoaXMuaGFuZGxlclhbaV0gPSAocnVubmluZ1RvdGFsIC8gdGhpcy50b3RhbERpZmYpICogMTAwO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBtb2RlbCBhcnJheSB2YWx1ZXMgLSB3aWxsIHRyeSB0byByZWZpbmUgdGhlIHZhbHVlcyB1c2luZyBzdGVwICovXG4gIHByaXZhdGUgc2V0TW9kZWxWYWx1ZShpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc3RlcCA+IDEpIHtcbiAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHRoaXMuc3RlcCkgKiB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyTW9kZWxbaW5kZXhdID0gdmFsdWU7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkaXNhYmxlIGhhbmRsZXIgbW92ZW1lbnQqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNldXBcbiAgKiBvbi1wYW5lbmRcbiAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcpXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhbmVuZCcpXG4gIHNldEhhbmRsZXJBY3RpdmVPZmYoKSB7XG4gICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZGV0ZWN0IHN0YXJ0IGRyYWdpbmcgaGFuZGxlciovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2Vkb3duXG4gICogb24tcGFuc3RhcnRcbiAgKi9cbiAgcHVibGljIHNldEhhbmRsZXJBY3RpdmUoZXZlbnQ6IGFueSwgaGFuZGxlckluZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG5cbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KGV2ZW50LmNsaWVudFgpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShldmVudC5kZWx0YVgpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuZGVsdGFYO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgfHwgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggPSBoYW5kbGVySW5kZXg7XG4gICAgICAgIHRoaXMuc3RhcnRQbGVmdCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4XTtcbiAgICAgICAgdGhpcy5zdGFydFBSaWdodCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4ICsgMV07XG4gICAgICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qTWV0aG9kIHRvIGNhbGN1bGF0ZSBzaWxkZXIgaGFuZGxlciBtb3ZlbWVudCAqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNlbW92ZVxuICAqIG9uLXBhbm1vdmVcbiAgKi9cbiAgcHVibGljIGhhbmRsZXJTbGlkaW5nKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgJiYgZXZlbnQuY2xpZW50WCkgfHwgKHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgJiYgZXZlbnQuZGVsdGFYKSkge1xuICAgICAgY29uc3QgbW92ZWRYID0gTWF0aC5yb3VuZCgoKGV2ZW50LmNsaWVudFggfHwgZXZlbnQuZGVsdGFYKSAtIHRoaXMuc3RhcnRDbGllbnRYKSAvIHRoaXMuc2xpZGVyV2lkdGggKiB0aGlzLnRvdGFsRGlmZik7XG4gICAgICBjb25zdCBuZXh0UExlZnQgPSB0aGlzLnN0YXJ0UGxlZnQgKyBtb3ZlZFg7XG4gICAgICBjb25zdCBuZXh0UFJpZ2h0ID0gdGhpcy5zdGFydFBSaWdodCAtIG1vdmVkWDtcbiAgICAgIGlmIChuZXh0UExlZnQgPj0gMCAmJiBuZXh0UFJpZ2h0ID49IDApIHtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCwgbmV4dFBMZWZ0KTtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCArIDEsIG5leHRQUmlnaHQpO1xuICAgICAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5wblNsaWRlckNvbXBvbmVudCB9IGZyb20gJy4vbnBuLXNsaWRlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQnJvd3Nlck1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtOcG5TbGlkZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbTnBuU2xpZGVyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBOcG5TbGlkZXJNb2R1bGUgeyB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOzs7OztJQUVTLGFBQWEsQ0FBQyxHQUFhO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQzs7Ozs7O0lBRW5HLGFBQWEsQ0FBQyxHQUFRO1FBQzNCLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Ozs7Ozs7SUFFbEQsU0FBUyxDQUFDLEdBQVEsRUFBRSxHQUFHLGFBQWE7UUFDekMsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7Ozs7Ozs7SUFFckYsc0JBQXNCLENBQUMsQ0FBUyxFQUFFLElBQVk7UUFDbkQsdUJBQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyx1QkFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLHVCQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLHFCQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQixLQUFLLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxDQUFDLEdBQUcs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

@@ -21,3 +21,3 @@ import { __extends } from 'tslib';

function (arr) {
return arr.filter(function (value) { return !isNaN(value); }).length === arr.length;
return (arr && arr.length && arr.filter(function (value) { return !isNaN(value); }).length === arr.length) ? true : false;
};

@@ -36,2 +36,19 @@ /**

/**
* @param {?} obj
* @param {...?} allowedValues
* @return {?}
*/
Utilities.prototype.toBoolean = /**
* @param {?} obj
* @param {...?} allowedValues
* @return {?}
*/
function (obj) {
var allowedValues = [];
for (var _i = 1; _i < arguments.length; _i++) {
allowedValues[_i - 1] = arguments[_i];
}
return (obj === '' || obj === 'true' || allowedValues.indexOf(obj) !== -1) ? true : false;
};
/**
* @param {?} n

@@ -47,33 +64,34 @@ * @param {?} step

function (n, step) {
var /** @type {?} */ divisors = [];
var /** @type {?} */ divisorsSet1 = [];
var /** @type {?} */ divisorsSet2 = [];
var /** @type {?} */ sqrtNum = Math.sqrt(n);
var /** @type {?} */ newStep = -1;
for (var /** @type {?} */ i = 0; i < sqrtNum; i++) {
if (n % i === 0) {
if ((n / i) === i) {
divisors.push(i);
divisorsSet1.push(i);
}
else {
divisors.push(i);
divisors.push(n / i);
divisorsSet1.push(i);
divisorsSet2.push(n / i);
}
}
}
divisors.sort(function (a, b) {
a = Number(a);
b = Number(b);
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
});
for (var /** @type {?} */ i = divisors.length - 1; i >= 0; i--) {
if (step > divisors[i]) {
step = divisors[i];
// Picking newStep by checking large set of divisors first
for (var /** @type {?} */ i = 0; i < divisorsSet2.length; i++) {
if (step > divisorsSet2[i]) {
newStep = divisorsSet2[i];
break;
}
}
return step;
if (newStep === -1) {
// checking set of small divisors if newStep didn't find out till.
for (var /** @type {?} */ i = divisorsSet1.length - 1; i >= 0; i--) {
if (step > divisorsSet1[i]) {
newStep = divisorsSet1[i];
break;
}
}
}
return (newStep === -1) ? 1 : newStep;
};

@@ -87,2 +105,14 @@ return Utilities;

*/
/** @enum {number} */
var SliderHandlerEnum = {
left: 0,
right: 1,
};
SliderHandlerEnum[SliderHandlerEnum.left] = "left";
SliderHandlerEnum[SliderHandlerEnum.right] = "right";
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var NpnSliderComponent = /** @class */ (function (_super) {

@@ -110,3 +140,7 @@ __extends(NpnSliderComponent, _super);

_this.isDisabled = false;
_this.hideTooltip = false;
_this.hideValues = false;
_this.handlerIndex = SliderHandlerEnum;
_this.showStepIndicator = false;
_this.multiRange = true;
_this.onChange = new EventEmitter();

@@ -147,3 +181,3 @@ return _this;

function (value) {
if (!isNaN(value) && this.isNullOrEmpty(this.minSelected)) {
if (!isNaN(value) && this.minSelected !== Number(value)) {
this.minSelected = Number(value);

@@ -161,3 +195,3 @@ }

function (value) {
if (!isNaN(value) && this.isNullOrEmpty(this.maxSelected)) {
if (!isNaN(value) && this.maxSelected !== Number(value)) {
this.maxSelected = Number(value);

@@ -182,2 +216,24 @@ }

});
Object.defineProperty(NpnSliderComponent.prototype, "setHideTooltip", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.hideTooltip = this.toBoolean(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NpnSliderComponent.prototype, "setHideValues", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.hideValues = this.toBoolean(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NpnSliderComponent.prototype, "setDisabled", {

@@ -189,3 +245,3 @@ set: /**

function (value) {
this.isDisabled = (value === 'true' || value === 'disabled') ? true : false;
this.isDisabled = this.toBoolean(value, 'disabled');
},

@@ -213,3 +269,11 @@ enumerable: true,

function (changes) {
if (!changes['setMinSelectedValues'] && !changes['setMaxSelectedValues'] && this.sliderInitiated) {
if (this.sliderInitiated) {
if (!this.isNullOrEmpty(changes["setMinSelectedValues"])
&& changes["setMinSelectedValues"].previousValue === changes["setMinSelectedValues"].currentValue) {
return;
}
if (!this.isNullOrEmpty(changes["setMaxSelectedValues"])
&& changes["setMaxSelectedValues"].previousValue === changes["setMaxSelectedValues"].currentValue) {
return;
}
this.resetModel();

@@ -256,5 +320,2 @@ }

}
if (this.sliderWidth / (this.totalDiff / this.step) < 10) {
console.error("'step' value is too small compared to min & max value difference and slider width.\n Slider might not work properly!. Provide slight large value for 'step'");
}
this.initializeStepIndicator();

@@ -306,3 +367,3 @@ this.setHandlerPosition();

if (this.showStepIndicator) {
this.stepIndicatorPositions = [];
this.stepIndicatorPositions.length = 0;
var /** @type {?} */ numOfStepIndicators = this.totalDiff / this.step;

@@ -317,3 +378,9 @@ if (this.sliderWidth / numOfStepIndicators >= 10) {

}
else {
console.warn("As 'step' value is too small compared to min & max value difference and slider width,\n Step Indicator can't be displayed!. Provide slight large value for 'step'");
}
}
else {
this.stepIndicatorPositions.length = 0;
}
};

@@ -335,3 +402,3 @@ /**

if (!privateChange) {
this.onChange.emit(this.currentValues);
this.onChange.emit((this.multiRange) ? this.currentValues : [this.currentValues[0]]);
}

@@ -415,3 +482,3 @@ };

if (!this.isDisabled) {
if (event.clientX) {
if (!this.isNullOrEmpty(event.clientX)) {
this.startClientX = event.clientX;

@@ -421,3 +488,3 @@ this.isMouseEventStart = true;

}
else if (event.deltaX) {
else if (!this.isNullOrEmpty(event.deltaX)) {
this.startClientX = event.deltaX;

@@ -458,4 +525,4 @@ this.isTouchEventStart = true;

selector: 'npn-slider',
template: "<!--npn-slider template-->\n<div class=\"slider\" [class.disabled]=\"isDisabled\">\n <div class=\"bar\" (mousemove)=\"handlerSliding($event)\"\n (panmove)=\"handlerSliding($event)\">\n <span class=\"left-handle\"\n [ngClass]=\"{'active':isHandlerActive&&currentHandlerIndex==0,'last-active':currentHandlerIndex==0}\"\n [style.left.%]=\"handlerX[0]\"\n (mousedown)=\"setHandlerActive($event,0)\"\n (panstart)=\"setHandlerActive($event,0)\">\n <span class=\"handle-tooltip\">{{currentValues[0]}}</span>\n </span>\n <div class=\"filler\">\n <div class=\"step-indicators\">\n <span *ngFor=\"let stepPos of stepIndicatorPositions\" [style.left.px]=\"stepPos\"></span>\n </div>\n <span [style.left.%]=\"handlerX[0]\" [style.width.%]=\"handlerX[1] - handlerX[0]\"></span>\n </div>\n <span class=\"right-handle\"\n [ngClass]=\"{'active':isHandlerActive&&currentHandlerIndex==1, 'last-active':currentHandlerIndex==1}\"\n [style.left.%]=\"handlerX[1]\"\n (mousedown)=\"setHandlerActive($event,1)\"\n (panstart)=\"setHandlerActive($event,1)\">\n <span class=\"handle-tooltip\">{{currentValues[1]}}</span>\n </span>\n </div>\n <div class=\"values\">\n <span>{{initValues[0]}}</span>\n <span>{{initValues[1]}}</span>\n </div>\n</div>\n",
styles: [".slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:\"\";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:\"\";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:104%;margin-left:-2%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}"]
template: "<!--npn-slider template-->\n<div class=\"slider\" [class.disabled]=\"isDisabled\">\n <div class=\"bar\" (mousemove)=\"handlerSliding($event)\" (panmove)=\"handlerSliding($event)\">\n <span class=\"left-handle\" [ngClass]=\"{'active': isHandlerActive && currentHandlerIndex === handlerIndex.left,\n 'last-active': currentHandlerIndex === handlerIndex.left\n }\"\n [style.left.%]=\"handlerX[handlerIndex.left]\" (mousedown)=\"setHandlerActive($event, handlerIndex.left)\" (panstart)=\"setHandlerActive($event, handlerIndex.left)\">\n <span *ngIf=\"!hideTooltip\" class=\"handle-tooltip\">{{currentValues[handlerIndex.left]}}</span>\n </span>\n <div class=\"filler\">\n <div class=\"step-indicators\">\n <span *ngFor=\"let stepPos of stepIndicatorPositions\" [style.left.px]=\"stepPos\"></span>\n </div>\n <span *ngIf=\"multiRange\" [style.left.%]=\"handlerX[0]\" [style.width.%]=\"handlerX[handlerIndex.right] - handlerX[handlerIndex.left]\"></span>\n <span *ngIf=\"!multiRange\" [style.left.%]=\"0\" [style.width.%]=\"handlerX[0]\"></span>\n </div>\n <span *ngIf=\"multiRange\" class=\"right-handle\" [ngClass]=\"{'active': isHandlerActive && currentHandlerIndex === handlerIndex.right,\n 'last-active': currentHandlerIndex === handlerIndex.right\n }\"\n [style.left.%]=\"handlerX[handlerIndex.right]\" (mousedown)=\"setHandlerActive($event, handlerIndex.right)\"\n (panstart)=\"setHandlerActive($event, handlerIndex.right)\">\n <span *ngIf=\"!hideTooltip\" class=\"handle-tooltip\">{{currentValues[handlerIndex.right]}}</span>\n </span>\n </div>\n <div class=\"values\" *ngIf=\"!hideValues\">\n <span>{{initValues[handlerIndex.left]}}</span>\n <span>{{initValues[handlerIndex.right]}}</span>\n </div>\n</div>\n",
styles: [".slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:\"\";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:\"\";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:102%;margin-left:-1%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}"]
},] },

@@ -474,2 +541,5 @@ ];

showStepIndicator: [{ type: Input }],
multiRange: [{ type: Input }],
setHideTooltip: [{ type: Input, args: ['hide-tooltip',] }],
setHideValues: [{ type: Input, args: ['hide-values',] }],
setDisabled: [{ type: Input, args: ['disabled',] }],

@@ -513,2 +583,2 @@ onChange: [{ type: Output }],

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbnBuLXNsaWRlci9saWIvdXRpbGl0aWVzLnRzIiwibmc6Ly9ucG4tc2xpZGVyL2xpYi9ucG4tc2xpZGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbnBuLXNsaWRlci9saWIvbnBuLXNsaWRlci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vKlV0aWxpdGllcyAqL1xyXG5leHBvcnQgY2xhc3MgVXRpbGl0aWVzIHtcclxuXHJcbiAgcHVibGljIGlzTnVtYmVyQXJyYXkoYXJyOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoKHZhbHVlKSA9PiAhaXNOYU4odmFsdWUpKS5sZW5ndGggPT09IGFyci5sZW5ndGg7XHJcbiAgfVxyXG4gIHB1YmxpYyBpc051bGxPckVtcHR5KG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IG9iaiA9PT0gJyc7XHJcbiAgfVxyXG4gIHB1YmxpYyBmaW5kTmV4dFZhbGlkU3RlcFZhbHVlKG46IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGRpdmlzb3JzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3FydE51bSA9IE1hdGguc3FydChuKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FydE51bTsgaSsrKSB7XHJcbiAgICAgIGlmIChuICUgaSA9PT0gMCkge1xyXG4gICAgICAgIGlmICgobiAvIGkpID09PSBpKSB7XHJcbiAgICAgICAgICBkaXZpc29ycy5wdXNoKGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkaXZpc29ycy5wdXNoKGkpO1xyXG4gICAgICAgICAgZGl2aXNvcnMucHVzaChuIC8gaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBkaXZpc29ycy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGEgPSBOdW1iZXIoYSk7XHJcbiAgICAgIGIgPSBOdW1iZXIoYik7XHJcbiAgICAgIGlmIChhIDwgYikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYSA+IGIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gICAgZm9yIChsZXQgaSA9IGRpdmlzb3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChzdGVwID4gZGl2aXNvcnNbaV0pIHtcclxuICAgICAgICBzdGVwID0gZGl2aXNvcnNbaV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdGVwO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbiAgICAgICAgICBFbGVtZW50UmVmLCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVdGlsaXRpZXMgfSBmcm9tICcuL3V0aWxpdGllcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25wbi1zbGlkZXInLFxuICB0ZW1wbGF0ZTogYDwhLS1ucG4tc2xpZGVyIHRlbXBsYXRlLS0+XHJcbjxkaXYgY2xhc3M9XCJzbGlkZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJiYXJcIiAobW91c2Vtb3ZlKT1cImhhbmRsZXJTbGlkaW5nKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgKHBhbm1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJsZWZ0LWhhbmRsZVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6aXNIYW5kbGVyQWN0aXZlJiZjdXJyZW50SGFuZGxlckluZGV4PT0wLCdsYXN0LWFjdGl2ZSc6Y3VycmVudEhhbmRsZXJJbmRleD09MH1cIlxyXG4gICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJoYW5kbGVyWFswXVwiXHJcbiAgICAgICAgICAobW91c2Vkb3duKT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LDApXCJcclxuICAgICAgICAgIChwYW5zdGFydCk9XCJzZXRIYW5kbGVyQWN0aXZlKCRldmVudCwwKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImhhbmRsZS10b29sdGlwXCI+e3tjdXJyZW50VmFsdWVzWzBdfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsbGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWluZGljYXRvcnNcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHN0ZXBQb3Mgb2Ygc3RlcEluZGljYXRvclBvc2l0aW9uc1wiIFtzdHlsZS5sZWZ0LnB4XT1cInN0ZXBQb3NcIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3BhbiBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzBdXCIgW3N0eWxlLndpZHRoLiVdPVwiaGFuZGxlclhbMV0gLSBoYW5kbGVyWFswXVwiPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gY2xhc3M9XCJyaWdodC1oYW5kbGVcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOmlzSGFuZGxlckFjdGl2ZSYmY3VycmVudEhhbmRsZXJJbmRleD09MSwgJ2xhc3QtYWN0aXZlJzpjdXJyZW50SGFuZGxlckluZGV4PT0xfVwiXHJcbiAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImhhbmRsZXJYWzFdXCJcclxuICAgICAgICAgIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsMSlcIlxyXG4gICAgICAgICAgKHBhbnN0YXJ0KT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LDEpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbMV19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsdWVzXCI+XHJcbiAgICA8c3Bhbj57e2luaXRWYWx1ZXNbMF19fTwvc3Bhbj5cclxuICAgIDxzcGFuPnt7aW5pdFZhbHVlc1sxXX19PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuYCxcbiAgc3R5bGVzOiBbYC5zbGlkZXIsLnNsaWRlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uc2xpZGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MzBweDtwYWRkaW5nOjRweCAxMHB4O2N1cnNvcjpkZWZhdWx0O2ZvbnQtc2l6ZToxMnB4fS5zbGlkZXIgLmJhcnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2U4ZThlODtoZWlnaHQ6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjVweDtib3gtc2hhZG93Omluc2V0IDFweCAxcHggNXB4ICNiYWJhYmF9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDojYmVkY2IyO2JvcmRlcjo3cHggc29saWQgIzcxYjM1Nztib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweDttYXJnaW4tbGVmdDotMTBweDt6LWluZGV4OjE7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpsZWZ0IC4ycyBlYXNlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLmxhc3QtYWN0aXZlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZS5sYXN0LWFjdGl2ZXt6LWluZGV4OjJ9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXB7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTM0cHg7bGVmdDotMTRweDtib3JkZXI6MXB4IHNvbGlkICM4ZmMzN2E7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNHB4O21pbi13aWR0aDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2Q5ZWJkMjtjb2xvcjojNzFiMzU3O2ZvbnQtd2VpZ2h0OjcwMDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2U7b3BhY2l0eTowfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDpiZWZvcmUsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDpiZWZvcmV7Y29udGVudDpcIlwiO2JvcmRlcjo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojOGZjMzdhO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDQlO2xlZnQ6MzMlfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDphZnRlciwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwOmFmdGVye2NvbnRlbnQ6XCJcIjtib3JkZXI6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3AtY29sb3I6I2Q5ZWJkMjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjMzJX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZS5hY3RpdmU+LmhhbmRsZS10b29sdGlwLC5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlOmhvdmVyPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUuYWN0aXZlPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGU6aG92ZXI+LmhhbmRsZS10b29sdGlwe29wYWNpdHk6MX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6NXB4O2JvcmRlcjoxcHggc29saWQgI2JlZGNiMn0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5zcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JhY2tncm91bmQ6I2JlZGNiMjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZX0uc2xpZGVyIC5iYXIgZGl2LmZpbGxlcj5kaXYuc3RlcC1pbmRpY2F0b3Jze3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+ZGl2LnN0ZXAtaW5kaWNhdG9ycz5zcGFue3dpZHRoOjFweDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDtiYWNrZ3JvdW5kOiM3MWIzNTc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5zbGlkZXIgLnZhbHVlc3tkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjRweDt3aWR0aDoxMDQlO21hcmdpbi1sZWZ0Oi0yJTtjb2xvcjojOTA4ZjkwfS5zbGlkZXIgLnZhbHVlcyBzcGFuOmZpcnN0LWNoaWxke2Zsb2F0OmxlZnR9LnNsaWRlciAudmFsdWVzIHNwYW46bGFzdC1jaGlsZHtmbG9hdDpyaWdodH0uc2xpZGVyLmRpc2FibGVke29wYWNpdHk6LjR9LnNsaWRlci5kaXNhYmxlZCAuYmFye2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ubGVmdC1oYW5kbGUsLnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ucmlnaHQtaGFuZGxle2N1cnNvcjpub3QtYWxsb3dlZH0uc2xpZGVyLmRpc2FibGVkIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXAsLnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcHtkaXNwbGF5Om5vbmV9YF1cbn0pXG5leHBvcnQgY2xhc3MgTnBuU2xpZGVyQ29tcG9uZW50IGV4dGVuZHMgVXRpbGl0aWVzIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHNsaWRlck1vZGVsID0gWzAsIDAsIDBdO1xuICBwcml2YXRlIHN0ZXAgPSAxO1xuICBwcml2YXRlIHNsaWRlcldpZHRoID0gMDtcbiAgcHJpdmF0ZSB0b3RhbERpZmYgPSAwO1xuICBwcml2YXRlIHN0YXJ0Q2xpZW50WCA9IDA7XG4gIHByaXZhdGUgc3RhcnRQbGVmdCA9IDA7XG4gIHByaXZhdGUgc3RhcnRQUmlnaHQgPSAwO1xuICBwcml2YXRlIG1pblZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4VmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBtaW5TZWxlY3RlZDogbnVtYmVyO1xuICBwcml2YXRlIG1heFNlbGVjdGVkOiBudW1iZXI7XG4gIHByaXZhdGUgc2xpZGVySW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGluaXRWYWx1ZXM6IG51bWJlcltdID0gW107XG4gIHB1YmxpYyBjdXJyZW50VmFsdWVzOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgcHVibGljIGhhbmRsZXJYOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgcHVibGljIGlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgcHVibGljIGlzTW91c2VFdmVudFN0YXJ0ID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50SGFuZGxlckluZGV4ID0gMDtcbiAgcHVibGljIHN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMgPSBbXTtcbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBJbnB1dCgnbWluJylcbiAgc2V0IHNldE1pblZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWluVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWF4JylcbiAgc2V0IHNldE1heFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWF4VmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWluU2VsZWN0ZWQnKVxuICBzZXQgc2V0TWluU2VsZWN0ZWRWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdtYXhTZWxlY3RlZCcpXG4gIHNldCBzZXRNYXhTZWxlY3RlZFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWF4U2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLm1heFNlbGVjdGVkID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdzdGVwJylcbiAgc2V0IHN0ZXBWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc3RlcCA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2hvd1N0ZXBJbmRpY2F0b3IgPSBmYWxzZTtcblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgc2V0IHNldERpc2FibGVkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSAodmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJ2Rpc2FibGVkJykgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNsaWRlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlc1snc2V0TWluU2VsZWN0ZWRWYWx1ZXMnXSAmJiAhY2hhbmdlc1snc2V0TWF4U2VsZWN0ZWRWYWx1ZXMnXSAmJiB0aGlzLnNsaWRlckluaXRpYXRlZCkge1xuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gaW5pdGFpbGl6ZSBlbnRpcmUgU2xpZGVyKi9cbiAgcHVibGljIGluaXRpYWxpemVTbGlkZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRha2luZyB3aWR0aCBvZiBzbGlkZXIgYmFyIGVsZW1lbnQuXG4gICAgICB0aGlzLnNsaWRlcldpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgICB0aGlzLnNsaWRlckluaXRpYXRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0aWFsaXplIHZhcmlhYmxlcyBhbmQgbW9kZWwgdmFsdWVzICovXG4gIHByaXZhdGUgcmVzZXRNb2RlbCgpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2xpZGVyVmFsdWVzKCk7XG4gICAgLy8gU2V0dGluZyB0aGUgbW9kZWwgdmFsdWVzXG4gICAgdGhpcy5zbGlkZXJNb2RlbCA9IFtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1swXSAtIHRoaXMuaW5pdFZhbHVlc1swXSxcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1swXSxcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1sxXVxuICAgIF07XG5cbiAgICB0aGlzLnRvdGFsRGlmZiA9IHRoaXMuc2xpZGVyTW9kZWwucmVkdWNlKChwcmV2VmFsdWUsIGN1clZhbHVlKSA9PiBwcmV2VmFsdWUgKyBjdXJWYWx1ZSwgMCk7XG5cbiAgICAvLyBWYWxpZGF0aW9uIGZvciBzbGlkZXIgc3RlcFxuICAgIGlmICh0aGlzLnRvdGFsRGlmZiAlIHRoaXMuc3RlcCAhPT0gMCkge1xuICAgICAgY29uc3QgbmV3U3RlcCA9IHRoaXMuZmluZE5leHRWYWxpZFN0ZXBWYWx1ZSh0aGlzLnRvdGFsRGlmZiwgdGhpcy5zdGVwKTtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBzdGVwIHZhbHVlIFwiJyArIHRoaXMuc3RlcCArICdcIiA6IGFuZCB0b29rIFwiJyArIG5ld1N0ZXAgKyAnXCIgYXMgZGVmYXVsdCBzdGVwJyk7XG4gICAgICB0aGlzLnN0ZXAgPSBuZXdTdGVwO1xuICAgIH1cbiAgICBpZiAodGhpcy5zbGlkZXJXaWR0aCAvICh0aGlzLnRvdGFsRGlmZiAvIHRoaXMuc3RlcCkgPCAxMCkge1xuICAgICAgY29uc29sZS5lcnJvcihgJ3N0ZXAnIHZhbHVlIGlzIHRvbyBzbWFsbCBjb21wYXJlZCB0byBtaW4gJiBtYXggdmFsdWUgZGlmZmVyZW5jZSBhbmQgc2xpZGVyIHdpZHRoLlxuICAgICAgICBTbGlkZXIgbWlnaHQgbm90IHdvcmsgcHJvcGVybHkhLiBQcm92aWRlIHNsaWdodCBsYXJnZSB2YWx1ZSBmb3IgJ3N0ZXAnYCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZXBJbmRpY2F0b3IoKTtcbiAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZG8gdmFsaWRhdGlvbiBvZiBpbml0IGFuZCBzZWxldGVkIHJhbmdlIHZhbHVlcyovXG4gIHByaXZhdGUgdmFsaWRhdGVTbGlkZXJWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNOdWxsT3JFbXB0eSh0aGlzLm1pblZhbHVlKSB8fCB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhWYWx1ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5pdFZhbHVlcyhbMCwgMF0pO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50VmFsdWUoWzAsIDBdLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluVmFsdWUgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUluaXRWYWx1ZXMoWzAsIDBdKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFswLCAwXSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFZhbHVlcyA9IFt0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlXTtcbiAgICAgIC8qXG4gICAgICAqIFZhbGlkYXRpb24gZm9yIFNlbGVjdGVkIHJhbmdlIHZhbHVlc1xuICAgICAgKi9cbiAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5taW5TZWxlY3RlZCkgPyAwIDogdGhpcy5taW5TZWxlY3RlZDtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5tYXhTZWxlY3RlZCkgPyAwIDogdGhpcy5tYXhTZWxlY3RlZDtcblxuICAgICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgPCB0aGlzLm1pblZhbHVlIHx8IHRoaXMubWluU2VsZWN0ZWQgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0ZWQgPCB0aGlzLm1pblZhbHVlIHx8IHRoaXMubWF4U2VsZWN0ZWQgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgPiB0aGlzLm1heFNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFt0aGlzLm1pblNlbGVjdGVkLCB0aGlzLm1heFNlbGVjdGVkXSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gYWRkIHN0ZXAgaW5pZGljYXRvciB0byBzbGlkZXIgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RlcEluZGljYXRvcigpIHtcbiAgICBpZiAodGhpcy5zaG93U3RlcEluZGljYXRvcikge1xuICAgICAgdGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zID0gW107XG4gICAgICBjb25zdCBudW1PZlN0ZXBJbmRpY2F0b3JzID0gdGhpcy50b3RhbERpZmYgLyB0aGlzLnN0ZXA7XG4gICAgICBpZiAodGhpcy5zbGlkZXJXaWR0aCAvIG51bU9mU3RlcEluZGljYXRvcnMgPj0gMTApIHtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gdGhpcy5zbGlkZXJXaWR0aCAvIG51bU9mU3RlcEluZGljYXRvcnM7XG4gICAgICAgIGxldCBsZWZ0UG9zaXRpb24gPSBpbmNyZW1lbnQ7XG4gICAgICAgIHdoaWxlICh0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMubGVuZ3RoIDwgbnVtT2ZTdGVwSW5kaWNhdG9ycyAtIDEpIHtcbiAgICAgICAgICB0aGlzLnN0ZXBJbmRpY2F0b3JQb3NpdGlvbnMucHVzaCgrbGVmdFBvc2l0aW9uLnRvRml4ZWQoMikpO1xuICAgICAgICAgIGxlZnRQb3NpdGlvbiArPSBpbmNyZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBzZXQgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50VmFsdWUoYXJyYXlWYWx1ZTogbnVtYmVyW10sIHByaXZhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMubWluU2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4U2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICAgIGlmICghcHJpdmF0ZUNoYW5nZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuY3VycmVudFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWVzICovXG4gIHByaXZhdGUgdXBkYXRlSW5pdFZhbHVlcyhhcnJheVZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMubWluVmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4VmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyUG9zaXRpb24oKSB7XG4gICAgbGV0IHJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgLy8gVXBkYXRpbmcgc2VsZWN0ZWQgdmFsdWVzIDogY3VycmVudCB2YWx1ZXNcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMF0gKyB0aGlzLnNsaWRlck1vZGVsWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5zbGlkZXJNb2RlbFsyXVxuICAgIF0pO1xuICAgIC8qU2V0dGluZyBoYW5kbGVyIHBvc2l0aW9uICovXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc2xpZGVyTW9kZWwubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBydW5uaW5nVG90YWwgKz0gdGhpcy5zbGlkZXJNb2RlbFtpXTtcbiAgICAgIHRoaXMuaGFuZGxlclhbaV0gPSAocnVubmluZ1RvdGFsIC8gdGhpcy50b3RhbERpZmYpICogMTAwO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBtb2RlbCBhcnJheSB2YWx1ZXMgLSB3aWxsIHRyeSB0byByZWZpbmUgdGhlIHZhbHVlcyB1c2luZyBzdGVwICovXG4gIHByaXZhdGUgc2V0TW9kZWxWYWx1ZShpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc3RlcCA+IDEpIHtcbiAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHRoaXMuc3RlcCkgKiB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyTW9kZWxbaW5kZXhdID0gdmFsdWU7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkaXNhYmxlIGhhbmRsZXIgbW92ZW1lbnQqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNldXBcbiAgKiBvbi1wYW5lbmRcbiAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcpXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhbmVuZCcpXG4gIHNldEhhbmRsZXJBY3RpdmVPZmYoKSB7XG4gICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZGV0ZWN0IHN0YXJ0IGRyYWdpbmcgaGFuZGxlciovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2Vkb3duXG4gICogb24tcGFuc3RhcnRcbiAgKi9cbiAgcHVibGljIHNldEhhbmRsZXJBY3RpdmUoZXZlbnQ6IGFueSwgaGFuZGxlckluZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZXZlbnQuY2xpZW50WCkge1xuICAgICAgICB0aGlzLnN0YXJ0Q2xpZW50WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmRlbHRhWCkge1xuICAgICAgICB0aGlzLnN0YXJ0Q2xpZW50WCA9IGV2ZW50LmRlbHRhWDtcbiAgICAgICAgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTW91c2VFdmVudFN0YXJ0IHx8IHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SGFuZGxlckluZGV4ID0gaGFuZGxlckluZGV4O1xuICAgICAgICB0aGlzLnN0YXJ0UGxlZnQgPSB0aGlzLnNsaWRlck1vZGVsW2hhbmRsZXJJbmRleF07XG4gICAgICAgIHRoaXMuc3RhcnRQUmlnaHQgPSB0aGlzLnNsaWRlck1vZGVsW2hhbmRsZXJJbmRleCArIDFdO1xuICAgICAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKk1ldGhvZCB0byBjYWxjdWxhdGUgc2lsZGVyIGhhbmRsZXIgbW92ZW1lbnQgKi9cbiAgLypFeGVjdXRlIG9uIGV2ZW50czpcbiAgKiBvbi1tb3VzZW1vdmVcbiAgKiBvbi1wYW5tb3ZlXG4gICovXG4gIHB1YmxpYyBoYW5kbGVyU2xpZGluZyhldmVudDogYW55KSB7XG4gICAgaWYgKCh0aGlzLmlzTW91c2VFdmVudFN0YXJ0ICYmIGV2ZW50LmNsaWVudFgpIHx8ICh0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ICYmIGV2ZW50LmRlbHRhWCkpIHtcbiAgICAgIGNvbnN0IG1vdmVkWCA9IE1hdGgucm91bmQoKChldmVudC5jbGllbnRYIHx8IGV2ZW50LmRlbHRhWCkgLSB0aGlzLnN0YXJ0Q2xpZW50WCkgLyB0aGlzLnNsaWRlcldpZHRoICogdGhpcy50b3RhbERpZmYpO1xuICAgICAgY29uc3QgbmV4dFBMZWZ0ID0gdGhpcy5zdGFydFBsZWZ0ICsgbW92ZWRYO1xuICAgICAgY29uc3QgbmV4dFBSaWdodCA9IHRoaXMuc3RhcnRQUmlnaHQgLSBtb3ZlZFg7XG4gICAgICBpZiAobmV4dFBMZWZ0ID49IDAgJiYgbmV4dFBSaWdodCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZSh0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXgsIG5leHRQTGVmdCk7XG4gICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZSh0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggKyAxLCBuZXh0UFJpZ2h0KTtcbiAgICAgICAgdGhpcy5zZXRIYW5kbGVyUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJyb3dzZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOcG5TbGlkZXJDb21wb25lbnQgfSBmcm9tICcuL25wbi1zbGlkZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIEJyb3dzZXJNb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbTnBuU2xpZGVyQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW05wblNsaWRlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTnBuU2xpZGVyTW9kdWxlIHsgfVxuIl0sIm5hbWVzIjpbInRzbGliXzEuX19leHRlbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBLElBQUE7Ozs7Ozs7SUFFUyxpQ0FBYTs7OztjQUFDLEdBQWE7UUFDaEMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDOzs7Ozs7SUFFN0QsaUNBQWE7Ozs7Y0FBQyxHQUFRO1FBQzNCLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Ozs7Ozs7SUFFbEQsMENBQXNCOzs7OztjQUFDLENBQVMsRUFBRSxJQUFZO1FBQ25ELHFCQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIscUJBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsS0FBSyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDZixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO3FCQUFNO29CQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1NBQ0Y7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUMsQ0FBQyxFQUFF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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBuLXNsaWRlci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbnBuLXNsaWRlci9saWIvdXRpbGl0aWVzLnRzIiwibmc6Ly9ucG4tc2xpZGVyL2xpYi9ucG4tc2xpZGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbnBuLXNsaWRlci9saWIvbnBuLXNsaWRlci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vKlV0aWxpdGllcyAqL1xyXG5leHBvcnQgY2xhc3MgVXRpbGl0aWVzIHtcclxuXHJcbiAgcHVibGljIGlzTnVtYmVyQXJyYXkoYXJyOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChhcnIgJiYgYXJyLmxlbmd0aCAmJiBhcnIuZmlsdGVyKCh2YWx1ZSkgPT4gIWlzTmFOKHZhbHVlKSkubGVuZ3RoID09PSBhcnIubGVuZ3RoKSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGlzTnVsbE9yRW1wdHkob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgb2JqID09PSAnJztcclxuICB9XHJcbiAgcHVibGljIHRvQm9vbGVhbihvYmo6IGFueSwgLi4uYWxsb3dlZFZhbHVlcyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChvYmogPT09ICcnIHx8IG9iaiA9PT0gJ3RydWUnIHx8IGFsbG93ZWRWYWx1ZXMuaW5kZXhPZihvYmopICE9PSAtMSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBmaW5kTmV4dFZhbGlkU3RlcFZhbHVlKG46IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGRpdmlzb3JzU2V0MTogbnVtYmVyW10gPSBbXTtcclxuICAgIGNvbnN0IGRpdmlzb3JzU2V0MjogbnVtYmVyW10gPSBbXTtcclxuICAgIGNvbnN0IHNxcnROdW0gPSBNYXRoLnNxcnQobik7XHJcbiAgICBsZXQgbmV3U3RlcCA9IC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcXJ0TnVtOyBpKyspIHtcclxuICAgICAgaWYgKG4gJSBpID09PSAwKSB7XHJcbiAgICAgICAgaWYgKChuIC8gaSkgPT09IGkpIHtcclxuICAgICAgICAgIGRpdmlzb3JzU2V0MS5wdXNoKGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkaXZpc29yc1NldDEucHVzaChpKTtcclxuICAgICAgICAgIGRpdmlzb3JzU2V0Mi5wdXNoKG4gLyBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFBpY2tpbmcgbmV3U3RlcCBieSBjaGVja2luZyBsYXJnZSBzZXQgb2YgZGl2aXNvcnMgZmlyc3RcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGl2aXNvcnNTZXQyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChzdGVwID4gZGl2aXNvcnNTZXQyW2ldKSB7XHJcbiAgICAgICAgbmV3U3RlcCA9IGRpdmlzb3JzU2V0MltpXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG5ld1N0ZXAgPT09IC0xKSB7IC8vIGNoZWNraW5nIHNldCBvZiBzbWFsbCBkaXZpc29ycyBpZiBuZXdTdGVwIGRpZG4ndCBmaW5kIG91dCB0aWxsLlxyXG4gICAgICBmb3IgKGxldCBpID0gZGl2aXNvcnNTZXQxLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHN0ZXAgPiBkaXZpc29yc1NldDFbaV0pIHtcclxuICAgICAgICAgIG5ld1N0ZXAgPSBkaXZpc29yc1NldDFbaV07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAobmV3U3RlcCA9PT0gLTEpID8gMSA6IG5ld1N0ZXA7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXRpbGl0aWVzIH0gZnJvbSAnLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgU2xpZGVySGFuZGxlckVudW0gfSBmcm9tICcuL3NsaWRlci1oYW5kbGVyLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICducG4tc2xpZGVyJyxcbiAgdGVtcGxhdGU6IGA8IS0tbnBuLXNsaWRlciB0ZW1wbGF0ZS0tPlxyXG48ZGl2IGNsYXNzPVwic2xpZGVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiYmFyXCIgKG1vdXNlbW92ZSk9XCJoYW5kbGVyU2xpZGluZygkZXZlbnQpXCIgKHBhbm1vdmUpPVwiaGFuZGxlclNsaWRpbmcoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJsZWZ0LWhhbmRsZVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNIYW5kbGVyQWN0aXZlICYmIGN1cnJlbnRIYW5kbGVySW5kZXggPT09IGhhbmRsZXJJbmRleC5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2xhc3QtYWN0aXZlJzogY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LmxlZnRcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgW3N0eWxlLmxlZnQuJV09XCJoYW5kbGVyWFtoYW5kbGVySW5kZXgubGVmdF1cIiAobW91c2Vkb3duKT1cInNldEhhbmRsZXJBY3RpdmUoJGV2ZW50LCBoYW5kbGVySW5kZXgubGVmdClcIiAocGFuc3RhcnQpPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5sZWZ0KVwiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFoaWRlVG9vbHRpcFwiIGNsYXNzPVwiaGFuZGxlLXRvb2x0aXBcIj57e2N1cnJlbnRWYWx1ZXNbaGFuZGxlckluZGV4LmxlZnRdfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsbGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWluZGljYXRvcnNcIj5cclxuICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgc3RlcFBvcyBvZiBzdGVwSW5kaWNhdG9yUG9zaXRpb25zXCIgW3N0eWxlLmxlZnQucHhdPVwic3RlcFBvc1wiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlSYW5nZVwiIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbMF1cIiBbc3R5bGUud2lkdGguJV09XCJoYW5kbGVyWFtoYW5kbGVySW5kZXgucmlnaHRdIC0gaGFuZGxlclhbaGFuZGxlckluZGV4LmxlZnRdXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFtdWx0aVJhbmdlXCIgW3N0eWxlLmxlZnQuJV09XCIwXCIgW3N0eWxlLndpZHRoLiVdPVwiaGFuZGxlclhbMF1cIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuICpuZ0lmPVwibXVsdGlSYW5nZVwiIGNsYXNzPVwicmlnaHQtaGFuZGxlXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0hhbmRsZXJBY3RpdmUgJiYgY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LnJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2xhc3QtYWN0aXZlJzogY3VycmVudEhhbmRsZXJJbmRleCA9PT0gaGFuZGxlckluZGV4LnJpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiaGFuZGxlclhbaGFuZGxlckluZGV4LnJpZ2h0XVwiIChtb3VzZWRvd24pPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5yaWdodClcIlxyXG4gICAgICAocGFuc3RhcnQpPVwic2V0SGFuZGxlckFjdGl2ZSgkZXZlbnQsIGhhbmRsZXJJbmRleC5yaWdodClcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhaGlkZVRvb2x0aXBcIiBjbGFzcz1cImhhbmRsZS10b29sdGlwXCI+e3tjdXJyZW50VmFsdWVzW2hhbmRsZXJJbmRleC5yaWdodF19fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsdWVzXCIgKm5nSWY9XCIhaGlkZVZhbHVlc1wiPlxyXG4gICAgPHNwYW4+e3tpbml0VmFsdWVzW2hhbmRsZXJJbmRleC5sZWZ0XX19PC9zcGFuPlxyXG4gICAgPHNwYW4+e3tpbml0VmFsdWVzW2hhbmRsZXJJbmRleC5yaWdodF19fTwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbmAsXG4gIHN0eWxlczogW2Auc2xpZGVyLC5zbGlkZXIgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnNsaWRlcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjMwcHg7cGFkZGluZzo0cHggMTBweDtjdXJzb3I6ZGVmYXVsdDtmb250LXNpemU6MTJweH0uc2xpZGVyIC5iYXJ7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNlOGU4ZTg7aGVpZ2h0OjEwcHg7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czo1cHg7Ym94LXNoYWRvdzppbnNldCAxcHggMXB4IDVweCAjYmFiYWJhfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2JhY2tncm91bmQ6I2JlZGNiMjtib3JkZXI6N3B4IHNvbGlkICM3MWIzNTc7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bWFyZ2luLWxlZnQ6LTEwcHg7ei1pbmRleDoxO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246bGVmdCAuMnMgZWFzZX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZS5sYXN0LWFjdGl2ZSwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUubGFzdC1hY3RpdmV7ei1pbmRleDoyfS5zbGlkZXIgLmJhcj5zcGFuLmxlZnQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5yaWdodC1oYW5kbGUgLmhhbmRsZS10b29sdGlwe2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zNHB4O2xlZnQ6LTE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOGZjMzdhO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDRweDttaW4td2lkdGg6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNkOWViZDI7Y29sb3I6IzcxYjM1Nztmb250LXdlaWdodDo3MDA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlO29wYWNpdHk6MH0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YmVmb3JlLC5zbGlkZXIgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YmVmb3Jle2NvbnRlbnQ6XCJcIjtib3JkZXI6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3AtY29sb3I6IzhmYzM3YTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTA0JTtsZWZ0OjMzJX0uc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXA6YWZ0ZXIsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlIC5oYW5kbGUtdG9vbHRpcDphZnRlcntjb250ZW50OlwiXCI7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWNvbG9yOiNkOWViZDI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDozMyV9LnNsaWRlciAuYmFyPnNwYW4ubGVmdC1oYW5kbGUuYWN0aXZlPi5oYW5kbGUtdG9vbHRpcCwuc2xpZGVyIC5iYXI+c3Bhbi5sZWZ0LWhhbmRsZTpob3Zlcj4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlLmFjdGl2ZT4uaGFuZGxlLXRvb2x0aXAsLnNsaWRlciAuYmFyPnNwYW4ucmlnaHQtaGFuZGxlOmhvdmVyPi5oYW5kbGUtdG9vbHRpcHtvcGFjaXR5OjF9LnNsaWRlciAuYmFyIGRpdi5maWxsZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOjVweDtib3JkZXI6MXB4IHNvbGlkICNiZWRjYjJ9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtiYWNrZ3JvdW5kOiNiZWRjYjI7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2V9LnNsaWRlciAuYmFyIGRpdi5maWxsZXI+ZGl2LnN0ZXAtaW5kaWNhdG9yc3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5zbGlkZXIgLmJhciBkaXYuZmlsbGVyPmRpdi5zdGVwLWluZGljYXRvcnM+c3Bhbnt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7YmFja2dyb3VuZDojNzFiMzU3O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uc2xpZGVyIC52YWx1ZXN7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDo0cHg7d2lkdGg6MTAyJTttYXJnaW4tbGVmdDotMSU7Y29sb3I6IzkwOGY5MH0uc2xpZGVyIC52YWx1ZXMgc3BhbjpmaXJzdC1jaGlsZHtmbG9hdDpsZWZ0fS5zbGlkZXIgLnZhbHVlcyBzcGFuOmxhc3QtY2hpbGR7ZmxvYXQ6cmlnaHR9LnNsaWRlci5kaXNhYmxlZHtvcGFjaXR5Oi40fS5zbGlkZXIuZGlzYWJsZWQgLmJhcntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLmxlZnQtaGFuZGxlLC5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZXtjdXJzb3I6bm90LWFsbG93ZWR9LnNsaWRlci5kaXNhYmxlZCAuYmFyPnNwYW4ubGVmdC1oYW5kbGUgLmhhbmRsZS10b29sdGlwLC5zbGlkZXIuZGlzYWJsZWQgLmJhcj5zcGFuLnJpZ2h0LWhhbmRsZSAuaGFuZGxlLXRvb2x0aXB7ZGlzcGxheTpub25lfWBdXG59KVxuZXhwb3J0IGNsYXNzIE5wblNsaWRlckNvbXBvbmVudCBleHRlbmRzIFV0aWxpdGllcyBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBzbGlkZXJNb2RlbCA9IFswLCAwLCAwXTtcbiAgcHJpdmF0ZSBzdGVwID0gMTtcbiAgcHJpdmF0ZSBzbGlkZXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgdG90YWxEaWZmID0gMDtcbiAgcHJpdmF0ZSBzdGFydENsaWVudFggPSAwO1xuICBwcml2YXRlIHN0YXJ0UGxlZnQgPSAwO1xuICBwcml2YXRlIHN0YXJ0UFJpZ2h0ID0gMDtcbiAgcHJpdmF0ZSBtaW5WYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIG1heFZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgbWluU2VsZWN0ZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBtYXhTZWxlY3RlZDogbnVtYmVyO1xuICBwcml2YXRlIHNsaWRlckluaXRpYXRlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbml0VmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgY3VycmVudFZhbHVlczogbnVtYmVyW10gPSBbMCwgMF07XG4gIHB1YmxpYyBoYW5kbGVyWDogbnVtYmVyW10gPSBbMCwgMF07XG4gIHB1YmxpYyBpc0hhbmRsZXJBY3RpdmUgPSBmYWxzZTtcbiAgcHVibGljIGlzVG91Y2hFdmVudFN0YXJ0ID0gZmFsc2U7XG4gIHB1YmxpYyBpc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudEhhbmRsZXJJbmRleCA9IDA7XG4gIHB1YmxpYyBzdGVwSW5kaWNhdG9yUG9zaXRpb25zID0gW107XG4gIHB1YmxpYyBpc0Rpc2FibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBoaWRlVG9vbHRpcCA9IGZhbHNlO1xuICBwdWJsaWMgaGlkZVZhbHVlcyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBoYW5kbGVySW5kZXggPSBTbGlkZXJIYW5kbGVyRW51bTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBJbnB1dCgnbWluJylcbiAgc2V0IHNldE1pblZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWluVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWF4JylcbiAgc2V0IHNldE1heFZhbHVlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWF4VmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWluU2VsZWN0ZWQnKVxuICBzZXQgc2V0TWluU2VsZWN0ZWRWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHRoaXMubWluU2VsZWN0ZWQgIT09IE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWluU2VsZWN0ZWQgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnbWF4U2VsZWN0ZWQnKVxuICBzZXQgc2V0TWF4U2VsZWN0ZWRWYWx1ZXModmFsdWU6IG51bWJlcikge1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHRoaXMubWF4U2VsZWN0ZWQgIT09IE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHRoaXMubWF4U2VsZWN0ZWQgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoJ3N0ZXAnKVxuICBzZXQgc3RlcFZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5zdGVwID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzaG93U3RlcEluZGljYXRvciA9IGZhbHNlO1xuICBASW5wdXQoKSBtdWx0aVJhbmdlID0gdHJ1ZTtcbiAgQElucHV0KCdoaWRlLXRvb2x0aXAnKVxuICBzZXQgc2V0SGlkZVRvb2x0aXAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhpZGVUb29sdGlwID0gdGhpcy50b0Jvb2xlYW4odmFsdWUpO1xuICB9XG4gIEBJbnB1dCgnaGlkZS12YWx1ZXMnKVxuICBzZXQgc2V0SGlkZVZhbHVlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaGlkZVZhbHVlcyA9IHRoaXMudG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxuICBzZXQgc2V0RGlzYWJsZWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMudG9Cb29sZWFuKHZhbHVlLCAnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplU2xpZGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuc2xpZGVySW5pdGlhdGVkKSB7XG4gICAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShjaGFuZ2VzLnNldE1pblNlbGVjdGVkVmFsdWVzKVxuICAgICAgICAmJiBjaGFuZ2VzLnNldE1pblNlbGVjdGVkVmFsdWVzLnByZXZpb3VzVmFsdWUgPT09IGNoYW5nZXMuc2V0TWluU2VsZWN0ZWRWYWx1ZXMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KGNoYW5nZXMuc2V0TWF4U2VsZWN0ZWRWYWx1ZXMpXG4gICAgICAgICYmIGNoYW5nZXMuc2V0TWF4U2VsZWN0ZWRWYWx1ZXMucHJldmlvdXNWYWx1ZSA9PT0gY2hhbmdlcy5zZXRNYXhTZWxlY3RlZFZhbHVlcy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gaW5pdGFpbGl6ZSBlbnRpcmUgU2xpZGVyKi9cbiAgcHVibGljIGluaXRpYWxpemVTbGlkZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRha2luZyB3aWR0aCBvZiBzbGlkZXIgYmFyIGVsZW1lbnQuXG4gICAgICB0aGlzLnNsaWRlcldpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yZXNldE1vZGVsKCk7XG4gICAgICB0aGlzLnNsaWRlckluaXRpYXRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKk1ldGhvZCB0byBpbml0aWFsaXplIHZhcmlhYmxlcyBhbmQgbW9kZWwgdmFsdWVzICovXG4gIHByaXZhdGUgcmVzZXRNb2RlbCgpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2xpZGVyVmFsdWVzKCk7XG4gICAgLy8gU2V0dGluZyB0aGUgbW9kZWwgdmFsdWVzXG4gICAgdGhpcy5zbGlkZXJNb2RlbCA9IFtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1swXSAtIHRoaXMuaW5pdFZhbHVlc1swXSxcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1swXSxcbiAgICAgIHRoaXMuaW5pdFZhbHVlc1sxXSAtIHRoaXMuY3VycmVudFZhbHVlc1sxXVxuICAgIF07XG5cbiAgICB0aGlzLnRvdGFsRGlmZiA9IHRoaXMuc2xpZGVyTW9kZWwucmVkdWNlKChwcmV2VmFsdWUsIGN1clZhbHVlKSA9PiBwcmV2VmFsdWUgKyBjdXJWYWx1ZSwgMCk7XG5cbiAgICAvLyBWYWxpZGF0aW9uIGZvciBzbGlkZXIgc3RlcFxuICAgIGlmICh0aGlzLnRvdGFsRGlmZiAlIHRoaXMuc3RlcCAhPT0gMCkge1xuICAgICAgY29uc3QgbmV3U3RlcCA9IHRoaXMuZmluZE5leHRWYWxpZFN0ZXBWYWx1ZSh0aGlzLnRvdGFsRGlmZiwgdGhpcy5zdGVwKTtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBzdGVwIHZhbHVlIFwiJyArIHRoaXMuc3RlcCArICdcIiA6IGFuZCB0b29rIFwiJyArIG5ld1N0ZXAgKyAnXCIgYXMgZGVmYXVsdCBzdGVwJyk7XG4gICAgICB0aGlzLnN0ZXAgPSBuZXdTdGVwO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVTdGVwSW5kaWNhdG9yKCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGRvIHZhbGlkYXRpb24gb2YgaW5pdCBhbmQgc2VsZXRlZCByYW5nZSB2YWx1ZXMqL1xuICBwcml2YXRlIHZhbGlkYXRlU2xpZGVyVmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5taW5WYWx1ZSkgfHwgdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWF4VmFsdWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUluaXRWYWx1ZXMoWzAsIDBdKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKFswLCAwXSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pblZhbHVlID4gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVJbml0VmFsdWVzKFswLCAwXSk7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbMCwgMF0sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRWYWx1ZXMgPSBbdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZV07XG4gICAgICAvKlxuICAgICAgKiBWYWxpZGF0aW9uIGZvciBTZWxlY3RlZCByYW5nZSB2YWx1ZXNcbiAgICAgICovXG4gICAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWluU2VsZWN0ZWQpID8gMCA6IHRoaXMubWluU2VsZWN0ZWQ7XG4gICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5pc051bGxPckVtcHR5KHRoaXMubWF4U2VsZWN0ZWQpID8gMCA6IHRoaXMubWF4U2VsZWN0ZWQ7XG5cbiAgICAgIGlmICh0aGlzLm1pblNlbGVjdGVkIDwgdGhpcy5taW5WYWx1ZSB8fCB0aGlzLm1pblNlbGVjdGVkID4gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5taW5WYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1heFNlbGVjdGVkIDwgdGhpcy5taW5WYWx1ZSB8fCB0aGlzLm1heFNlbGVjdGVkID4gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgICB0aGlzLm1heFNlbGVjdGVkID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1pblNlbGVjdGVkID4gdGhpcy5tYXhTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLm1pblNlbGVjdGVkID0gdGhpcy5taW5WYWx1ZTtcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbdGhpcy5taW5TZWxlY3RlZCwgdGhpcy5tYXhTZWxlY3RlZF0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIGFkZCBzdGVwIGluaWRpY2F0b3IgdG8gc2xpZGVyICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0ZXBJbmRpY2F0b3IoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1N0ZXBJbmRpY2F0b3IpIHtcbiAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgY29uc3QgbnVtT2ZTdGVwSW5kaWNhdG9ycyA9IHRoaXMudG90YWxEaWZmIC8gdGhpcy5zdGVwO1xuICAgICAgaWYgKHRoaXMuc2xpZGVyV2lkdGggLyBudW1PZlN0ZXBJbmRpY2F0b3JzID49IDEwKSB7XG4gICAgICAgIGNvbnN0IGluY3JlbWVudCA9IHRoaXMuc2xpZGVyV2lkdGggLyBudW1PZlN0ZXBJbmRpY2F0b3JzO1xuICAgICAgICBsZXQgbGVmdFBvc2l0aW9uID0gaW5jcmVtZW50O1xuICAgICAgICB3aGlsZSAodGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zLmxlbmd0aCA8IG51bU9mU3RlcEluZGljYXRvcnMgLSAxKSB7XG4gICAgICAgICAgdGhpcy5zdGVwSW5kaWNhdG9yUG9zaXRpb25zLnB1c2goK2xlZnRQb3NpdGlvbi50b0ZpeGVkKDIpKTtcbiAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gaW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYEFzICdzdGVwJyB2YWx1ZSBpcyB0b28gc21hbGwgY29tcGFyZWQgdG8gbWluICYgbWF4IHZhbHVlIGRpZmZlcmVuY2UgYW5kIHNsaWRlciB3aWR0aCxcbiAgICAgICAgICBTdGVwIEluZGljYXRvciBjYW4ndCBiZSBkaXNwbGF5ZWQhLiBQcm92aWRlIHNsaWdodCBsYXJnZSB2YWx1ZSBmb3IgJ3N0ZXAnYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RlcEluZGljYXRvclBvc2l0aW9ucy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBjdXJyZW50IHNlbGVjdGVkIHZhbHVlcyAqL1xuICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRWYWx1ZShhcnJheVZhbHVlOiBudW1iZXJbXSwgcHJpdmF0ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5taW5TZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1swXSA9IGFycmF5VmFsdWVbMF07XG4gICAgdGhpcy5tYXhTZWxlY3RlZCA9IHRoaXMuY3VycmVudFZhbHVlc1sxXSA9IGFycmF5VmFsdWVbMV07XG4gICAgaWYgKCFwcml2YXRlQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoKHRoaXMubXVsdGlSYW5nZSkgPyB0aGlzLmN1cnJlbnRWYWx1ZXMgOiBbdGhpcy5jdXJyZW50VmFsdWVzWzBdXSk7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWVzICovXG4gIHByaXZhdGUgdXBkYXRlSW5pdFZhbHVlcyhhcnJheVZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMubWluVmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMF0gPSBhcnJheVZhbHVlWzBdO1xuICAgIHRoaXMubWF4VmFsdWUgPSB0aGlzLmluaXRWYWx1ZXNbMV0gPSBhcnJheVZhbHVlWzFdO1xuICB9XG5cbiAgLypNZXRob2QgdG8gc2V0IGhhbmRsZXIgcG9zaXRpb24gKi9cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyUG9zaXRpb24oKSB7XG4gICAgbGV0IHJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgLy8gVXBkYXRpbmcgc2VsZWN0ZWQgdmFsdWVzIDogY3VycmVudCB2YWx1ZXNcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZShbXG4gICAgICB0aGlzLmluaXRWYWx1ZXNbMF0gKyB0aGlzLnNsaWRlck1vZGVsWzBdLFxuICAgICAgdGhpcy5pbml0VmFsdWVzWzFdIC0gdGhpcy5zbGlkZXJNb2RlbFsyXVxuICAgIF0pO1xuICAgIC8qU2V0dGluZyBoYW5kbGVyIHBvc2l0aW9uICovXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc2xpZGVyTW9kZWwubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBydW5uaW5nVG90YWwgKz0gdGhpcy5zbGlkZXJNb2RlbFtpXTtcbiAgICAgIHRoaXMuaGFuZGxlclhbaV0gPSAocnVubmluZ1RvdGFsIC8gdGhpcy50b3RhbERpZmYpICogMTAwO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIHRvIHNldCBtb2RlbCBhcnJheSB2YWx1ZXMgLSB3aWxsIHRyeSB0byByZWZpbmUgdGhlIHZhbHVlcyB1c2luZyBzdGVwICovXG4gIHByaXZhdGUgc2V0TW9kZWxWYWx1ZShpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc3RlcCA+IDEpIHtcbiAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHRoaXMuc3RlcCkgKiB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyTW9kZWxbaW5kZXhdID0gdmFsdWU7XG4gIH1cblxuICAvKk1ldGhvZCB0byBkaXNhYmxlIGhhbmRsZXIgbW92ZW1lbnQqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNldXBcbiAgKiBvbi1wYW5lbmRcbiAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcpXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhbmVuZCcpXG4gIHNldEhhbmRsZXJBY3RpdmVPZmYoKSB7XG4gICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSGFuZGxlckFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgLypNZXRob2QgdG8gZGV0ZWN0IHN0YXJ0IGRyYWdpbmcgaGFuZGxlciovXG4gIC8qRXhlY3V0ZSBvbiBldmVudHM6XG4gICogb24tbW91c2Vkb3duXG4gICogb24tcGFuc3RhcnRcbiAgKi9cbiAgcHVibGljIHNldEhhbmRsZXJBY3RpdmUoZXZlbnQ6IGFueSwgaGFuZGxlckluZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG5cbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KGV2ZW50LmNsaWVudFgpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShldmVudC5kZWx0YVgpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGllbnRYID0gZXZlbnQuZGVsdGFYO1xuICAgICAgICB0aGlzLmlzVG91Y2hFdmVudFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc01vdXNlRXZlbnRTdGFydCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgfHwgdGhpcy5pc1RvdWNoRXZlbnRTdGFydCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRIYW5kbGVySW5kZXggPSBoYW5kbGVySW5kZXg7XG4gICAgICAgIHRoaXMuc3RhcnRQbGVmdCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4XTtcbiAgICAgICAgdGhpcy5zdGFydFBSaWdodCA9IHRoaXMuc2xpZGVyTW9kZWxbaGFuZGxlckluZGV4ICsgMV07XG4gICAgICAgIHRoaXMuaXNIYW5kbGVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qTWV0aG9kIHRvIGNhbGN1bGF0ZSBzaWxkZXIgaGFuZGxlciBtb3ZlbWVudCAqL1xuICAvKkV4ZWN1dGUgb24gZXZlbnRzOlxuICAqIG9uLW1vdXNlbW92ZVxuICAqIG9uLXBhbm1vdmVcbiAgKi9cbiAgcHVibGljIGhhbmRsZXJTbGlkaW5nKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoKHRoaXMuaXNNb3VzZUV2ZW50U3RhcnQgJiYgZXZlbnQuY2xpZW50WCkgfHwgKHRoaXMuaXNUb3VjaEV2ZW50U3RhcnQgJiYgZXZlbnQuZGVsdGFYKSkge1xuICAgICAgY29uc3QgbW92ZWRYID0gTWF0aC5yb3VuZCgoKGV2ZW50LmNsaWVudFggfHwgZXZlbnQuZGVsdGFYKSAtIHRoaXMuc3RhcnRDbGllbnRYKSAvIHRoaXMuc2xpZGVyV2lkdGggKiB0aGlzLnRvdGFsRGlmZik7XG4gICAgICBjb25zdCBuZXh0UExlZnQgPSB0aGlzLnN0YXJ0UGxlZnQgKyBtb3ZlZFg7XG4gICAgICBjb25zdCBuZXh0UFJpZ2h0ID0gdGhpcy5zdGFydFBSaWdodCAtIG1vdmVkWDtcbiAgICAgIGlmIChuZXh0UExlZnQgPj0gMCAmJiBuZXh0UFJpZ2h0ID49IDApIHtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCwgbmV4dFBMZWZ0KTtcbiAgICAgICAgdGhpcy5zZXRNb2RlbFZhbHVlKHRoaXMuY3VycmVudEhhbmRsZXJJbmRleCArIDEsIG5leHRQUmlnaHQpO1xuICAgICAgICB0aGlzLnNldEhhbmRsZXJQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5wblNsaWRlckNvbXBvbmVudCB9IGZyb20gJy4vbnBuLXNsaWRlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQnJvd3Nlck1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtOcG5TbGlkZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbTnBuU2xpZGVyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBOcG5TbGlkZXJNb2R1bGUgeyB9XG4iXSwibmFtZXMiOlsidHNsaWJfMS5fX2V4dGVuZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0EsSUFBQTs7Ozs7OztJQUVTLGlDQUFhOzs7O2NBQUMsR0FBYTtRQUNoQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFBLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDOzs7Ozs7SUFFbkcsaUNBQWE7Ozs7Y0FBQyxHQUFRO1FBQzNCLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Ozs7Ozs7SUFFbEQsNkJBQVM7Ozs7O2NBQUMsR0FBUTtRQUFFLHVCQUFnQjthQUFoQixVQUFnQixFQUFoQixxQkFBZ0IsRUFBaEIsSUFBZ0I7WUFBaEIsc0NBQWdCOztRQUN6QyxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQzs7Ozs7OztJQUVyRiwwQ0FBc0I7Ozs7O2NBQUMsQ0FBUyxFQUFFLElBQVk7UUFDbkQscUJBQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyxxQkFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLHFCQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLHFCQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQixLQUFLLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUs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
import { EventEmitter, ElementRef, OnInit, SimpleChanges, OnChanges } from '@angular/core';
import { Utilities } from './utilities';
import { SliderHandlerEnum } from './slider-handler.enum';
export declare class NpnSliderComponent extends Utilities implements OnInit, OnChanges {

@@ -26,2 +27,5 @@ private el;

isDisabled: boolean;
hideTooltip: boolean;
hideValues: boolean;
handlerIndex: typeof SliderHandlerEnum;
constructor(el: ElementRef);

@@ -34,2 +38,5 @@ setMinValues: number;

showStepIndicator: boolean;
multiRange: boolean;
setHideTooltip: boolean;
setHideValues: boolean;
setDisabled: string;

@@ -36,0 +43,0 @@ onChange: EventEmitter<number[]>;

export declare class Utilities {
isNumberArray(arr: number[]): boolean;
isNullOrEmpty(obj: any): boolean;
toBoolean(obj: any, ...allowedValues: any[]): boolean;
findNextValidStepValue(n: number, step: number): number;
}

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"NpnSliderComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"npn-slider","template":"<!--npn-slider template-->\n<div class=\"slider\" [class.disabled]=\"isDisabled\">\n <div class=\"bar\" (mousemove)=\"handlerSliding($event)\"\n (panmove)=\"handlerSliding($event)\">\n <span class=\"left-handle\"\n [ngClass]=\"{'active':isHandlerActive&&currentHandlerIndex==0,'last-active':currentHandlerIndex==0}\"\n [style.left.%]=\"handlerX[0]\"\n (mousedown)=\"setHandlerActive($event,0)\"\n (panstart)=\"setHandlerActive($event,0)\">\n <span class=\"handle-tooltip\">{{currentValues[0]}}</span>\n </span>\n <div class=\"filler\">\n <div class=\"step-indicators\">\n <span *ngFor=\"let stepPos of stepIndicatorPositions\" [style.left.px]=\"stepPos\"></span>\n </div>\n <span [style.left.%]=\"handlerX[0]\" [style.width.%]=\"handlerX[1] - handlerX[0]\"></span>\n </div>\n <span class=\"right-handle\"\n [ngClass]=\"{'active':isHandlerActive&&currentHandlerIndex==1, 'last-active':currentHandlerIndex==1}\"\n [style.left.%]=\"handlerX[1]\"\n (mousedown)=\"setHandlerActive($event,1)\"\n (panstart)=\"setHandlerActive($event,1)\">\n <span class=\"handle-tooltip\">{{currentValues[1]}}</span>\n </span>\n </div>\n <div class=\"values\">\n <span>{{initValues[0]}}</span>\n <span>{{initValues[1]}}</span>\n </div>\n</div>\n","styles":[".slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:\"\";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:\"\";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:104%;margin-left:-2%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":63,"character":26}]}],"setMinValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":3},"arguments":["min"]}]}],"setMaxValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3},"arguments":["max"]}]}],"setMinSelectedValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3},"arguments":["minSelected"]}]}],"setMaxSelectedValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3},"arguments":["maxSelected"]}]}],"stepValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3},"arguments":["step"]}]}],"showStepIndicator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":101,"character":3}}]}],"setDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3},"arguments":["disabled"]}]}],"onChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":108,"character":3}}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"initializeSlider":[{"__symbolic":"method"}],"resetModel":[{"__symbolic":"method"}],"validateSliderValues":[{"__symbolic":"method"}],"initializeStepIndicator":[{"__symbolic":"method"}],"updateCurrentValue":[{"__symbolic":"method"}],"updateInitValues":[{"__symbolic":"method"}],"setHandlerPosition":[{"__symbolic":"method"}],"setModelValue":[{"__symbolic":"method"}],"setHandlerActiveOff":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":247,"character":3},"arguments":["document:mouseup"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":248,"character":3},"arguments":["document:panend"]}]}],"setHandlerActive":[{"__symbolic":"method"}],"handlerSliding":[{"__symbolic":"method"}]}},"NpnSliderModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/platform-browser","name":"BrowserModule","line":6,"character":4}],"declarations":[{"__symbolic":"reference","name":"NpnSliderComponent"}],"exports":[{"__symbolic":"reference","name":"NpnSliderComponent"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","members":{"isNumberArray":[{"__symbolic":"method"}],"isNullOrEmpty":[{"__symbolic":"method"}],"findNextValidStepValue":[{"__symbolic":"method"}]}}},"origins":{"NpnSliderComponent":"./lib/npn-slider.component","NpnSliderModule":"./lib/npn-slider.module","ɵa":"./lib/utilities"},"importAs":"npn-slider"}
{"__symbolic":"module","version":4,"metadata":{"NpnSliderComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"npn-slider","template":"<!--npn-slider template-->\n<div class=\"slider\" [class.disabled]=\"isDisabled\">\n <div class=\"bar\" (mousemove)=\"handlerSliding($event)\" (panmove)=\"handlerSliding($event)\">\n <span class=\"left-handle\" [ngClass]=\"{'active': isHandlerActive && currentHandlerIndex === handlerIndex.left,\n 'last-active': currentHandlerIndex === handlerIndex.left\n }\"\n [style.left.%]=\"handlerX[handlerIndex.left]\" (mousedown)=\"setHandlerActive($event, handlerIndex.left)\" (panstart)=\"setHandlerActive($event, handlerIndex.left)\">\n <span *ngIf=\"!hideTooltip\" class=\"handle-tooltip\">{{currentValues[handlerIndex.left]}}</span>\n </span>\n <div class=\"filler\">\n <div class=\"step-indicators\">\n <span *ngFor=\"let stepPos of stepIndicatorPositions\" [style.left.px]=\"stepPos\"></span>\n </div>\n <span *ngIf=\"multiRange\" [style.left.%]=\"handlerX[0]\" [style.width.%]=\"handlerX[handlerIndex.right] - handlerX[handlerIndex.left]\"></span>\n <span *ngIf=\"!multiRange\" [style.left.%]=\"0\" [style.width.%]=\"handlerX[0]\"></span>\n </div>\n <span *ngIf=\"multiRange\" class=\"right-handle\" [ngClass]=\"{'active': isHandlerActive && currentHandlerIndex === handlerIndex.right,\n 'last-active': currentHandlerIndex === handlerIndex.right\n }\"\n [style.left.%]=\"handlerX[handlerIndex.right]\" (mousedown)=\"setHandlerActive($event, handlerIndex.right)\"\n (panstart)=\"setHandlerActive($event, handlerIndex.right)\">\n <span *ngIf=\"!hideTooltip\" class=\"handle-tooltip\">{{currentValues[handlerIndex.right]}}</span>\n </span>\n </div>\n <div class=\"values\" *ngIf=\"!hideValues\">\n <span>{{initValues[handlerIndex.left]}}</span>\n <span>{{initValues[handlerIndex.right]}}</span>\n </div>\n</div>\n","styles":[".slider,.slider *{box-sizing:border-box}.slider{display:block;width:100%;height:30px;padding:4px 10px;cursor:default;font-size:12px}.slider .bar{width:100%;background:#e8e8e8;height:10px;position:relative;border-radius:5px;box-shadow:inset 1px 1px 5px #bababa}.slider .bar>span.left-handle,.slider .bar>span.right-handle{display:inline-block;width:22px;height:22px;background:#bedcb2;border:7px solid #71b357;border-radius:50%;position:absolute;top:-7px;margin-left:-10px;z-index:1;cursor:pointer;transition:left .2s ease}.slider .bar>span.left-handle.last-active,.slider .bar>span.right-handle.last-active{z-index:2}.slider .bar>span.left-handle .handle-tooltip,.slider .bar>span.right-handle .handle-tooltip{display:block;position:absolute;top:-34px;left:-14px;border:1px solid #8fc37a;border-radius:4px;padding:1px 4px;min-width:20px;text-align:center;background:#d9ebd2;color:#71b357;font-weight:700;transition:opacity .2s ease;opacity:0}.slider .bar>span.left-handle .handle-tooltip:before,.slider .bar>span.right-handle .handle-tooltip:before{content:\"\";border:5px solid transparent;border-top-color:#8fc37a;position:absolute;top:104%;left:33%}.slider .bar>span.left-handle .handle-tooltip:after,.slider .bar>span.right-handle .handle-tooltip:after{content:\"\";border:5px solid transparent;border-top-color:#d9ebd2;position:absolute;top:100%;left:33%}.slider .bar>span.left-handle.active>.handle-tooltip,.slider .bar>span.left-handle:hover>.handle-tooltip,.slider .bar>span.right-handle.active>.handle-tooltip,.slider .bar>span.right-handle:hover>.handle-tooltip{opacity:1}.slider .bar div.filler{display:block;width:100%;height:100%;position:relative;overflow:hidden;border-radius:5px;border:1px solid #bedcb2}.slider .bar div.filler>span{display:inline-block;height:100%;position:absolute;top:0;background:#bedcb2;transition:all .2s ease}.slider .bar div.filler>div.step-indicators{width:100%;height:100%;position:relative}.slider .bar div.filler>div.step-indicators>span{width:1px;display:inline-block;height:10px;background:#71b357;position:absolute;left:0}.slider .values{display:block;font-weight:700;margin-top:4px;width:102%;margin-left:-1%;color:#908f90}.slider .values span:first-child{float:left}.slider .values span:last-child{float:right}.slider.disabled{opacity:.4}.slider.disabled .bar{box-shadow:none!important}.slider.disabled .bar>span.left-handle,.slider.disabled .bar>span.right-handle{cursor:not-allowed}.slider.disabled .bar>span.left-handle .handle-tooltip,.slider.disabled .bar>span.right-handle .handle-tooltip{display:none}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":69,"character":26}]}],"setMinValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3},"arguments":["min"]}]}],"setMaxValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3},"arguments":["max"]}]}],"setMinSelectedValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3},"arguments":["minSelected"]}]}],"setMaxSelectedValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3},"arguments":["maxSelected"]}]}],"stepValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":100,"character":3},"arguments":["step"]}]}],"showStepIndicator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":107,"character":3}}]}],"multiRange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"setHideTooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3},"arguments":["hide-tooltip"]}]}],"setHideValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":113,"character":3},"arguments":["hide-values"]}]}],"setDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":118,"character":3},"arguments":["disabled"]}]}],"onChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":123,"character":3}}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"initializeSlider":[{"__symbolic":"method"}],"resetModel":[{"__symbolic":"method"}],"validateSliderValues":[{"__symbolic":"method"}],"initializeStepIndicator":[{"__symbolic":"method"}],"updateCurrentValue":[{"__symbolic":"method"}],"updateInitValues":[{"__symbolic":"method"}],"setHandlerPosition":[{"__symbolic":"method"}],"setModelValue":[{"__symbolic":"method"}],"setHandlerActiveOff":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":271,"character":3},"arguments":["document:mouseup"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":272,"character":3},"arguments":["document:panend"]}]}],"setHandlerActive":[{"__symbolic":"method"}],"handlerSliding":[{"__symbolic":"method"}]}},"NpnSliderModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/platform-browser","name":"BrowserModule","line":6,"character":4}],"declarations":[{"__symbolic":"reference","name":"NpnSliderComponent"}],"exports":[{"__symbolic":"reference","name":"NpnSliderComponent"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","members":{"isNumberArray":[{"__symbolic":"method"}],"isNullOrEmpty":[{"__symbolic":"method"}],"toBoolean":[{"__symbolic":"method"}],"findNextValidStepValue":[{"__symbolic":"method"}]}}},"origins":{"NpnSliderComponent":"./lib/npn-slider.component","NpnSliderModule":"./lib/npn-slider.module","ɵa":"./lib/utilities"},"importAs":"npn-slider"}
{
"name": "npn-slider",
"description": "A multi range slider component using Angular v6.0",
"version": "1.1.3",
"version": "1.2.0",
"peerDependencies": {

@@ -6,0 +6,0 @@ "@angular/common": "^6.0.3",

# [NpnSlider](https://npnm.github.io/NpnSlider/) (A Multi Range Slider Angular Component)
NpnSlider is reusable multi range slider component using Angular v6.0
NpnSlider is a reusable range slider component using Angular v6.0. It can be used either as a multi range or a single range slider. By default, it is a multi range slider.
_[View on Github](https://github.com/npnm/NpnSlider)_
_[View Release Notes](https://github.com/npnm/NpnSlider/releases/tag/v1.2.0)_

@@ -21,4 +21,7 @@ ## Usage

@Input() <br> **maxSelected**: number | The selected value for slider's right handler
@Input() <br> **disabled**: string | To disable the slider. Valid values: _'true'_ or _'disabled'_
@Output() <br> **onChange**: EventEmitter<number[]>() | The event will be fired on change of selected range of values.<br>_Returns: Selected range of values as an array[]_
@Input() <br> **disabled**: string | To disable the slider. Valid values: _'true'_ or _'disabled'_ or _empty attribute_
@Input() <br> **multiRange**: boolean | To switch between Mutli range and Single range mode. Slider is multi range by default
@Input() <br> **hide-tooltip**: boolean | To hide the tooltip that shows on hover of slider handler. Default value: _'false'_
@Input() <br> **hide-values**: boolean | To hide values displayed at bottom of slider. Default value: _'false'_
@Output() <br> **onChange**: EventEmitter<number[]>() | The event will be fired on change of selected range of values.<br>_Returns: Selected range of values as an array[],_ <br>_On Single range mode, a number array with single value will be returned_

@@ -49,3 +52,2 @@ ### Example and Sample Code

```
d) **You done. Run your app. cheers!**
d) **You done. Run your app. cheers!** _[View Demo](https://npnm.github.io/NpnSlider/)_

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc