axidio-styleguide-library1-v2 0.0.889 → 0.0.890
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -140,7 +140,7 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
140
140
|
colors = metaData.colors;
|
|
141
141
|
keyList = metaData.keyList;
|
|
142
142
|
var chartContainer = d3.select(this.containerElt.nativeElement);
|
|
143
|
-
var verticalstackedcontainer = d3.select(this.
|
|
143
|
+
var verticalstackedcontainer = d3.select(this.groupcontainerElt.nativeElement);
|
|
144
144
|
let parsedNum = parseFloat(this.chartData?.targetLineData?.target);
|
|
145
145
|
if (!isNaN(parsedNum)) {
|
|
146
146
|
if (Number.isInteger(parsedNum)) {
|
|
@@ -1263,17 +1263,17 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
1263
1263
|
this.isZoomOutSelected(isZoomOut);
|
|
1264
1264
|
}
|
|
1265
1265
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GroupChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1266
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GroupChartComponent, selector: "lib-group-chart", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["verticalstackedchartcontainer"], descendants: true, static: true }, { propertyName: "verticalstackedcontainerElt", first: true, predicate: ["verticalstackedcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n [style.background-color]=\"chartConfiguration.backgroundColor\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n\r\n<div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n</div>\r\n\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n></lib-chart-header-v1>\r\n\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:35px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title:after{content:\"\";position:absolute;bottom:0;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-top-text{color:#000;font-size:14px;font-weight:600}.title-bar-name{color:#000;font-size:12px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:#4f4f4f;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV1Component, selector: "lib-chart-header-v1", inputs: ["isAlertEnabled", "title", "menuOptions", "isEditEnabled", "isria", "hasDrillDown", "selectedKpiTooltop"], outputs: ["menuOptionClickEvent"] }, { kind: "component", type: i4.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: i5.ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1266
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GroupChartComponent, selector: "lib-group-chart", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["groupchartcontainer"], descendants: true, static: true }, { propertyName: "groupcontainerElt", first: true, predicate: ["groupcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n [style.background-color]=\"chartConfiguration.backgroundColor\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n\r\n<div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n</div>\r\n\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n></lib-chart-header-v1>\r\n\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:35px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title:after{content:\"\";position:absolute;bottom:0;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-top-text{color:#000;font-size:14px;font-weight:600}.title-bar-name{color:#000;font-size:12px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:#4f4f4f;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV1Component, selector: "lib-chart-header-v1", inputs: ["isAlertEnabled", "title", "menuOptions", "isEditEnabled", "isria", "hasDrillDown", "selectedKpiTooltop"], outputs: ["menuOptionClickEvent"] }, { kind: "component", type: i4.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: i5.ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1267
1267
|
}
|
|
1268
1268
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GroupChartComponent, decorators: [{
|
|
1269
1269
|
type: Component,
|
|
1270
1270
|
args: [{ selector: 'lib-group-chart', encapsulation: ViewEncapsulation.None, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n [style.background-color]=\"chartConfiguration.backgroundColor\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n\r\n<div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n</div>\r\n\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n></lib-chart-header-v1>\r\n\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:35px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title:after{content:\"\";position:absolute;bottom:0;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-top-text{color:#000;font-size:14px;font-weight:600}.title-bar-name{color:#000;font-size:12px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:#4f4f4f;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1{background-color:#2e3640}.lib-chart-wrapper:hover .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
|
|
1271
1271
|
}], ctorParameters: () => [], propDecorators: { containerElt: [{
|
|
1272
1272
|
type: ViewChild,
|
|
1273
|
-
args: ['
|
|
1274
|
-
}],
|
|
1273
|
+
args: ['groupchartcontainer', { static: true }]
|
|
1274
|
+
}], groupcontainerElt: [{
|
|
1275
1275
|
type: ViewChild,
|
|
1276
|
-
args: ['
|
|
1276
|
+
args: ['groupcontainer', { static: true }]
|
|
1277
1277
|
}], chartData: [{
|
|
1278
1278
|
type: Input
|
|
1279
1279
|
}], customChartConfiguration: [{
|
|
@@ -1283,4 +1283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1283
1283
|
}], headerMenuclickEvent: [{
|
|
1284
1284
|
type: Output
|
|
1285
1285
|
}] } });
|
|
1286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBRSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUFRbEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQTZEeEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQXJEQSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pELHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyx3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFDcEMsYUFBUSxHQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMseUJBQW9CLEdBQVE7WUFDMUIsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFB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aUJBQWlCLGlCQUdaLGlCQUFpQixDQUFDLElBQUk7d0RBSXJDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVELDJCQUEyQjtzQkFEMUIsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzlDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiICBpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICBpbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbiAgaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbiAgaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG4gIGltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuICBpbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuICBAQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdyb3VwLWNoYXJ0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9ncm91cC1jaGFydC5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgfSlcclxuICBleHBvcnQgY2xhc3MgR3JvdXBDaGFydENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcbiAgXHJcbiAgICBAVmlld0NoaWxkKCd2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuICBcclxuICAgIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gICAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBjaGFydENvbmZpZ3VyYXRpb246IGFueSA9IHt9O1xyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGlzVG9wQ2FwdGlvblZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBkZWZhdWx0Q29uZmlndXJhdGlvbjogYW55ID0ge1xyXG4gICAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgICBsZWdlbmRIZWlnaHQ6ICcxMCUnLFxyXG4gICAgICBudW1iZXJPZllUaWNrczogNSxcclxuICAgICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICAgIHhBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgICBzaG93TGluZUNoYXJ0QXhpczogdHJ1ZSxcclxuICAgICAgc2hvd0xlZ2VuZDogZmFsc2UsXHJcbiAgICAgIGZvckNvbXBhcmlzb246IHRydWUsXHJcbiAgICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgICAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ6IHVuZGVmaW5lZCxcclxuICAgICAgaXNUb3BDYXB0aW9uVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgICBpc0Z1bGxTY3JlZW46IHVuZGVmaW5lZCxcclxuICAgICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgICBpc1lheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgICAgaXNZYXhpc0hpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzWGF4aXNDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICAgIHNob3dUb3RhbE9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICAgIGJhY2tlbmRGb3JtYXR0ZXJIYXNQcmlvcml0eTogdW5kZWZpbmVkLFxyXG4gICAgICBzaG93QW5nbGVkTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgaXNYZ3JpZEJldHdlZW5MYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgICAgc2hvd1hheGlzVG9wOiB1bmRlZmluZWQsXHJcbiAgICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgICBoaWRlWGF4aXNUaWNrOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgICAgaXNUYXJnZXRMaW5lOiB1bmRlZmluZWQsXHJcbiAgICAgIGRpc3BsYXlUaXRsZU9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG4gICAgaXNDQzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaXNab29tZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0KSB7XHJcbiAgICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplU3RhY2tlZENoYXJ0KCk7XHJcbiAgICB9XHJcbiAgICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgc2VsZi5pbml0aWFsaXplU3RhY2tlZENoYXJ0KCk7XHJcbiAgICAgICAgfS5iaW5kKHNlbGYpLFxyXG4gICAgICAgIDEwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpIHsgfVxyXG4gIFxyXG4gICAgaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gW107XHJcbiAgICAgIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICAgICAgbGV0IGtleUxpc3QgPSBudWxsO1xyXG4gICAgICBsZXQgbGluZURhdGEgPSBudWxsO1xyXG4gICAgICBsZXQgY29sb3JzOiBhbnkgPSBudWxsO1xyXG4gICAgICB2YXIgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgdmFyIGFsdGVybmF0ZV9sYWJlbCA9IGZhbHNlO1xyXG4gICAgICB2YXIgc2hvcnRfdGlja19sZW5ndGggPSA0O1xyXG4gICAgICB2YXIgbG9uZ190aWNrX2xlbmd0aCA9IDE2O1xyXG4gICAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgICB2YXIgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG4gICAgICB2YXIgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgICAgIHZhciBmb3JtYXRGb3JIdWdlTnVtYmVycztcclxuICAgICAgdmFyIHRlbXBPYmplY3RIb2xkZXIgPSB7fTtcclxuICAgICAgdmFyIHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgICAgdmFyIGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gIFxyXG4gICAgICAgICBsZXQgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVxyXG4gIFxyXG4gICAgICAvLyBSZXNwb25zaXZlIGJyZWFrcG9pbnRzXHJcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgICAgIGNvbnN0IGlzVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPj0gNTc2ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gICAgICBjb25zdCBpc0Rlc2t0b3AgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTI7XHJcbiAgXHJcbiAgICAgIC8vIEFkanVzdCBtYXJnaW5zIGFuZCBmb250IHNpemVzIGJhc2VkIG9uIGRldmljZVxyXG4gICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7IHRvcDogMjAsIHJpZ2h0OiAxMCwgYm90dG9tOiA0MCwgbGVmdDogMzAgfTtcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcyA9IDQ7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNjA7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNUYWJsZXQpIHtcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7IHRvcDogMjUsIHJpZ2h0OiAyMCwgYm90dG9tOiA0NSwgbGVmdDogNDAgfTtcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcyA9IDY7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNzA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogNTAsIGxlZnQ6IDYwIH07XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA3O1xyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCA9IDgwO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2ldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgICAgaSxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICAgIGlmIChtZXRhRGF0YS51bml0ID09IHVuZGVmaW5lZCkgbWV0YURhdGEudW5pdCA9ICcnO1xyXG4gICAgICBpZiAobWV0YURhdGEuaXNDQykge1xyXG4gICAgICAgIHRoaXMuaXNDQyA9IG1ldGFEYXRhLmlzQ0M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayAmJiBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoKSB7XHJcbiAgICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrID0gbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLm1hcCgoZWxlKSA9PlxyXG4gICAgICAgICAgZWxlLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGxpbmVEYXRhID0gdGhpcy5jaGFydERhdGEubGluZURhdGE7XHJcbiAgICAgIGNvbG9ycyA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgICAga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcbiAgXHJcbiAgICAgIHZhciBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgdmFyIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdChcclxuICAgICAgICB0aGlzLnZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICk7XHJcbiAgXHJcbiAgICAgIGxldCBwYXJzZWROdW0gPSBwYXJzZUZsb2F0KHRoaXMuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8udGFyZ2V0KTtcclxuICAgICAgaWYgKCFpc05hTihwYXJzZWROdW0pKSB7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocGFyc2VkTnVtKSkge1xyXG4gICAgICAgICAgcGFyc2VkTnVtID0gcGFyc2VJbnQodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyc2VkTnVtID0gcGFyc2VGbG9hdCh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG4gIFxyXG4gICAgICAvLyBSZXNwb25zaXZlIHdpZHRoIGFuZCBoZWlnaHRcclxuICAgICAgdmFyIGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICB2YXIgY29udGFpbmVySGVpZ2h0ID0gdmVydGljYWxzdGFja2VkY29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICAgIHZhciB3aWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG4gIFxyXG4gICAgICAvLyBBZGp1c3Qgd2lkdGggZm9yIGxhcmdlIGRhdGFzZXRzIGFuZCB6b29tXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICB3aWR0aCA9IHdpZHRoID4gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAoaXNNb2JpbGUgPyAxNSA6IDI1KVxyXG4gICAgICAgICAgPyB3aWR0aFxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIChpc01vYmlsZSA/IDE1IDogMjUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogKGlzTW9iaWxlID8gNjAgOiAxMzApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8vIEZ1bGxzY3JlZW4gYW5kIGRyaWxsZG93biBhZGp1c3RtZW50c1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT0gODBcclxuICAgICAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XHJcbiAgICAgICAgICA6IGNvbnRhaW5lckhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gKGlzTW9iaWxlID8gNjAgOiAxMzApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUuLi5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZm9yIGhpZGluZyBsZWdlbmRzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgLy9VUERBVEVOQU1FXHJcbiAgICAgICAgdGhpcy5pc1RvcENhcHRpb25WaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUb3BDYXB0aW9uVmlzaWJsZTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZm9yIHJlbW92aW5nIGJhY2tncm91bmQgY29sb3Igc28gdGhhdCBpdCBjYW4gdGFrZSBwYXJlbnRzIGNvbG9yXHJcbiAgICAgICAqXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9XHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZm9ybWF0IGRhdGEgdmFsdWVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVjZWl2ZWRcclxuICAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgICAgLnN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpXHJcbiAgXHJcbiAgICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpXHJcbiAgICAgICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxMHB4JylcclxuICAgICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YCk7XHJcbiAgXHJcbiAgICAgIHZhciBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgJzgwJylcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIChtYXJnaW4ubGVmdCArIDEwKSArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG4gIFxyXG4gICAgICB2YXIgc3ZnWUF4aXNSaWdodCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAgICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgICAuc3R5bGUoJ3JpZ2h0JywgJzJweCcpXHJcbiAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG4gIFxyXG4gICAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNvbnRhaW5lcicpXHJcbiAgICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gIFxyXG4gIFxyXG4gICAgICAvLyBDYWxjdWxhdGUgYmFyIHdpZHRoIGFuZCBwYWRkaW5nIGZvciBtb2JpbGUgdG8gYXZvaWQgb3ZlcmxhcCBhbmQgYWRkIHNwYWNlIGJldHdlZW4gYmFyc1xyXG4gICAgICBsZXQgYmFyV2lkdGg7XHJcbiAgICAgIGxldCBiYXJQYWRkaW5nID0gMTI7IC8vIHB4LCBzcGFjZSBiZXR3ZWVuIGJhcnMgb24gbW9iaWxlXHJcbiAgICAgIGxldCByZXF1aXJlZFN2Z1dpZHRoO1xyXG4gICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAvLyBVc2UgYSBtaW5pbXVtIHdpZHRoIHBlciBiYXIgYW5kIGFkZCBwYWRkaW5nIGJldHdlZW4gYmFyc1xyXG4gICAgICAgIGNvbnN0IG1pbkJhcldpZHRoID0gMzI7IC8vIHB4LCBjYW4gYWRqdXN0IGFzIG5lZWRlZFxyXG4gICAgICAgIGJhcldpZHRoID0gbWluQmFyV2lkdGg7XHJcbiAgICAgICAgcmVxdWlyZWRTdmdXaWR0aCA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgd2lkdGggLSByaWdodFN2Z1dpZHRoLFxyXG4gICAgICAgICAgKGJhcldpZHRoICsgYmFyUGFkZGluZykgKiBkYXRhLmxlbmd0aCArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgKyByaWdodFN2Z1dpZHRoIC0gYmFyUGFkZGluZyAvLyBubyBwYWRkaW5nIGFmdGVyIGxhc3QgYmFyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFyV2lkdGggPSBNYXRoLm1heCg0MCwgKHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gZGF0YS5sZW5ndGgpO1xyXG4gICAgICAgIGJhclBhZGRpbmcgPSAwO1xyXG4gICAgICAgIHJlcXVpcmVkU3ZnV2lkdGggPSB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGg7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdmFyIHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCByZXF1aXJlZFN2Z1dpZHRoKVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDMwKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcbiAgXHJcbiAgICAgIGxldCBzdGFja0tleSA9IGtleUxpc3Q7XHJcbiAgICAgIHZhciBzdGFjazogYW55ID0gZDNcclxuICAgICAgICAuc3RhY2soKVxyXG4gICAgICAgIC5rZXlzKHN0YWNrS2V5KVxyXG4gICAgICAgIC8qLm9yZGVyKGQzLnN0YWNrT3JkZXIpKi9cclxuICAgICAgICAub2Zmc2V0KGQzLnN0YWNrT2Zmc2V0Tm9uZSk7XHJcbiAgICAgIHZhciBsYXllcnM6IGFueSA9IHN0YWNrKGRhdGEpO1xyXG4gICAgICBkYXRhLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYi50b3RhbCAtIGEudG90YWw7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgbGluZVlzY2FsZTtcclxuICAgICAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAgIC5zY2FsZUxpbmVhcigpXHJcbiAgICAgICAgICAuZG9tYWluKFtcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgZDMubWF4KGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICAgLnJhbmdlKFtoZWlnaHQsIDBdKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvLyBDYWxjdWxhdGUgYmFyIHdpZHRoIGZvciBtb2JpbGUgdG8gYXZvaWQgb3ZlcmxhcFxyXG4gICAgICAvLyAuLi5iYXJXaWR0aCBpcyBub3cgY2FsY3VsYXRlZCBhYm92ZSwgcmVtb3ZlIGR1cGxpY2F0ZS4uLlxyXG4gIFxyXG4gICAgICB2YXIgeFNjYWxlID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAucmFuZ2VSb3VuZChbXHJcbiAgICAgICAgICBsZWZ0QW5kUmlnaHRTcGFjZXMsXHJcbiAgICAgICAgICB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGggLSBsZWZ0QW5kUmlnaHRTcGFjZXNcclxuICAgICAgICBdKVxyXG4gICAgICAgIC5kb21haW4oXHJcbiAgICAgICAgICBkYXRhLm1hcChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnBhZGRpbmcoaXNNb2JpbGUgPyAwLjIgOiAwLjUpO1xyXG4gIFxyXG4gICAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgICAgLnJhbmdlUm91bmQoW3dpZHRoIC0gcmlnaHRTdmdXaWR0aCwgMF0pXHJcbiAgICAgICAgLmRvbWFpbihcclxuICAgICAgICAgIGRhdGEubWFwKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLm5hbWU7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUuLi5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGRyYXcgc2Vjb25kIHggYXhpcyBvbiB0b3BcclxuICAgICAgICovXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93WGF4aXNUb3ApIHtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1saW5lLWF4aXMtdGV4dCBsaWItbGluZS14LWF4aXMtdGV4dCB4LWF4aXMnKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApKTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCcueC1heGlzID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICAgKi9cclxuICAgICAgLy8gaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc0F0VGFyZ2V0KSB7XHJcbiAgICAgIC8vICAgc3ZnXHJcbiAgICAgIC8vICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgICAgLy8gICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLy8gICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSk7XHJcbiAgICAgIC8vICAgc3ZnLnNlbGVjdEFsbCgnLngtYXhpcyA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgIC8vIH1cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkKSB7XHJcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZC5sZW5ndGg7IGorKykge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCBgeCR7aiArIDJ9IGF4aXMke2ogKyAyfWApXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpIC8vIFVzZSBDU1MgdmFyaWFibGUgaW5zdGVhZCBvZiBoYXJkY29kZWRcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWRbal0gKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApLnRpY2tzKDUpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAgICAgbGV0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB1cGRhdGUgbWF4IHZha3VlcyBzbyB0aGF0IHRoZSB2YWt1ZSB3b250IGV4Y2VlZCB0aGUgbWF4IGxpbWl0XHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgdmFyIG1heFZhbHVlID0gZDMubWF4KGxheWVycywgKGQpID0+IGQzLm1heChkLCAoZCkgPT4gZFsxXSkpO1xyXG4gICAgICBpZiAobWF4VmFsdWUgPT0gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0XHJcbiAgICAgICkge1xyXG4gICAgICAgIG1heFZhbHVlID1cclxuICAgICAgICAgIG1heFZhbHVlIDwgMTAgJiYgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0IDwgMTBcclxuICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAzXHJcbiAgICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgIH1cclxuICAgICAgeVNjYWxlLmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcbiAgXHJcbiAgICAgIGxldCB4QXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNCb3R0b20oeFNjYWxlKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgXHJcbiAgICAgIGxldCB5QXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICBcclxuICAgICAgbGV0IHlMaW5lQXhpcztcclxuICAgICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgICAuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBiZXR3ZWVuIHgtYXhpcyBsYWJlbCB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICogaXNYZ3JpZEJldHdlZW5MYWJlbHMgd2lsbCBiZSB1bmRlZmluZWQgZm9yIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDIgKyAnLCcgKyBoZWlnaHQgKyAnKSdcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5JylcclxuICAgICAgICAgIC8vIC5zdHlsZShcIm9wYWNpdHlcIiwgXCIwLjVcIilcclxuICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBkcmF3IHktYXhpcyBncmlkXHJcbiAgICAgICAqL1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgKVxyXG4gICAgICAvLyBSZW1vdmUgaGFyZGNvZGVkIGNvbG9ycyBhbmQgdXNlIENTUyB2YXJpYWJsZXNcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gICAgICB2YXIgbGF5ZXIgPSBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGF5ZXInKVxyXG4gICAgICAgIC5kYXRhKGxheWVycylcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsYXllcicpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICB2YXIgcmVjdCA9IGxheWVyXHJcbiAgICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmVudGVyKCk7XHJcbiAgXHJcbiAgICAgIHJlY3RcclxuICAgICAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghbGluZURhdGEgfHwgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZm9yQ29tcGFyaXNvbikge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGRbMF0pICYmICFpc05hTihkWzFdKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8geVNjYWxlKGRbMF0pIC0gMyA6IHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgIC8vIE9uIG1vYmlsZSwgcG9zaXRpb24gYmFycyB3aXRoIHBhZGRpbmdcclxuICAgICAgICAgICAgcmV0dXJuIGxlZnRBbmRSaWdodFNwYWNlcyArIGkgKiAoYmFyV2lkdGggKyBiYXJQYWRkaW5nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoIDw9IDNcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gMzU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyAzIDogYWN0dWFsSGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgLy8gVXNlIGNhbGN1bGF0ZWQgYmFyV2lkdGggZm9yIG1vYmlsZSwgb3RoZXJ3aXNlIHNjYWxlXHJcbiAgICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHhTY2FsZS5iYW5kd2lkdGgoKVxyXG4gICAgICAgICAgICA6IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiZcclxuICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzXHJcbiAgICAgICAgICAgICAgPyA3MFxyXG4gICAgICAgICAgICAgIDogeFNjYWxlLmJhbmR3aWR0aCgpICogMC44O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpO1xyXG4gICAgICAgIC5zdHlsZSgnY3Vyc29yJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdwb2ludGVyJztcclxuICAgICAgICAgIH0gZWxzZSByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PVxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldClcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvcjtcclxuICBcclxuICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAvKipcclxuICAgICAgICogZG8gbm90IHNob3cgdmFsdXMgb24gaG92ZXIgYXMgaXRzIGFscmVheSBkaXNsYXllZFxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKCF0aGlzLmlzQ0MgJiYgIXNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgICAgcmVjdFxyXG4gICAgICAgICAgLmFwcGVuZCgnc3ZnOnRpdGxlJykgLy8gVElUTEUgQVBQRU5ERUQgSEVSRVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRbMV0gLSBkWzBdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNDQykge1xyXG4gICAgICAgIHJlY3RcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ2VuZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdzdGFydCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAndmVydGljYWxiYXJfX3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB5U2NhbGUoZFsxXSkgLSA3O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkKSB7IHJldHVybiB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7IH0pXHJcbiAgICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKGRbMV0gLSBkWzBdKSAqIDEwMCkgLyAxMDA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChkWzFdICogMTAwKSAvIDEwMDtcclxuICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMjUpICsgJyknKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAgICAgICAuYXR0cignaGVpZ2h0JywgMzApXHJcbiAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAgIC5zdHlsZSgnY29sb3InLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcilcclxuICAgKi9cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIG9uIGhvdmVyLCBkaXNwbGF5IHRpdGxlIG9uIHRvcFxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgICBpZiAoIXNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhID09IGQ7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAgICAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj1cclxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldEhvdmVyQ29sb3JcclxuICAgICAgICAgICAgICAgID8gc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRIb3ZlckNvbG9yXHJcbiAgICAgICAgICAgICAgICA6IHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvclxyXG4gICAgICAgICAgICAgICAgICA/IHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvclxyXG4gICAgICAgICAgICAgICAgICA6ICcnO1xyXG4gIFxyXG4gICAgICAgICAgICByZXR1cm4gbWV0YURhdGEuaG92ZXJDb2xvciA/IG1ldGFEYXRhLmhvdmVyQ29sb3IgOiAnJztcclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgeFNjYWxlKGQuZGF0YS5uYW1lKSAtXHJcbiAgICAgICAgICAgICAgICBsZWZ0QW5kUmlnaHRTcGFjZXMgK1xyXG4gICAgICAgICAgICAgICAgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgLSAxODApIC8gMlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgLSBsZWZ0QW5kUmlnaHRTcGFjZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgZ2FwIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRvb2x0aXAgKHdhcyAtMSAtIDQwKVxyXG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pIC0gMSAtIDUwOyAvLyAxMHB4IG1vcmUgZ2FwXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4U2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxODBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAgIC5odG1sKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy8gVG9vbHRpcCBjb250ZW50IHdpdGhvdXQgYW55IGFycm93IG1hcmtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihkWzFdIC0gZFswXSkpIHtcclxuICAgICAgICAgICAgICBpZiAoZFsxXSAtIGRbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPjA8L3NwYW4+JztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdmFyIGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPyBtZXRhRGF0YS5kYXRhVHlwZSA6ICcnO1xyXG4gICAgICAgICAgICAgIHZhciBkZXNpcmVkVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgIC8vIEFsd2F5cyBzaG93IHRoZSBmdWxsIHgtYXhpcyBsYWJlbCAoY2F0ZWdvcnkgbmFtZSkgaW4gdGhlIHRvb2x0aXBcclxuICAgICAgICAgICAgICBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgKGQuZGF0YS5uYW1lID8gZC5kYXRhLm5hbWUgOiAnJykgK1xyXG4gICAgICAgICAgICAgICAgJzwvc3Bhbj4nO1xyXG4gIFxyXG4gICAgICAgICAgICAgIGRlc2lyZWRUZXh0ICs9IG1ldGFEYXRhLnVuaXRcclxuICAgICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgIG1ldGFEYXRhLnVuaXQgK1xyXG4gICAgICAgICAgICAgICAgKGRbMV0gLSBkWzBdKSArXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICAgICAnPC9zcGFuPidcclxuICAgICAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgIChkWzFdIC0gZFswXSkgK1xyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAgICAgJzwvc3Bhbj4nO1xyXG4gIFxyXG4gICAgICAgICAgICAgIC8vIE5vIGFycm93IG1hcmsgb3IgYXJyb3cgSFRNTC9DU1MgaW4gdG9vbHRpcFxyXG4gICAgICAgICAgICAgIHJldHVybiBkZXNpcmVkVGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHJldHVybjtcclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICB9XHJcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGQsIGkpIHtcclxuICAgICAgICBpZiAoIXNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKS5zdHlsZSgnZmlsbCcsIG1ldGFEYXRhLmNvbG9yc1tkLmtleV0pO1xyXG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKS5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAgICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj1cclxuICAgICAgICAgICAgcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YT8udGFyZ2V0TGluZURhdGE/LmJhckFib3ZlVGFyZ2V0Q29sb3I7XHJcbiAgXHJcbiAgICAgICAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBzaG93IHZhbHVlIG9uIHRvcCBvZiB0aGUgYmFyc1xyXG4gICAgICAgKiBuZWVkIHRvIGJlIHVzZWQgYnkgYmFyIGNoYXJ0cyBvbmx5KG9uZSBiYXIgc2hvdWxkIGNvbnRhaW4gb25lIHZhbHVlKVxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93VG90YWxPblRvcCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZWN0XHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay1sYWJlbHMtb250b3Atd2VrbHljaGFydHMnKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pIC0gMztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICAgIGlmIChkWzFdIC0gZFswXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChkWzFdIC0gZFswXSA8PSA5OTkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdFxyXG4gICAgICAgICAgICAgICAgICA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXRGcm9tQmFja2VuZChkWzFdIC0gZFswXSlcclxuICAgICAgICAgICAgICAgICAgOiBmb3JtYXRGcm9tQmFja2VuZChkWzFdIC0gZFswXSk7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXRcclxuICAgICAgICAgICAgICAgICAgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pXHJcbiAgICAgICAgICAgICAgICAgIDogZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIHVzZWQgdG8gc2hvdyBhbmdsZWQgdmFsdWVzIG9uIHRvcCBvZiB0aGUgYmFyc1xyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93QW5nbGVkTGFiZWxzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlY3RcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLWFuZ2xlZC13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCAwKVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihkWzFdIC0gZFswXSkgJiYgZFsxXSAtIGRbMF0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRbMV0gLSBkWzBdIDw9IDk5OSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0XHJcbiAgICAgICAgICAgICAgICAgID8gbWV0YURhdGEudW5pdCArIGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKVxyXG4gICAgICAgICAgICAgICAgICA6IGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKTtcclxuICAgICAgICAgICAgICBlbHNlIHJldHVybiBtZXRhRGF0YS51bml0ICsgZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSAmJiBkWzFdIC0gZFswXSA+IDApIHtcclxuICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICAgIHZhciBpbmNyZW1lbnRlcjogbnVtYmVyID0gMTtcclxuICAgICAgICAgICAgICBtZXRhRGF0YS5rZXlMaXN0LmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGQuZGF0YVtrZXldKSB0b3RhbCA9IHRvdGFsICsgZC5kYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBlbHNlIGluY3JlbWVudGVyID0gMjtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSA9IDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID1cclxuICAgICAgICAgICAgICAgICAgdGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gKyBpbmNyZW1lbnRlcjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgKHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAzKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgICAoeVNjYWxlKHRvdGFsKSAtIDMpICtcclxuICAgICAgICAgICAgICAgICAgICAnKSByb3RhdGUoMjcwKSdcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMiArIDIpICtcclxuICAgICAgICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh5U2NhbGUodG90YWwpIC0gMykgK1xyXG4gICAgICAgICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgKHhTY2FsZS5iYW5kd2lkdGgoKSAqIDMpIC8gNCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgICAgICAgKHlTY2FsZSh0b3RhbCkgLSAzKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAncm90YXRlKDApJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgIC8vIEN1c3RvbSB4LWF4aXMgbGFiZWwgcmVuZGVyaW5nIGZvciBtb2JpbGU6IGV2ZW5seSBkaXN0cmlidXRlIHVuZGVyIGVhY2ggYmFyXHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5jdXN0b20teC1sYWJlbCcpLnJlbW92ZSgpO1xyXG4gICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICBjb25zdCB4VmFsID0gbGVmdEFuZFJpZ2h0U3BhY2VzICsgaSAqIChiYXJXaWR0aCArIGJhclBhZGRpbmcpICsgYmFyV2lkdGggLyAyO1xyXG4gICAgICAgIHN2Zy5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2N1c3RvbS14LWxhYmVsJylcclxuICAgICAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgICAgIC5hdHRyKCd5JywgaGVpZ2h0ICsgMTgpXHJcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAoeFZhbCArIDIwKSArICcsMCknKSAvLyBjdXJyZW50IHZhbHVlICsgMjBcclxuICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEwcHgnKVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJykgLy8gd3JpdGluZyBtb2RlIGZvciBtb2JpbGVcclxuICAgICAgICAgIC50ZXh0KGQubmFtZS5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQnKVxyXG4gICAgICAgIC5jYWxsKHhBeGlzKVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLmF0dHIoJ2R4JywgJzAnKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICcwLjcxZW0nKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICBcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0JylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgfWVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQgbXVsdGljaGFydDEnKVxyXG4gICAgICAuY2FsbCh4QXhpcylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKVxyXG4gIFxyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgICAgXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJylcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgIC5jYWxsKHhBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gIFxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBmb3IgZXhpc3RpbmcgY2hhcnRzLCBwbGFjZSB4YXhpcyBsYWJlbHMgbmVhcmVyIHRvIHhheGlzXHJcbiAgICAgICAqIHVzZWQgYnkgZXhpc3RpbmcgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1zdGFja2VkLXgtYXhpcy10ZXh0IGcudGljayB0ZXh0JykuYXR0cihcclxuICAgICAgICAgICd5JyxcclxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBiYXNlZCBvZiB0aGUgZmxhZywgaGlkZSBvciBzaG93IHhheGlzIHRleHRzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW5cclxuICAgICAgKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCA+IGcgPiB0ZXh0JykuYXR0cihcclxuICAgICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICBcclxuICAgICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gyIGF4aXMyJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAgIC5zdHlsZSgnY29sb3InLCAnIzAwMCcpXHJcbiAgXHJcbiAgICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKVxyXG4gICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoJy5heGlzMiA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgICAgLy8gc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCcueDEuYXhpczEgLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmhpZGVYYXhpc1RpY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQgaXMgdXNlZCB0byBwcmV2ZW50IHgtYXhpcyBsYWJlbCB0byBiZSBkaXNwbGF5ZWQgaW4gYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICAgICAqIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCA9PSB1bmRlZmluZWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZyAtIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZyAtIDQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogcmVzZXQgdGhlIGZsYWcgc28gdGhhdCB0ZXh0cyBhbHNvIGZvbGxvdyB0aGUgcGF0dGVybiBvZiB0aWNrc1xyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgIC8vIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiA4KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duLWFsdCc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cyc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAuYXR0cigneScsIHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgbGFiZWwgaGFzIG1vcmUgdGhhbiBvbmUgd29yZCwgc2hvdyBvbmx5IGZpcnN0IDMgbGV0dGVycyBvZiBmaXJzdCB3b3JkXHJcbiAgICAgICAgICAgICAgdmFyIGZpcnN0V29yZCA9IGQuc3BsaXQoJyAnKVswXTtcclxuICAgICAgICAgICAgICByZXR1cm4gZmlyc3RXb3JkLnN1YnN0cmluZygwLCAzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uKHRoaXM6IFNWR1RleHRFbGVtZW50LCBkLCBpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAgICAgICAgIHZhciB0b3RhbEJhcnMgPSAwO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsQmFycyA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCdnLnRpY2snKS5zaXplKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0b3RhbEJhcnMgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKDAsMCknO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgKGkgKiAzMCkgKyAnLDApJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAvLyBGb3IgbW9iaWxlLCBkbyBub3QgcHJpbnQgdGhlIHNlY29uZCB3b3JkIGF0IGFsbFxyXG4gICAgICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSwgZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbihkLCBpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc01vYmlsZSAmJiBpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMjAsMCknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGhpZGUgeWF4aXMgdmFsdWVzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW5cclxuICAgICAgKSB7XHJcbiAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuXHJcbiAgICAgICkge1xyXG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBkYXNoZWQgeSBheGlzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICBpZiAoXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZFxyXG4gICkge1xyXG4gICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKTsgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIHggYXhpcyBjb2xvclxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvciAhPSB1bmRlZmluZWQpIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQnKS5zdHlsZShcclxuICAgICAgJ2NvbG9yJyxcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0NvbG9yIHx8ICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKSdcclxuICAgICk7XHJcbiAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBkaXNwbGF5IHkgbGFiZWxcclxuICAgICAgICovXHJcbiAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAgIC5hdHRyKCd4JywgJy01JylcclxuICAgICAgLmF0dHIoJ2R5JywgbnVsbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHN0eWxlQXhpc0RvbWFpbigpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5kb21haW4nKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgXHJcbiAgICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcuZG9tYWluJylcclxuICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgICAgXHJcbiAgICBzdmdZQXhpc1JpZ2h0LnNlbGVjdEFsbCgnLmRvbWFpbicpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IpJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgfVxyXG4gIFxyXG4gIHN0eWxlQXhpc0RvbWFpbigpO1xyXG4gIFxyXG4gICAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsLCAubGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHMsIC5saWIteWxhYmVsLXdlZWtseUNoYXJ0cycpLnJlbW92ZSgpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzQWNyb255bShsYWJlbCkge1xyXG4gICAgICAgICAgcmV0dXJuIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fCAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHlMYWJlbFRleHQgPSBtZXRhRGF0YS55TGFiZWw7XHJcbiAgICAgICAgY29uc3QgaXNBY3IgPSBpc0Fjcm9ueW0oeUxhYmVsVGV4dC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpKTtcclxuICBcclxuICAgICAgIGNvbnN0IHlQb3NpdGlvbiA9IGlzcmlhID8gMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDMwIDogMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDQwO1xyXG4gIFxyXG4gICAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KVxyXG4gICAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteWxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAgICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAudGV4dChpc0FjciA/IHlMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHlMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0FjciA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeVplcm8gPSB5U2NhbGUocGFyc2VkTnVtKTtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgICAgLy8gc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC8vICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgLy8gICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAgIC8vICAgLmF0dHIoJ3gyJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAvLyAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAgIC8vICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgICAgLy8gICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMzApICsgJyknKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgXHJcbiAgICAgICAgICAuaHRtbChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICBsZXQgZGF0YVR5cGVUZW1wID0gJyc7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXRMaW5lTmFtZSA9ICd0YXJnZXQnO1xyXG4gICAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICBkYXRhVHlwZVRlbXAgPSBtZXRhRGF0YS5kYXRhVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRhcmdldExpbmVOYW1lID0gc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIGA8ZGl2PiR7dGFyZ2V0TGluZU5hbWV9PC9kaXY+YCArXHJcbiAgICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgICAnJyArXHJcbiAgICAgICAgICAgICAgZGF0YVR5cGVUZW1wICtcclxuICAgICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVjdFxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VlbnRlcicsIGhhbmRsZU1vdXNlT3ZlcilcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpO1xyXG4gICAgICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArICh3aWR0aCAtIDIwKSArICcsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgICAgICAuYXR0cigneScsIDAgLSBtYXJnaW4ucmlnaHQgKiAzKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBoZWlnaHQgLyAyKVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzQWNyb255bShsYWJlbCkge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeExhYmVsVGV4dCA9IG1ldGFEYXRhLnhMYWJlbDtcclxuICAgICAgICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh4TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG4gIFxyXG4gICAgICAgICAgY29uc3QgeFBvc2l0aW9uID0gaXNyaWEgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApO1xyXG4gIFxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydClcclxuICAgICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWwnO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHdpZHRoIC8gMiArICcgLCcgKyB4UG9zaXRpb24gKyAnKSdcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAudGV4dChpc0FjciA/IHhMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHhMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0FjciA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChsaW5lRGF0YSAmJiBjb2xvcnMpIHtcclxuICAgICAgICB2YXIgZGF0YUdyb3VwID0gZDNcclxuICAgICAgICAgIC5uZXN0KClcclxuICAgICAgICAgIC5rZXkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQuY2F0ZWdvcnk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmVudHJpZXMobGluZURhdGEpO1xyXG4gIFxyXG4gICAgICAgIHZhciBsaW5lR2VuID0gZDNcclxuICAgICAgICAgIC5saW5lKClcclxuICAgICAgICAgIC54KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICBcclxuICAgICAgICB2YXIgY2FsY3VsYXRlQ1ggPSAoZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9O1xyXG4gIFxyXG4gICAgICAgIHZhciBjYWxjdWxhdGVDWSA9IChkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gIFxyXG4gICAgICAgIGRhdGFHcm91cC5mb3JFYWNoKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAgIC5kYXR1bShkLnZhbHVlcylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGlmICgnY2F0ZWdvcnknIGluIGRbMF0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbZFswXS5jYXRlZ29yeV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAyLjUpIC8qKmxpbmUgdGhpbmtuZXNzICovXHJcbiAgICAgICAgICAgIC5hdHRyKCdkJywgbGluZUdlbihkLnZhbHVlcykpO1xyXG4gIFxyXG4gICAgICAgICAgdmFyIGRvdCA9IHN2Z1xyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAgICAgICAuZGF0YShkLnZhbHVlcylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgICAgZG90XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBpZiAoJ2NhdGVnb3J5JyBpbiBkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JzW2QuY2F0ZWdvcnldO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdyJywgMykgLyoqcmFkaXVzIG9mIGNpcmNsZT01ICovXHJcbiAgICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuICBcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgICAgICBkb3RcclxuICAgICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90cycpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAnICsgJy44NWVtOycgKyAnZm9udC13ZWlnaHQ6JyArICdib2xkJylcclxuICAgICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geFNjYWxlKGQubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdmcuYXR0cignd2lkdGgnLCAxNTApLnN0eWxlKCdtYXgtd2lkdGgnLCAxNTApLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuICAgIH1cclxuICAgIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgICBpZiAodGhpcy5jaGFydERhdGE/Lm1ldGFEYXRhPy5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICAgIH1cclxuICAgIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICAgIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSkge1xyXG4gICAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCk7XHJcbiAgICB9IFxyXG4gIH0iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjaGFydENvbmZpZ3VyYXRpb24uYmFja2dyb3VuZENvbG9yXCJcclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiXHJcbj5cclxuXHJcbjxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjJcclxuICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuPC9kaXY+XHJcblxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYxXHJcbiAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiXHJcbiAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgW3NlbGVjdGVkS3BpVG9vbHRvcF09XCJjaGFydENvbmZpZ3VyYXRpb24uc2VsZWN0ZWRLcGlUb29sdG9wXCJcclxuICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgKm5nSWY9XCJpc0hlYWRlclZpc2libGVcIlxyXG4+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
1286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBRSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUFRbEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQTREeEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQXJEQSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pELHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyx3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFDcEMsYUFBUSxHQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMseUJBQW9CLEdBQVE7WUFDMUIsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFB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aUJBQWlCLGlCQUdaLGlCQUFpQixDQUFDLElBQUk7d0RBSXJDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR2xELGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3BDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiICBpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICBpbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbiAgaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbiAgaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG4gIGltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuICBpbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuICBAQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdyb3VwLWNoYXJ0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9ncm91cC1jaGFydC5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgfSlcclxuICBleHBvcnQgY2xhc3MgR3JvdXBDaGFydENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2dyb3VwY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2dyb3VwY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBASW5wdXQoKSBjaGFydERhdGE6IGFueTtcclxuICAgIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gICAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBoZWFkZXJNZW51Y2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICAgIGlzSGVhZGVyVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpc1RvcENhcHRpb25WaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHVuaXF1ZUlkOiBhbnkgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGVmYXVsdENvbmZpZ3VyYXRpb246IGFueSA9IHtcclxuICAgICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgICAgc3ZnSGVpZ2h0OiA3MCxcclxuICAgICAgbGVnZW5kSGVpZ2h0OiAnMTAlJyxcclxuICAgICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICAgIGxhYmVsRm9ybWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgICB4QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgICAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICAgIHNob3dMZWdlbmQ6IGZhbHNlLFxyXG4gICAgICBmb3JDb21wYXJpc29uOiB0cnVlLFxyXG4gICAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgICAgeUF4aXNHcmlkOiBmYWxzZSxcclxuICAgICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzVG9wQ2FwdGlvblZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICAgIGN1c3RvbVlzY2FsZTogdW5kZWZpbmVkLFxyXG4gICAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgICAgaXNZYXhpc0xhYmVsSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgICAgaXNZYXhpc0Rhc2hlZDogdW5kZWZpbmVkLFxyXG4gICAgICBpc1hheGlzQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgICAgdGV4dEZvcm1hdHRlcjogdW5kZWZpbmVkLFxyXG4gICAgICBzaG93VG90YWxPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgICBiYWNrZW5kRm9ybWF0dGVySGFzUHJpb3JpdHk6IHVuZGVmaW5lZCxcclxuICAgICAgc2hvd0FuZ2xlZExhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICAgIHNob3dYYXhpc1RvcDogdW5kZWZpbmVkLFxyXG4gICAgICB4QXhpc0dyaWQ6IHVuZGVmaW5lZCxcclxuICAgICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgaGlkZVhheGlzVGljazogdW5kZWZpbmVkLFxyXG4gICAgICBpc0RyaWxsZG93bkNoYXJ0OiB1bmRlZmluZWQsXHJcbiAgICAgIGlzVGFyZ2V0TGluZTogdW5kZWZpbmVkLFxyXG4gICAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgICBpc1RvZ2dsZVZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICAgIGlzQ0M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzWm9vbWVkT3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIGlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCkge1xyXG4gICAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgfVxyXG4gICAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgICAgIH0uYmluZChzZWxmKSxcclxuICAgICAgICAxMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKSB7IH1cclxuICBcclxuICAgIGluaXRpYWxpemVTdGFja2VkQ2hhcnQoKSB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWV0YURhdGE6IGFueSA9IG51bGw7XHJcbiAgICAgIGxldCBrZXlMaXN0ID0gbnVsbDtcclxuICAgICAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICAgICAgbGV0IGNvbG9yczogYW55ID0gbnVsbDtcclxuICAgICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgIHZhciBhbHRlcm5hdGVfbGFiZWwgPSBmYWxzZTtcclxuICAgICAgdmFyIHNob3J0X3RpY2tfbGVuZ3RoID0gNDtcclxuICAgICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgICAgdmFyIHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgICAgdmFyIGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuICAgICAgdmFyIGZvcm1hdEZyb21CYWNrZW5kO1xyXG4gICAgICB2YXIgZm9ybWF0Rm9ySHVnZU51bWJlcnM7XHJcbiAgICAgIHZhciB0ZW1wT2JqZWN0SG9sZGVyID0ge307XHJcbiAgICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAgIHZhciBsZWZ0QW5kUmlnaHRTcGFjZXMgPSA1MDtcclxuICBcclxuICAgICAgICAgbGV0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcclxuICBcclxuICAgICAgLy8gUmVzcG9uc2l2ZSBicmVha3BvaW50c1xyXG4gICAgICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNTc2O1xyXG4gICAgICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICAgICAgY29uc3QgaXNEZXNrdG9wID0gd2luZG93LmlubmVyV2lkdGggPj0gOTkyO1xyXG4gIFxyXG4gICAgICAvLyBBZGp1c3QgbWFyZ2lucyBhbmQgZm9udCBzaXplcyBiYXNlZCBvbiBkZXZpY2VcclxuICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDIwLCByaWdodDogMTAsIGJvdHRvbTogNDAsIGxlZnQ6IDMwIH07XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA0O1xyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCA9IDYwO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzVGFibGV0KSB7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDI1LCByaWdodDogMjAsIGJvdHRvbTogNDUsIGxlZnQ6IDQwIH07XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA2O1xyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCA9IDcwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiA9IHsgdG9wOiAzMCwgcmlnaHQ6IDMwLCBib3R0b206IDUwLCBsZWZ0OiA2MCB9O1xyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzID0gNztcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgPSA4MDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBmb3IgKHZhciBpIGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICAgIGksXHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgICBtZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgICBpZiAobWV0YURhdGEudW5pdCA9PSB1bmRlZmluZWQpIG1ldGFEYXRhLnVuaXQgPSAnJztcclxuICAgICAgaWYgKG1ldGFEYXRhLmlzQ0MpIHtcclxuICAgICAgICB0aGlzLmlzQ0MgPSBtZXRhRGF0YS5pc0NDO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgJiYgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCkge1xyXG4gICAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5tYXAoKGVsZSkgPT5cclxuICAgICAgICAgIGVsZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG4gICAgICBjb2xvcnMgPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICAgIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG4gIFxyXG4gICAgICB2YXIgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgIHZhciB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QoXHJcbiAgICAgICAgdGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICk7XHJcbiAgXHJcbiAgICAgIGxldCBwYXJzZWROdW0gPSBwYXJzZUZsb2F0KHRoaXMuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8udGFyZ2V0KTtcclxuICAgICAgaWYgKCFpc05hTihwYXJzZWROdW0pKSB7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocGFyc2VkTnVtKSkge1xyXG4gICAgICAgICAgcGFyc2VkTnVtID0gcGFyc2VJbnQodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyc2VkTnVtID0gcGFyc2VGbG9hdCh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG4gIFxyXG4gICAgICAvLyBSZXNwb25zaXZlIHdpZHRoIGFuZCBoZWlnaHRcclxuICAgICAgdmFyIGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICB2YXIgY29udGFpbmVySGVpZ2h0ID0gdmVydGljYWxzdGFja2VkY29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICAgIHZhciB3aWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG4gIFxyXG4gICAgICAvLyBBZGp1c3Qgd2lkdGggZm9yIGxhcmdlIGRhdGFzZXRzIGFuZCB6b29tXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICB3aWR0aCA9IHdpZHRoID4gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAoaXNNb2JpbGUgPyAxNSA6IDI1KVxyXG4gICAgICAgICAgPyB3aWR0aFxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIChpc01vYmlsZSA/IDE1IDogMjUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogKGlzTW9iaWxlID8gNjAgOiAxMzApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8vIEZ1bGxzY3JlZW4gYW5kIGRyaWxsZG93biBhZGp1c3RtZW50c1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT0gODBcclxuICAgICAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XHJcbiAgICAgICAgICA6IGNvbnRhaW5lckhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gKGlzTW9iaWxlID8gNjAgOiAxMzApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUuLi5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZm9yIGhpZGluZyBsZWdlbmRzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgLy9VUERBVEVOQU1FXHJcbiAgICAgICAgdGhpcy5pc1RvcENhcHRpb25WaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUb3BDYXB0aW9uVmlzaWJsZTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZm9yIHJlbW92aW5nIGJhY2tncm91bmQgY29sb3Igc28gdGhhdCBpdCBjYW4gdGFrZSBwYXJlbnRzIGNvbG9yXHJcbiAgICAgICAqXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9XHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZm9ybWF0IGRhdGEgdmFsdWVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVjZWl2ZWRcclxuICAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgICAgLnN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpXHJcbiAgXHJcbiAgICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpXHJcbiAgICAgICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxMHB4JylcclxuICAgICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YCk7XHJcbiAgXHJcbiAgICAgIHZhciBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgJzgwJylcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIChtYXJnaW4ubGVmdCArIDEwKSArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG4gIFxyXG4gICAgICB2YXIgc3ZnWUF4aXNSaWdodCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAgICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgICAuc3R5bGUoJ3JpZ2h0JywgJzJweCcpXHJcbiAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG4gIFxyXG4gICAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNvbnRhaW5lcicpXHJcbiAgICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gIFxyXG4gIFxyXG4gICAgICAvLyBDYWxjdWxhdGUgYmFyIHdpZHRoIGFuZCBwYWRkaW5nIGZvciBtb2JpbGUgdG8gYXZvaWQgb3ZlcmxhcCBhbmQgYWRkIHNwYWNlIGJldHdlZW4gYmFyc1xyXG4gICAgICBsZXQgYmFyV2lkdGg7XHJcbiAgICAgIGxldCBiYXJQYWRkaW5nID0gMTI7IC8vIHB4LCBzcGFjZSBiZXR3ZWVuIGJhcnMgb24gbW9iaWxlXHJcbiAgICAgIGxldCByZXF1aXJlZFN2Z1dpZHRoO1xyXG4gICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAvLyBVc2UgYSBtaW5pbXVtIHdpZHRoIHBlciBiYXIgYW5kIGFkZCBwYWRkaW5nIGJldHdlZW4gYmFyc1xyXG4gICAgICAgIGNvbnN0IG1pbkJhcldpZHRoID0gMzI7IC8vIHB4LCBjYW4gYWRqdXN0IGFzIG5lZWRlZFxyXG4gICAgICAgIGJhcldpZHRoID0gbWluQmFyV2lkdGg7XHJcbiAgICAgICAgcmVxdWlyZWRTdmdXaWR0aCA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgd2lkdGggLSByaWdodFN2Z1dpZHRoLFxyXG4gICAgICAgICAgKGJhcldpZHRoICsgYmFyUGFkZGluZykgKiBkYXRhLmxlbmd0aCArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgKyByaWdodFN2Z1dpZHRoIC0gYmFyUGFkZGluZyAvLyBubyBwYWRkaW5nIGFmdGVyIGxhc3QgYmFyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFyV2lkdGggPSBNYXRoLm1heCg0MCwgKHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gZGF0YS5sZW5ndGgpO1xyXG4gICAgICAgIGJhclBhZGRpbmcgPSAwO1xyXG4gICAgICAgIHJlcXVpcmVkU3ZnV2lkdGggPSB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGg7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdmFyIHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCByZXF1aXJlZFN2Z1dpZHRoKVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDMwKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcbiAgXHJcbiAgICAgIGxldCBzdGFja0tleSA9IGtleUxpc3Q7XHJcbiAgICAgIHZhciBzdGFjazogYW55ID0gZDNcclxuICAgICAgICAuc3RhY2soKVxyXG4gICAgICAgIC5rZXlzKHN0YWNrS2V5KVxyXG4gICAgICAgIC8qLm9yZGVyKGQzLnN0YWNrT3JkZXIpKi9cclxuICAgICAgICAub2Zmc2V0KGQzLnN0YWNrT2Zmc2V0Tm9uZSk7XHJcbiAgICAgIHZhciBsYXllcnM6IGFueSA9IHN0YWNrKGRhdGEpO1xyXG4gICAgICBkYXRhLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYi50b3RhbCAtIGEudG90YWw7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgbGluZVlzY2FsZTtcclxuICAgICAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAgIC5zY2FsZUxpbmVhcigpXHJcbiAgICAgICAgICAuZG9tYWluKFtcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgZDMubWF4KGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICAgLnJhbmdlKFtoZWlnaHQsIDBdKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvLyBDYWxjdWxhdGUgYmFyIHdpZHRoIGZvciBtb2JpbGUgdG8gYXZvaWQgb3ZlcmxhcFxyXG4gICAgICAvLyAuLi5iYXJXaWR0aCBpcyBub3cgY2FsY3VsYXRlZCBhYm92ZSwgcmVtb3ZlIGR1cGxpY2F0ZS4uLlxyXG4gIFxyXG4gICAgICB2YXIgeFNjYWxlID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAucmFuZ2VSb3VuZChbXHJcbiAgICAgICAgICBsZWZ0QW5kUmlnaHRTcGFjZXMsXHJcbiAgICAgICAgICB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGggLSBsZWZ0QW5kUmlnaHRTcGFjZXNcclxuICAgICAgICBdKVxyXG4gICAgICAgIC5kb21haW4oXHJcbiAgICAgICAgICBkYXRhLm1hcChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnBhZGRpbmcoaXNNb2JpbGUgPyAwLjIgOiAwLjUpO1xyXG4gIFxyXG4gICAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgICAgLnJhbmdlUm91bmQoW3dpZHRoIC0gcmlnaHRTdmdXaWR0aCwgMF0pXHJcbiAgICAgICAgLmRvbWFpbihcclxuICAgICAgICAgIGRhdGEubWFwKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLm5hbWU7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUuLi5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGRyYXcgc2Vjb25kIHggYXhpcyBvbiB0b3BcclxuICAgICAgICovXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93WGF4aXNUb3ApIHtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1saW5lLWF4aXMtdGV4dCBsaWItbGluZS14LWF4aXMtdGV4dCB4LWF4aXMnKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApKTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCcueC1heGlzID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICAgKi9cclxuICAgICAgLy8gaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc0F0VGFyZ2V0KSB7XHJcbiAgICAgIC8vICAgc3ZnXHJcbiAgICAgIC8vICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgICAgLy8gICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLy8gICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSk7XHJcbiAgICAgIC8vICAgc3ZnLnNlbGVjdEFsbCgnLngtYXhpcyA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgIC8vIH1cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkKSB7XHJcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZC5sZW5ndGg7IGorKykge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCBgeCR7aiArIDJ9IGF4aXMke2ogKyAyfWApXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpIC8vIFVzZSBDU1MgdmFyaWFibGUgaW5zdGVhZCBvZiBoYXJkY29kZWRcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWRbal0gKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApLnRpY2tzKDUpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAgICAgbGV0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB1cGRhdGUgbWF4IHZha3VlcyBzbyB0aGF0IHRoZSB2YWt1ZSB3b250IGV4Y2VlZCB0aGUgbWF4IGxpbWl0XHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgdmFyIG1heFZhbHVlID0gZDMubWF4KGxheWVycywgKGQpID0+IGQzLm1heChkLCAoZCkgPT4gZFsxXSkpO1xyXG4gICAgICBpZiAobWF4VmFsdWUgPT0gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0XHJcbiAgICAgICkge1xyXG4gICAgICAgIG1heFZhbHVlID1cclxuICAgICAgICAgIG1heFZhbHVlIDwgMTAgJiYgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0IDwgMTBcclxuICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAzXHJcbiAgICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgIH1cclxuICAgICAgeVNjYWxlLmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcbiAgXHJcbiAgICAgIGxldCB4QXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNCb3R0b20oeFNjYWxlKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgXHJcbiAgICAgIGxldCB5QXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICBcclxuICAgICAgbGV0IHlMaW5lQXhpcztcclxuICAgICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgICAuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBiZXR3ZWVuIHgtYXhpcyBsYWJlbCB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICogaXNYZ3JpZEJldHdlZW5MYWJlbHMgd2lsbCBiZSB1bmRlZmluZWQgZm9yIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDIgKyAnLCcgKyBoZWlnaHQgKyAnKSdcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5JylcclxuICAgICAgICAgIC8vIC5zdHlsZShcIm9wYWNpdHlcIiwgXCIwLjVcIilcclxuICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBkcmF3IHktYXhpcyBncmlkXHJcbiAgICAgICAqL1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgKVxyXG4gICAgICAvLyBSZW1vdmUgaGFyZGNvZGVkIGNvbG9ycyBhbmQgdXNlIENTUyB2YXJpYWJsZXNcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gICAgICB2YXIgbGF5ZXIgPSBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGF5ZXInKVxyXG4gICAgICAgIC5kYXRhKGxheWVycylcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsYXllcicpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICB2YXIgcmVjdCA9IGxheWVyXHJcbiAgICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmVudGVyKCk7XHJcbiAgXHJcbiAgICAgIHJlY3RcclxuICAgICAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghbGluZURhdGEgfHwgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZm9yQ29tcGFyaXNvbikge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGRbMF0pICYmICFpc05hTihkWzFdKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8geVNjYWxlKGRbMF0pIC0gMyA6IHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgIC8vIE9uIG1vYmlsZSwgcG9zaXRpb24gYmFycyB3aXRoIHBhZGRpbmdcclxuICAgICAgICAgICAgcmV0dXJuIGxlZnRBbmRSaWdodFNwYWNlcyArIGkgKiAoYmFyV2lkdGggKyBiYXJQYWRkaW5nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoIDw9IDNcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gMzU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyAzIDogYWN0dWFsSGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgLy8gVXNlIGNhbGN1bGF0ZWQgYmFyV2lkdGggZm9yIG1vYmlsZSwgb3RoZXJ3aXNlIHNjYWxlXHJcbiAgICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHhTY2FsZS5iYW5kd2lkdGgoKVxyXG4gICAgICAgICAgICA6IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiZcclxuICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzXHJcbiAgICAgICAgICAgICAgPyA3MFxyXG4gICAgICAgICAgICAgIDogeFNjYWxlLmJhbmR3aWR0aCgpICogMC44O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpO1xyXG4gICAgICAgIC5zdHlsZSgnY3Vyc29yJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdwb2ludGVyJztcclxuICAgICAgICAgIH0gZWxzZSByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PVxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldClcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvcjtcclxuICBcclxuICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAvKipcclxuICAgICAgICogZG8gbm90IHNob3cgdmFsdXMgb24gaG92ZXIgYXMgaXRzIGFscmVheSBkaXNsYXllZFxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKCF0aGlzLmlzQ0MgJiYgIXNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgICAgcmVjdFxyXG4gICAgICAgICAgLmFwcGVuZCgnc3ZnOnRpdGxlJykgLy8gVElUTEUgQVBQRU5ERUQgSEVSRVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRbMV0gLSBkWzBdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNDQykge1xyXG4gICAgICAgIHJlY3RcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ2VuZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdzdGFydCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAndmVydGljYWxiYXJfX3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB5U2NhbGUoZFsxXSkgLSA3O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkKSB7IHJldHVybiB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7IH0pXHJcbiAgICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKGRbMV0gLSBkWzBdKSAqIDEwMCkgLyAxMDA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChkWzFdICogMTAwKSAvIDEwMDtcclxuICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMjUpICsgJyknKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAgICAgICAuYXR0cignaGVpZ2h0JywgMzApXHJcbiAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAgIC5zdHlsZSgnY29sb3InLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcilcclxuICAgKi9cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIG9uIGhvdmVyLCBkaXNwbGF5IHRpdGxlIG9uIHRvcFxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgICBpZiAoIXNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhID09IGQ7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAgICAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj1cclxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldEhvdmVyQ29sb3JcclxuICAgICAgICAgICAgICAgID8gc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRIb3ZlckNvbG9yXHJcbiAgICAgICAgICAgICAgICA6IHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvclxyXG4gICAgICAgICAgICAgICAgICA/IHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvclxyXG4gICAgICAgICAgICAgICAgICA6ICcnO1xyXG4gIFxyXG4gICAgICAgICAgICByZXR1cm4gbWV0YURhdGEuaG92ZXJDb2xvciA/IG1ldGFEYXRhLmhvdmVyQ29sb3IgOiAnJztcclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgeFNjYWxlKGQuZGF0YS5uYW1lKSAtXHJcbiAgICAgICAgICAgICAgICBsZWZ0QW5kUmlnaHRTcGFjZXMgK1xyXG4gICAgICAgICAgICAgICAgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgLSAxODApIC8gMlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgLSBsZWZ0QW5kUmlnaHRTcGFjZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgZ2FwIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRvb2x0aXAgKHdhcyAtMSAtIDQwKVxyXG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pIC0gMSAtIDUwOyAvLyAxMHB4IG1vcmUgZ2FwXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4U2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxODBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAgIC5odG1sKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy8gVG9vbHRpcCBjb250ZW50IHdpdGhvdXQgYW55IGFycm93IG1hcmtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihkWzFdIC0gZFswXSkpIHtcclxuICAgICAgICAgICAgICBpZiAoZFsxXSAtIGRbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPjA8L3NwYW4+JztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdmFyIGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPyBtZXRhRGF0YS5kYXRhVHlwZSA6ICcnO1xyXG4gICAgICAgICAgICAgIHZhciBkZXNpcmVkVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgIC8vIEFsd2F5cyBzaG93IHRoZSBmdWxsIHgtYXhpcyBsYWJlbCAoY2F0ZWdvcnkgbmFtZSkgaW4gdGhlIHRvb2x0aXBcclxuICAgICAgICAgICAgICBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgKGQuZGF0YS5uYW1lID8gZC5kYXRhLm5hbWUgOiAnJykgK1xyXG4gICAgICAgICAgICAgICAgJzwvc3Bhbj4nO1xyXG4gIFxyXG4gICAgICAgICAgICAgIGRlc2lyZWRUZXh0ICs9IG1ldGFEYXRhLnVuaXRcclxuICAgICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgIG1ldGFEYXRhLnVuaXQgK1xyXG4gICAgICAgICAgICAgICAgKGRbMV0gLSBkWzBdKSArXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICAgICAnPC9zcGFuPidcclxuICAgICAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgIChkWzFdIC0gZFswXSkgK1xyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAgICAgJzwvc3Bhbj4nO1xyXG4gIFxyXG4gICAgICAgICAgICAgIC8vIE5vIGFycm93IG1hcmsgb3IgYXJyb3cgSFRNTC9DU1MgaW4gdG9vbHRpcFxyXG4gICAgICAgICAgICAgIHJldHVybiBkZXNpcmVkVGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHJldHVybjtcclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICB9XHJcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGQsIGkpIHtcclxuICAgICAgICBpZiAoIXNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKS5zdHlsZSgnZmlsbCcsIG1ldGFEYXRhLmNvbG9yc1tkLmtleV0pO1xyXG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKS5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAgICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj1cclxuICAgICAgICAgICAgcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YT8udGFyZ2V0TGluZURhdGE/LmJhckFib3ZlVGFyZ2V0Q29sb3I7XHJcbiAgXHJcbiAgICAgICAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBzaG93IHZhbHVlIG9uIHRvcCBvZiB0aGUgYmFyc1xyXG4gICAgICAgKiBuZWVkIHRvIGJlIHVzZWQgYnkgYmFyIGNoYXJ0cyBvbmx5KG9uZSBiYXIgc2hvdWxkIGNvbnRhaW4gb25lIHZhbHVlKVxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93VG90YWxPblRvcCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZWN0XHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay1sYWJlbHMtb250b3Atd2VrbHljaGFydHMnKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pIC0gMztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICAgIGlmIChkWzFdIC0gZFswXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChkWzFdIC0gZFswXSA8PSA5OTkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdFxyXG4gICAgICAgICAgICAgICAgICA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXRGcm9tQmFja2VuZChkWzFdIC0gZFswXSlcclxuICAgICAgICAgICAgICAgICAgOiBmb3JtYXRGcm9tQmFja2VuZChkWzFdIC0gZFswXSk7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXRcclxuICAgICAgICAgICAgICAgICAgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pXHJcbiAgICAgICAgICAgICAgICAgIDogZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIHVzZWQgdG8gc2hvdyBhbmdsZWQgdmFsdWVzIG9uIHRvcCBvZiB0aGUgYmFyc1xyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93QW5nbGVkTGFiZWxzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlY3RcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLWFuZ2xlZC13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCAwKVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihkWzFdIC0gZFswXSkgJiYgZFsxXSAtIGRbMF0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRbMV0gLSBkWzBdIDw9IDk5OSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0XHJcbiAgICAgICAgICAgICAgICAgID8gbWV0YURhdGEudW5pdCArIGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKVxyXG4gICAgICAgICAgICAgICAgICA6IGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKTtcclxuICAgICAgICAgICAgICBlbHNlIHJldHVybiBtZXRhRGF0YS51bml0ICsgZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSAmJiBkWzFdIC0gZFswXSA+IDApIHtcclxuICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICAgIHZhciBpbmNyZW1lbnRlcjogbnVtYmVyID0gMTtcclxuICAgICAgICAgICAgICBtZXRhRGF0YS5rZXlMaXN0LmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGQuZGF0YVtrZXldKSB0b3RhbCA9IHRvdGFsICsgZC5kYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBlbHNlIGluY3JlbWVudGVyID0gMjtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSA9IDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID1cclxuICAgICAgICAgICAgICAgICAgdGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gKyBpbmNyZW1lbnRlcjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgKHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAzKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgICAoeVNjYWxlKHRvdGFsKSAtIDMpICtcclxuICAgICAgICAgICAgICAgICAgICAnKSByb3RhdGUoMjcwKSdcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMiArIDIpICtcclxuICAgICAgICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh5U2NhbGUodG90YWwpIC0gMykgK1xyXG4gICAgICAgICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgKHhTY2FsZS5iYW5kd2lkdGgoKSAqIDMpIC8gNCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgICAgICAgKHlTY2FsZSh0b3RhbCkgLSAzKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAncm90YXRlKDApJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgIC8vIEN1c3RvbSB4LWF4aXMgbGFiZWwgcmVuZGVyaW5nIGZvciBtb2JpbGU6IGV2ZW5seSBkaXN0cmlidXRlIHVuZGVyIGVhY2ggYmFyXHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5jdXN0b20teC1sYWJlbCcpLnJlbW92ZSgpO1xyXG4gICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICBjb25zdCB4VmFsID0gbGVmdEFuZFJpZ2h0U3BhY2VzICsgaSAqIChiYXJXaWR0aCArIGJhclBhZGRpbmcpICsgYmFyV2lkdGggLyAyO1xyXG4gICAgICAgIHN2Zy5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2N1c3RvbS14LWxhYmVsJylcclxuICAgICAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgICAgIC5hdHRyKCd5JywgaGVpZ2h0ICsgMTgpXHJcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAoeFZhbCArIDIwKSArICcsMCknKSAvLyBjdXJyZW50IHZhbHVlICsgMjBcclxuICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEwcHgnKVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJykgLy8gd3JpdGluZyBtb2RlIGZvciBtb2JpbGVcclxuICAgICAgICAgIC50ZXh0KGQubmFtZS5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQnKVxyXG4gICAgICAgIC5jYWxsKHhBeGlzKVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLmF0dHIoJ2R4JywgJzAnKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICcwLjcxZW0nKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICBcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0JylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgfWVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQgbXVsdGljaGFydDEnKVxyXG4gICAgICAuY2FsbCh4QXhpcylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKVxyXG4gIFxyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgICAgXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJylcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgIC5jYWxsKHhBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gIFxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBmb3IgZXhpc3RpbmcgY2hhcnRzLCBwbGFjZSB4YXhpcyBsYWJlbHMgbmVhcmVyIHRvIHhheGlzXHJcbiAgICAgICAqIHVzZWQgYnkgZXhpc3RpbmcgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1zdGFja2VkLXgtYXhpcy10ZXh0IGcudGljayB0ZXh0JykuYXR0cihcclxuICAgICAgICAgICd5JyxcclxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBiYXNlZCBvZiB0aGUgZmxhZywgaGlkZSBvciBzaG93IHhheGlzIHRleHRzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW5cclxuICAgICAgKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCA+IGcgPiB0ZXh0JykuYXR0cihcclxuICAgICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICBcclxuICAgICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gyIGF4aXMyJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAgIC5zdHlsZSgnY29sb3InLCAnIzAwMCcpXHJcbiAgXHJcbiAgICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKVxyXG4gICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoJy5heGlzMiA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgICAgLy8gc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCcueDEuYXhpczEgLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmhpZGVYYXhpc1RpY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQgaXMgdXNlZCB0byBwcmV2ZW50IHgtYXhpcyBsYWJlbCB0byBiZSBkaXNwbGF5ZWQgaW4gYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICAgICAqIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCA9PSB1bmRlZmluZWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZyAtIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZyAtIDQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogcmVzZXQgdGhlIGZsYWcgc28gdGhhdCB0ZXh0cyBhbHNvIGZvbGxvdyB0aGUgcGF0dGVybiBvZiB0aWNrc1xyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgIC8vIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiA4KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duLWFsdCc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cyc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAuYXR0cigneScsIHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgbGFiZWwgaGFzIG1vcmUgdGhhbiBvbmUgd29yZCwgc2hvdyBvbmx5IGZpcnN0IDMgbGV0dGVycyBvZiBmaXJzdCB3b3JkXHJcbiAgICAgICAgICAgICAgdmFyIGZpcnN0V29yZCA9IGQuc3BsaXQoJyAnKVswXTtcclxuICAgICAgICAgICAgICByZXR1cm4gZmlyc3RXb3JkLnN1YnN0cmluZygwLCAzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uKHRoaXM6IFNWR1RleHRFbGVtZW50LCBkLCBpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAgICAgICAgIHZhciB0b3RhbEJhcnMgPSAwO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsQmFycyA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCdnLnRpY2snKS5zaXplKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0b3RhbEJhcnMgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKDAsMCknO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgKGkgKiAzMCkgKyAnLDApJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAvLyBGb3IgbW9iaWxlLCBkbyBub3QgcHJpbnQgdGhlIHNlY29uZCB3b3JkIGF0IGFsbFxyXG4gICAgICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSwgZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbihkLCBpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc01vYmlsZSAmJiBpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMjAsMCknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGhpZGUgeWF4aXMgdmFsdWVzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW5cclxuICAgICAgKSB7XHJcbiAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuXHJcbiAgICAgICkge1xyXG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBkYXNoZWQgeSBheGlzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICBpZiAoXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZFxyXG4gICkge1xyXG4gICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKTsgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIHggYXhpcyBjb2xvclxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvciAhPSB1bmRlZmluZWQpIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQnKS5zdHlsZShcclxuICAgICAgJ2NvbG9yJyxcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0NvbG9yIHx8ICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKSdcclxuICAgICk7XHJcbiAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBkaXNwbGF5IHkgbGFiZWxcclxuICAgICAgICovXHJcbiAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAgIC5hdHRyKCd4JywgJy01JylcclxuICAgICAgLmF0dHIoJ2R5JywgbnVsbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHN0eWxlQXhpc0RvbWFpbigpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5kb21haW4nKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgXHJcbiAgICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcuZG9tYWluJylcclxuICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgICAgXHJcbiAgICBzdmdZQXhpc1JpZ2h0LnNlbGVjdEFsbCgnLmRvbWFpbicpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IpJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgfVxyXG4gIFxyXG4gIHN0eWxlQXhpc0RvbWFpbigpO1xyXG4gIFxyXG4gICAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsLCAubGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHMsIC5saWIteWxhYmVsLXdlZWtseUNoYXJ0cycpLnJlbW92ZSgpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzQWNyb255bShsYWJlbCkge1xyXG4gICAgICAgICAgcmV0dXJuIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fCAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHlMYWJlbFRleHQgPSBtZXRhRGF0YS55TGFiZWw7XHJcbiAgICAgICAgY29uc3QgaXNBY3IgPSBpc0Fjcm9ueW0oeUxhYmVsVGV4dC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpKTtcclxuICBcclxuICAgICAgIGNvbnN0IHlQb3NpdGlvbiA9IGlzcmlhID8gMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDMwIDogMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDQwO1xyXG4gIFxyXG4gICAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KVxyXG4gICAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteWxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAgICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAudGV4dChpc0FjciA/IHlMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHlMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0FjciA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeVplcm8gPSB5U2NhbGUocGFyc2VkTnVtKTtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgICAgLy8gc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC8vICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgLy8gICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAgIC8vICAgLmF0dHIoJ3gyJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAvLyAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAgIC8vICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgICAgLy8gICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMzApICsgJyknKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgXHJcbiAgICAgICAgICAuaHRtbChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICBsZXQgZGF0YVR5cGVUZW1wID0gJyc7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXRMaW5lTmFtZSA9ICd0YXJnZXQnO1xyXG4gICAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICBkYXRhVHlwZVRlbXAgPSBtZXRhRGF0YS5kYXRhVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRhcmdldExpbmVOYW1lID0gc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIGA8ZGl2PiR7dGFyZ2V0TGluZU5hbWV9PC9kaXY+YCArXHJcbiAgICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgICAnJyArXHJcbiAgICAgICAgICAgICAgZGF0YVR5cGVUZW1wICtcclxuICAgICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVjdFxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VlbnRlcicsIGhhbmRsZU1vdXNlT3ZlcilcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpO1xyXG4gICAgICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArICh3aWR0aCAtIDIwKSArICcsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgICAgICAuYXR0cigneScsIDAgLSBtYXJnaW4ucmlnaHQgKiAzKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBoZWlnaHQgLyAyKVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzQWNyb255bShsYWJlbCkge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeExhYmVsVGV4dCA9IG1ldGFEYXRhLnhMYWJlbDtcclxuICAgICAgICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh4TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG4gIFxyXG4gICAgICAgICAgY29uc3QgeFBvc2l0aW9uID0gaXNyaWEgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApO1xyXG4gIFxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydClcclxuICAgICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWwnO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHdpZHRoIC8gMiArICcgLCcgKyB4UG9zaXRpb24gKyAnKSdcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAudGV4dChpc0FjciA/IHhMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHhMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0FjciA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChsaW5lRGF0YSAmJiBjb2xvcnMpIHtcclxuICAgICAgICB2YXIgZGF0YUdyb3VwID0gZDNcclxuICAgICAgICAgIC5uZXN0KClcclxuICAgICAgICAgIC5rZXkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQuY2F0ZWdvcnk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmVudHJpZXMobGluZURhdGEpO1xyXG4gIFxyXG4gICAgICAgIHZhciBsaW5lR2VuID0gZDNcclxuICAgICAgICAgIC5saW5lKClcclxuICAgICAgICAgIC54KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICBcclxuICAgICAgICB2YXIgY2FsY3VsYXRlQ1ggPSAoZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9O1xyXG4gIFxyXG4gICAgICAgIHZhciBjYWxjdWxhdGVDWSA9IChkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gIFxyXG4gICAgICAgIGRhdGFHcm91cC5mb3JFYWNoKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAgIC5kYXR1bShkLnZhbHVlcylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGlmICgnY2F0ZWdvcnknIGluIGRbMF0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbZFswXS5jYXRlZ29yeV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAyLjUpIC8qKmxpbmUgdGhpbmtuZXNzICovXHJcbiAgICAgICAgICAgIC5hdHRyKCdkJywgbGluZUdlbihkLnZhbHVlcykpO1xyXG4gIFxyXG4gICAgICAgICAgdmFyIGRvdCA9IHN2Z1xyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAgICAgICAuZGF0YShkLnZhbHVlcylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgICAgZG90XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBpZiAoJ2NhdGVnb3J5JyBpbiBkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JzW2QuY2F0ZWdvcnldO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdyJywgMykgLyoqcmFkaXVzIG9mIGNpcmNsZT01ICovXHJcbiAgICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuICBcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgICAgICBkb3RcclxuICAgICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90cycpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAnICsgJy44NWVtOycgKyAnZm9udC13ZWlnaHQ6JyArICdib2xkJylcclxuICAgICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geFNjYWxlKGQubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdmcuYXR0cignd2lkdGgnLCAxNTApLnN0eWxlKCdtYXgtd2lkdGgnLCAxNTApLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuICAgIH1cclxuICAgIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgICBpZiAodGhpcy5jaGFydERhdGE/Lm1ldGFEYXRhPy5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICAgIH1cclxuICAgIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICAgIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSkge1xyXG4gICAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCk7XHJcbiAgICB9IFxyXG4gIH0iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjaGFydENvbmZpZ3VyYXRpb24uYmFja2dyb3VuZENvbG9yXCJcclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiXHJcbj5cclxuXHJcbjxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjJcclxuICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuPC9kaXY+XHJcblxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYxXHJcbiAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiXHJcbiAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgW3NlbGVjdGVkS3BpVG9vbHRvcF09XCJjaGFydENvbmZpZ3VyYXRpb24uc2VsZWN0ZWRLcGlUb29sdG9wXCJcclxuICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgKm5nSWY9XCJpc0hlYWRlclZpc2libGVcIlxyXG4+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|