devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
1,473 lines • 157 kB
JavaScript
/*!
* devextreme-angular
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
/* tslint:disable:max-line-length */
import { TransferState, Component, NgModule, ElementRef, NgZone, PLATFORM_ID, Inject, Input, Output, EventEmitter, ContentChildren, QueryList } from '@angular/core';
import DxPieChart from 'devextreme/viz/pie_chart';
import { DxComponent, DxTemplateHost, DxIntegrationModule, DxTemplateModule, NestedOptionHost, IterableDifferHelper, WatcherHelper, } from 'devextreme-angular/core';
import { DxoAdaptiveLayoutModule } from 'devextreme-angular/ui/nested';
import { DxoAnimationModule } from 'devextreme-angular/ui/nested';
import { DxiAnnotationModule } from 'devextreme-angular/ui/nested';
import { DxoBorderModule } from 'devextreme-angular/ui/nested';
import { DxoFontModule } from 'devextreme-angular/ui/nested';
import { DxoImageModule } from 'devextreme-angular/ui/nested';
import { DxoShadowModule } from 'devextreme-angular/ui/nested';
import { DxoCommonAnnotationSettingsModule } from 'devextreme-angular/ui/nested';
import { DxoCommonSeriesSettingsModule } from 'devextreme-angular/ui/nested';
import { DxoColorModule } from 'devextreme-angular/ui/nested';
import { DxoHoverStyleModule } from 'devextreme-angular/ui/nested';
import { DxoHatchingModule } from 'devextreme-angular/ui/nested';
import { DxoLabelModule } from 'devextreme-angular/ui/nested';
import { DxoArgumentFormatModule } from 'devextreme-angular/ui/nested';
import { DxoConnectorModule } from 'devextreme-angular/ui/nested';
import { DxoFormatModule } from 'devextreme-angular/ui/nested';
import { DxoSelectionStyleModule } from 'devextreme-angular/ui/nested';
import { DxoSmallValuesGroupingModule } from 'devextreme-angular/ui/nested';
import { DxoExportModule } from 'devextreme-angular/ui/nested';
import { DxoLegendModule } from 'devextreme-angular/ui/nested';
import { DxoMarginModule } from 'devextreme-angular/ui/nested';
import { DxoTitleModule } from 'devextreme-angular/ui/nested';
import { DxoSubtitleModule } from 'devextreme-angular/ui/nested';
import { DxoLoadingIndicatorModule } from 'devextreme-angular/ui/nested';
import { DxiSeriesModule } from 'devextreme-angular/ui/nested';
import { DxoSeriesTemplateModule } from 'devextreme-angular/ui/nested';
import { DxoSizeModule } from 'devextreme-angular/ui/nested';
import { DxoTooltipModule } from 'devextreme-angular/ui/nested';
import { DxoPieChartAdaptiveLayoutModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartAnimationModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxiPieChartAnnotationModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartAnnotationBorderModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartArgumentFormatModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartBorderModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartColorModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartCommonAnnotationSettingsModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartCommonSeriesSettingsModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartConnectorModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartExportModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartFontModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartFormatModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartHatchingModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartHoverStyleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartImageModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartLabelModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartLegendModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartLegendTitleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartLegendTitleSubtitleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartLoadingIndicatorModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartMarginModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartPieChartTitleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartPieChartTitleSubtitleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartSelectionStyleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxiPieChartSeriesModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartSeriesBorderModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartSeriesTemplateModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartShadowModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartSizeModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartSmallValuesGroupingModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartSubtitleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartTitleModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartTooltipModule } from 'devextreme-angular/ui/pie-chart/nested';
import { DxoPieChartTooltipBorderModule } from 'devextreme-angular/ui/pie-chart/nested';
import { PROPERTY_TOKEN_annotations, PROPERTY_TOKEN_series, } from 'devextreme-angular/core/tokens';
import * as i0 from "@angular/core";
import * as i1 from "devextreme-angular/core";
/**
* The PieChart is a UI component that visualizes data as a circle divided into sectors that each represents a portion of the whole.
*/
export class DxPieChartComponent extends DxComponent {
_watcherHelper;
_idh;
set _annotationsContentChildren(value) {
this.setChildren('annotations', value);
}
set _seriesContentChildren(value) {
this.setChildren('series', value);
}
instance = null;
/**
* Specifies adaptive layout properties.
*/
get adaptiveLayout() {
return this._getOption('adaptiveLayout');
}
set adaptiveLayout(value) {
this._setOption('adaptiveLayout', value);
}
/**
* Specifies animation properties.
*/
get animation() {
return this._getOption('animation');
}
set animation(value) {
this._setOption('animation', value);
}
/**
* Specifies the annotation collection.
*/
get annotations() {
return this._getOption('annotations');
}
set annotations(value) {
this._setOption('annotations', value);
}
/**
* Specifies a custom template for content in the pie's center.
*/
get centerTemplate() {
return this._getOption('centerTemplate');
}
set centerTemplate(value) {
this._setOption('centerTemplate', value);
}
/**
* Specifies settings common for all annotations in the PieChart.
*/
get commonAnnotationSettings() {
return this._getOption('commonAnnotationSettings');
}
set commonAnnotationSettings(value) {
this._setOption('commonAnnotationSettings', value);
}
/**
* An object defining the configuration properties that are common for all series of the PieChart UI component.
*/
get commonSeriesSettings() {
return this._getOption('commonSeriesSettings');
}
set commonSeriesSettings(value) {
this._setOption('commonSeriesSettings', value);
}
/**
* Customizes an individual annotation.
*/
get customizeAnnotation() {
return this._getOption('customizeAnnotation');
}
set customizeAnnotation(value) {
this._setOption('customizeAnnotation', value);
}
/**
* Customizes the appearance of an individual point label.
*/
get customizeLabel() {
return this._getOption('customizeLabel');
}
set customizeLabel(value) {
this._setOption('customizeLabel', value);
}
/**
* Customizes the appearance of an individual series point.
*/
get customizePoint() {
return this._getOption('customizePoint');
}
set customizePoint(value) {
this._setOption('customizePoint', value);
}
/**
* Binds the UI component to data.
*/
get dataSource() {
return this._getOption('dataSource');
}
set dataSource(value) {
this._setOption('dataSource', value);
}
/**
* Specifies the diameter of the pie.
*/
get diameter() {
return this._getOption('diameter');
}
set diameter(value) {
this._setOption('diameter', value);
}
/**
* Specifies whether the UI component responds to user interaction.
*/
get disabled() {
return this._getOption('disabled');
}
set disabled(value) {
this._setOption('disabled', value);
}
/**
* Specifies the global attributes to be attached to the UI component's container element.
*/
get elementAttr() {
return this._getOption('elementAttr');
}
set elementAttr(value) {
this._setOption('elementAttr', value);
}
/**
* Configures the exporting and printing features.
*/
get export() {
return this._getOption('export');
}
set export(value) {
this._setOption('export', value);
}
/**
* Specifies the fraction of the inner radius relative to the total radius in the series of the 'doughnut' type. The value should be between 0 and 1.
*/
get innerRadius() {
return this._getOption('innerRadius');
}
set innerRadius(value) {
this._setOption('innerRadius', value);
}
/**
* Specifies PieChart legend properties.
*/
get legend() {
return this._getOption('legend');
}
set legend(value) {
this._setOption('legend', value);
}
/**
* Configures the loading indicator.
*/
get loadingIndicator() {
return this._getOption('loadingIndicator');
}
set loadingIndicator(value) {
this._setOption('loadingIndicator', value);
}
/**
* Generates space around the UI component.
*/
get margin() {
return this._getOption('margin');
}
set margin(value) {
this._setOption('margin', value);
}
/**
* Specifies the minimum diameter of the pie.
*/
get minDiameter() {
return this._getOption('minDiameter');
}
set minDiameter(value) {
this._setOption('minDiameter', value);
}
/**
* Sets the palette to be used to colorize series and their elements.
*/
get palette() {
return this._getOption('palette');
}
set palette(value) {
this._setOption('palette', value);
}
/**
* Specifies what to do with colors in the palette when their number is less than the number of series (in the Chart UI component) or points in a series (in the PieChart UI component).
*/
get paletteExtensionMode() {
return this._getOption('paletteExtensionMode');
}
set paletteExtensionMode(value) {
this._setOption('paletteExtensionMode', value);
}
/**
* Notifies the UI component that it is embedded into an HTML page that uses a tag modifying the path.
*/
get pathModified() {
return this._getOption('pathModified');
}
set pathModified(value) {
this._setOption('pathModified', value);
}
/**
* Specifies whether a single point or multiple points can be selected in the chart.
*/
get pointSelectionMode() {
return this._getOption('pointSelectionMode');
}
set pointSelectionMode(value) {
this._setOption('pointSelectionMode', value);
}
/**
* Specifies whether to redraw the UI component when the size of the container changes or a mobile device rotates.
*/
get redrawOnResize() {
return this._getOption('redrawOnResize');
}
set redrawOnResize(value) {
this._setOption('redrawOnResize', value);
}
/**
* Specifies how a chart must behave when point labels overlap.
*/
get resolveLabelOverlapping() {
return this._getOption('resolveLabelOverlapping');
}
set resolveLabelOverlapping(value) {
this._setOption('resolveLabelOverlapping', value);
}
/**
* Switches the UI component to a right-to-left representation.
*/
get rtlEnabled() {
return this._getOption('rtlEnabled');
}
set rtlEnabled(value) {
this._setOption('rtlEnabled', value);
}
/**
* Specifies the direction that the pie chart segments will occupy.
*/
get segmentsDirection() {
return this._getOption('segmentsDirection');
}
set segmentsDirection(value) {
this._setOption('segmentsDirection', value);
}
/**
* Specifies properties for the series of the PieChart UI component.
*/
get series() {
return this._getOption('series');
}
set series(value) {
this._setOption('series', value);
}
/**
* Defines properties for the series template.
*/
get seriesTemplate() {
return this._getOption('seriesTemplate');
}
set seriesTemplate(value) {
this._setOption('seriesTemplate', value);
}
/**
* Specifies the UI component's size in pixels.
*/
get size() {
return this._getOption('size');
}
set size(value) {
this._setOption('size', value);
}
/**
* Allows you to display several adjoining pies in the same size.
*/
get sizeGroup() {
return this._getOption('sizeGroup');
}
set sizeGroup(value) {
this._setOption('sizeGroup', value);
}
/**
* Specifies the angle in arc degrees from which the first segment of a pie chart should start.
*/
get startAngle() {
return this._getOption('startAngle');
}
set startAngle(value) {
this._setOption('startAngle', value);
}
/**
* Sets the name of the theme the UI component uses.
*/
get theme() {
return this._getOption('theme');
}
set theme(value) {
this._setOption('theme', value);
}
/**
* Configures the UI component's title.
*/
get title() {
return this._getOption('title');
}
set title(value) {
this._setOption('title', value);
}
/**
*
*/
get tooltip() {
return this._getOption('tooltip');
}
set tooltip(value) {
this._setOption('tooltip', value);
}
/**
* Specifies the type of the pie chart series.
*/
get type() {
return this._getOption('type');
}
set type(value) {
this._setOption('type', value);
}
/**
* A function that is executed before the UI component is disposed of.
*/
onDisposing;
/**
* A function that is executed when all series are ready.
*/
onDone;
/**
* A function that is executed when the UI component's rendering has finished.
*/
onDrawn;
/**
* A function that is executed after the UI component is exported.
*/
onExported;
/**
* A function that is executed before the UI component is exported.
*/
onExporting;
/**
* A function that is executed before a file with exported UI component is saved to the user's local storage.
*/
onFileSaving;
/**
* A function that is executed when an error or warning occurs.
*/
onIncidentOccurred;
/**
* A function used in JavaScript frameworks to save the UI component instance.
*/
onInitialized;
/**
* A function that is executed when a legend item is clicked or tapped.
*/
onLegendClick;
/**
* A function that is executed after a UI component property is changed.
*/
onOptionChanged;
/**
* A function that is executed when a series point is clicked or tapped.
*/
onPointClick;
/**
* A function that is executed after the pointer enters or leaves a series point.
*/
onPointHoverChanged;
/**
* A function that is executed when a series point is selected or selection is canceled.
*/
onPointSelectionChanged;
/**
* A function that is executed when a tooltip becomes hidden.
*/
onTooltipHidden;
/**
* A function that is executed when a tooltip appears.
*/
onTooltipShown;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
adaptiveLayoutChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
animationChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
annotationsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
centerTemplateChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
commonAnnotationSettingsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
commonSeriesSettingsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customizeAnnotationChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customizeLabelChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customizePointChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
dataSourceChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
diameterChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
disabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
elementAttrChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
exportChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
innerRadiusChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
legendChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
loadingIndicatorChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
marginChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
minDiameterChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
paletteChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
paletteExtensionModeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
pathModifiedChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
pointSelectionModeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
redrawOnResizeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
resolveLabelOverlappingChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
rtlEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
segmentsDirectionChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
seriesChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
seriesTemplateChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
sizeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
sizeGroupChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
startAngleChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
themeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
titleChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
tooltipChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
typeChange;
constructor(elementRef, ngZone, templateHost, _watcherHelper, _idh, optionHost, transferState, platformId) {
super(elementRef, ngZone, templateHost, _watcherHelper, transferState, platformId);
this._watcherHelper = _watcherHelper;
this._idh = _idh;
this._createEventEmitters([
{ subscribe: 'disposing', emit: 'onDisposing' },
{ subscribe: 'done', emit: 'onDone' },
{ subscribe: 'drawn', emit: 'onDrawn' },
{ subscribe: 'exported', emit: 'onExported' },
{ subscribe: 'exporting', emit: 'onExporting' },
{ subscribe: 'fileSaving', emit: 'onFileSaving' },
{ subscribe: 'incidentOccurred', emit: 'onIncidentOccurred' },
{ subscribe: 'initialized', emit: 'onInitialized' },
{ subscribe: 'legendClick', emit: 'onLegendClick' },
{ subscribe: 'optionChanged', emit: 'onOptionChanged' },
{ subscribe: 'pointClick', emit: 'onPointClick' },
{ subscribe: 'pointHoverChanged', emit: 'onPointHoverChanged' },
{ subscribe: 'pointSelectionChanged', emit: 'onPointSelectionChanged' },
{ subscribe: 'tooltipHidden', emit: 'onTooltipHidden' },
{ subscribe: 'tooltipShown', emit: 'onTooltipShown' },
{ emit: 'adaptiveLayoutChange' },
{ emit: 'animationChange' },
{ emit: 'annotationsChange' },
{ emit: 'centerTemplateChange' },
{ emit: 'commonAnnotationSettingsChange' },
{ emit: 'commonSeriesSettingsChange' },
{ emit: 'customizeAnnotationChange' },
{ emit: 'customizeLabelChange' },
{ emit: 'customizePointChange' },
{ emit: 'dataSourceChange' },
{ emit: 'diameterChange' },
{ emit: 'disabledChange' },
{ emit: 'elementAttrChange' },
{ emit: 'exportChange' },
{ emit: 'innerRadiusChange' },
{ emit: 'legendChange' },
{ emit: 'loadingIndicatorChange' },
{ emit: 'marginChange' },
{ emit: 'minDiameterChange' },
{ emit: 'paletteChange' },
{ emit: 'paletteExtensionModeChange' },
{ emit: 'pathModifiedChange' },
{ emit: 'pointSelectionModeChange' },
{ emit: 'redrawOnResizeChange' },
{ emit: 'resolveLabelOverlappingChange' },
{ emit: 'rtlEnabledChange' },
{ emit: 'segmentsDirectionChange' },
{ emit: 'seriesChange' },
{ emit: 'seriesTemplateChange' },
{ emit: 'sizeChange' },
{ emit: 'sizeGroupChange' },
{ emit: 'startAngleChange' },
{ emit: 'themeChange' },
{ emit: 'titleChange' },
{ emit: 'tooltipChange' },
{ emit: 'typeChange' }
]);
this._idh.setHost(this);
optionHost.setHost(this);
}
_createInstance(element, options) {
return new DxPieChart(element, options);
}
ngOnDestroy() {
this._destroyWidget();
}
ngOnChanges(changes) {
super.ngOnChanges(changes);
this.setupChanges('annotations', changes);
this.setupChanges('dataSource', changes);
this.setupChanges('palette', changes);
this.setupChanges('series', changes);
}
setupChanges(prop, changes) {
if (!(prop in this._optionsToUpdate)) {
this._idh.setup(prop, changes);
}
}
ngDoCheck() {
this._idh.doCheck('annotations');
this._idh.doCheck('dataSource');
this._idh.doCheck('palette');
this._idh.doCheck('series');
this._watcherHelper.checkWatchers();
super.ngDoCheck();
super.clearChangedOptions();
}
_setOption(name, value) {
let isSetup = this._idh.setupSingle(name, value);
let isChanged = this._idh.getChanges(name, value) !== null;
if (isSetup || isChanged) {
super._setOption(name, value);
}
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxPieChartComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.DxTemplateHost }, { token: i1.WatcherHelper }, { token: i1.IterableDifferHelper }, { token: i1.NestedOptionHost }, { token: i0.TransferState }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DxPieChartComponent, isStandalone: true, selector: "dx-pie-chart", inputs: { adaptiveLayout: "adaptiveLayout", animation: "animation", annotations: "annotations", centerTemplate: "centerTemplate", commonAnnotationSettings: "commonAnnotationSettings", commonSeriesSettings: "commonSeriesSettings", customizeAnnotation: "customizeAnnotation", customizeLabel: "customizeLabel", customizePoint: "customizePoint", dataSource: "dataSource", diameter: "diameter", disabled: "disabled", elementAttr: "elementAttr", export: "export", innerRadius: "innerRadius", legend: "legend", loadingIndicator: "loadingIndicator", margin: "margin", minDiameter: "minDiameter", palette: "palette", paletteExtensionMode: "paletteExtensionMode", pathModified: "pathModified", pointSelectionMode: "pointSelectionMode", redrawOnResize: "redrawOnResize", resolveLabelOverlapping: "resolveLabelOverlapping", rtlEnabled: "rtlEnabled", segmentsDirection: "segmentsDirection", series: "series", seriesTemplate: "seriesTemplate", size: "size", sizeGroup: "sizeGroup", startAngle: "startAngle", theme: "theme", title: "title", tooltip: "tooltip", type: "type" }, outputs: { onDisposing: "onDisposing", onDone: "onDone", onDrawn: "onDrawn", onExported: "onExported", onExporting: "onExporting", onFileSaving: "onFileSaving", onIncidentOccurred: "onIncidentOccurred", onInitialized: "onInitialized", onLegendClick: "onLegendClick", onOptionChanged: "onOptionChanged", onPointClick: "onPointClick", onPointHoverChanged: "onPointHoverChanged", onPointSelectionChanged: "onPointSelectionChanged", onTooltipHidden: "onTooltipHidden", onTooltipShown: "onTooltipShown", adaptiveLayoutChange: "adaptiveLayoutChange", animationChange: "animationChange", annotationsChange: "annotationsChange", centerTemplateChange: "centerTemplateChange", commonAnnotationSettingsChange: "commonAnnotationSettingsChange", commonSeriesSettingsChange: "commonSeriesSettingsChange", customizeAnnotationChange: "customizeAnnotationChange", customizeLabelChange: "customizeLabelChange", customizePointChange: "customizePointChange", dataSourceChange: "dataSourceChange", diameterChange: "diameterChange", disabledChange: "disabledChange", elementAttrChange: "elementAttrChange", exportChange: "exportChange", innerRadiusChange: "innerRadiusChange", legendChange: "legendChange", loadingIndicatorChange: "loadingIndicatorChange", marginChange: "marginChange", minDiameterChange: "minDiameterChange", paletteChange: "paletteChange", paletteExtensionModeChange: "paletteExtensionModeChange", pathModifiedChange: "pathModifiedChange", pointSelectionModeChange: "pointSelectionModeChange", redrawOnResizeChange: "redrawOnResizeChange", resolveLabelOverlappingChange: "resolveLabelOverlappingChange", rtlEnabledChange: "rtlEnabledChange", segmentsDirectionChange: "segmentsDirectionChange", seriesChange: "seriesChange", seriesTemplateChange: "seriesTemplateChange", sizeChange: "sizeChange", sizeGroupChange: "sizeGroupChange", startAngleChange: "startAngleChange", themeChange: "themeChange", titleChange: "titleChange", tooltipChange: "tooltipChange", typeChange: "typeChange" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
], queries: [{ propertyName: "_annotationsContentChildren", predicate: PROPERTY_TOKEN_annotations }, { propertyName: "_seriesContentChildren", predicate: PROPERTY_TOKEN_series }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: DxIntegrationModule }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxPieChartComponent, decorators: [{
type: Component,
args: [{ selector: 'dx-pie-chart', standalone: true, template: '', host: { ngSkipHydration: 'true' }, imports: [DxIntegrationModule], providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
], styles: [":host{display:block}\n"] }]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DxTemplateHost }, { type: i1.WatcherHelper }, { type: i1.IterableDifferHelper }, { type: i1.NestedOptionHost }, { type: i0.TransferState }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }], propDecorators: { _annotationsContentChildren: [{
type: ContentChildren,
args: [PROPERTY_TOKEN_annotations]
}], _seriesContentChildren: [{
type: ContentChildren,
args: [PROPERTY_TOKEN_series]
}], adaptiveLayout: [{
type: Input
}], animation: [{
type: Input
}], annotations: [{
type: Input
}], centerTemplate: [{
type: Input
}], commonAnnotationSettings: [{
type: Input
}], commonSeriesSettings: [{
type: Input
}], customizeAnnotation: [{
type: Input
}], customizeLabel: [{
type: Input
}], customizePoint: [{
type: Input
}], dataSource: [{
type: Input
}], diameter: [{
type: Input
}], disabled: [{
type: Input
}], elementAttr: [{
type: Input
}], export: [{
type: Input
}], innerRadius: [{
type: Input
}], legend: [{
type: Input
}], loadingIndicator: [{
type: Input
}], margin: [{
type: Input
}], minDiameter: [{
type: Input
}], palette: [{
type: Input
}], paletteExtensionMode: [{
type: Input
}], pathModified: [{
type: Input
}], pointSelectionMode: [{
type: Input
}], redrawOnResize: [{
type: Input
}], resolveLabelOverlapping: [{
type: Input
}], rtlEnabled: [{
type: Input
}], segmentsDirection: [{
type: Input
}], series: [{
type: Input
}], seriesTemplate: [{
type: Input
}], size: [{
type: Input
}], sizeGroup: [{
type: Input
}], startAngle: [{
type: Input
}], theme: [{
type: Input
}], title: [{
type: Input
}], tooltip: [{
type: Input
}], type: [{
type: Input
}], onDisposing: [{
type: Output
}], onDone: [{
type: Output
}], onDrawn: [{
type: Output
}], onExported: [{
type: Output
}], onExporting: [{
type: Output
}], onFileSaving: [{
type: Output
}], onIncidentOccurred: [{
type: Output
}], onInitialized: [{
type: Output
}], onLegendClick: [{
type: Output
}], onOptionChanged: [{
type: Output
}], onPointClick: [{
type: Output
}], onPointHoverChanged: [{
type: Output
}], onPointSelectionChanged: [{
type: Output
}], onTooltipHidden: [{
type: Output
}], onTooltipShown: [{
type: Output
}], adaptiveLayoutChange: [{
type: Output
}], animationChange: [{
type: Output
}], annotationsChange: [{
type: Output
}], centerTemplateChange: [{
type: Output
}], commonAnnotationSettingsChange: [{
type: Output
}], commonSeriesSettingsChange: [{
type: Output
}], customizeAnnotationChange: [{
type: Output
}], customizeLabelChange: [{
type: Output
}], customizePointChange: [{
type: Output
}], dataSourceChange: [{
type: Output
}], diameterChange: [{
type: Output
}], disabledChange: [{
type: Output
}], elementAttrChange: [{
type: Output
}], exportChange: [{
type: Output
}], innerRadiusChange: [{
type: Output
}], legendChange: [{
type: Output
}], loadingIndicatorChange: [{
type: Output
}], marginChange: [{
type: Output
}], minDiameterChange: [{
type: Output
}], paletteChange: [{
type: Output
}], paletteExtensionModeChange: [{
type: Output
}], pathModifiedChange: [{
type: Output
}], pointSelectionModeChange: [{
type: Output
}], redrawOnResizeChange: [{
type: Output
}], resolveLabelOverlappingChange: [{
type: Output
}], rtlEnabledChange: [{
type: Output
}], segmentsDirectionChange: [{
type: Output
}], seriesChange: [{
type: Output
}], seriesTemplateChange: [{
type: Output
}], sizeChange: [{
type: Output
}], sizeGroupChange: [{
type: Output
}], startAngleChange: [{
type: Output
}], themeChange: [{
type: Output
}], titleChange: [{
type: Output
}], tooltipChange: [{
type: Output
}], typeChange: [{
type: Output
}] } });
export class DxPieChartModule {
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxPieChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
/** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DxPieChartModule, imports: [DxPieChartComponent, DxoAdaptiveLayoutModule,
DxoAnimationModule,
DxiAnnotationModule,
DxoBorderModule,
DxoFontModule,
DxoImageModule,
DxoShadowModule,
DxoCommonAnnotationSettingsModule,
DxoCommonSeriesSettingsModule,
DxoColorModule,
DxoHoverStyleModule,
DxoHatchingModule,
DxoLabelModule,
DxoArgumentFormatModule,
DxoConnectorModule,
DxoFormatModule,
DxoSelectionStyleModule,
DxoSmallValuesGroupingModule,
DxoExportModule,
DxoLegendModule,
DxoMarginModule,
DxoTitleModule,
DxoSubtitleModule,
DxoLoadingIndicatorModule,
DxiSeriesModule,
DxoSeriesTemplateModule,
DxoSizeModule,
DxoTooltipModule,
DxoPieChartAdaptiveLayoutModule,
DxoPieChartAnimationModule,
DxiPieChartAnnotationModule,
DxoPieChartAnnotationBorderModule,
DxoPieChartArgumentFormatModule,
DxoPieChartBorderModule,
DxoPieChartColorModule,
DxoPieChartCommonAnnotationSettingsModule,
DxoPieChartCommonSeriesSettingsModule,
DxoPieChartConnectorModule,
DxoPieChartExportModule,
DxoPieChartFontModule,
DxoPieChartFormatModule,
DxoPieChartHatchingModule,
DxoPieChartHoverStyleModule,
DxoPieChartImageModule,
DxoPieChartLabelModule,
DxoPieChartLegendModule,
DxoPieChartLegendTitleModule,
DxoPieChartLegendTitleSubtitleModule,
DxoPieChartLoadingIndicatorModule,
DxoPieChartMarginModule,
DxoPieChartPieChartTitleModule,
DxoPieChartPieChartTitleSubtitleModule,
DxoPieChartSelectionStyleModule,
DxiPieChartSeriesModule,
DxoPieChartSeriesBorderModule,
DxoPieChartSeriesTemplateModule,
DxoPieChartShadowModule,
DxoPieChartSizeModule,
DxoPieChartSmallValuesGroupingModule,
DxoPieChartSubtitleModule,
DxoPieChartTitleModule,
DxoPieChartTooltipModule,
DxoPieChartTooltipBorderModule,
DxIntegrationModule,
DxTemplateModule], exports: [DxPieChartComponent, DxoAdaptiveLayoutModule,
DxoAnimationModule,
DxiAnnotationModule,
DxoBorderModule,
DxoFontModule,
DxoImageModule,
DxoShadowModule,
DxoCommonAnnotationSettingsModule,
DxoCommonSeriesSettingsModule,
DxoColorModule,
DxoHoverStyleModule,
DxoHatchingModule,
DxoLabelModule,
DxoArgumentFormatModule,
DxoConnectorModule,
DxoFormatModule,
DxoSelectionStyleModule,
DxoSmallValuesGroupingModule,
DxoExportModule,
DxoLegendModule,
DxoMarginModule,
DxoTitleModule,
DxoSubtitleModule,
DxoLoadingIndicatorModule,
DxiSeriesModule,
DxoSeriesTemplateModule,
DxoSizeModule,
DxoTooltipModule,
DxoPieChartAdaptiveLayoutModule,
DxoPieChartAnimationModule,
DxiPieChartAnnotationModule,
DxoPieChartAnnotationBorderModule,
DxoPieChartArgumentFormatModule,
DxoPieChartBorderModule,
DxoPieChartColorModule,
DxoPieChartCommonAnnotationSettingsModule,
DxoPieChartCommonSeriesSettingsModule,
DxoPieChartConnectorModule,
DxoPieChartExportModule,
DxoPieChartFontModule,
DxoPieChartFormatModule,
DxoPieChartHatchingModule,
DxoPieChartHoverStyleModule,
DxoPieChartImageModule,
DxoPieChartLabelModule,
DxoPieChartLegendModule,
DxoPieChartLegendTitleModule,
DxoPieChartLegendTitleSubtitleModule,
DxoPieChartLoadingIndicatorModule,
DxoPieChartMarginModule,
DxoPieChartPieChartTitleModule,
DxoPieChartPieChartTitleSubtitleModule,
DxoPieChartSelectionStyleModule,
DxiPieChartSeriesModule,
DxoPieChartSeriesBorderModule,
DxoPieChartSeriesTemplateModule,
DxoPieChartShadowModule,
DxoPieChartSizeModule,
DxoPieChartSmallValuesGroupingModule,
DxoPieChartSubtitleModule,
DxoPieChartTitleModule,
DxoPieChartTooltipModule,
DxoPieChartTooltipBorderModule,
DxTemplateModule] });
/** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxPieChartModule, imports: [DxPieChartComponent,
DxoAdaptiveLayoutModule,
DxoAnimationModule,
DxiAnnotationModule,
DxoBorderModule,
DxoFontModule,
DxoImageModule,
DxoShadowModule,
DxoCommonAnnotationSettingsModule,
DxoCommonSeriesSettingsModule,
DxoColorModule,
DxoHoverStyleModule,
DxoHatchingModule,
DxoLabelModule,
DxoArgumentFormatModule,
DxoConnectorModule,
DxoFormatModule,
DxoSelectionStyleModule,
DxoSmallValuesGroupingModule,
DxoExportModule,
DxoLegendModule,
DxoMarginModule,
DxoTitleModule,
DxoSubtitleModule,
DxoLoadingIndicatorModule,
DxiSeriesModule,
DxoSeriesTemplateModule,
DxoSizeModule,
DxoTooltipModule,
DxoPieChartAdaptiveLayoutModule,
DxoPieChartAnimationModule,
DxiPieChartAnnotationModule,
DxoPieChartAnnotationBorderModule,
DxoPieChartArgumentFormatModule,
DxoPieChartBorderModule,
DxoPieChartColorModule,
DxoPieChartCommonAnnotationSettingsModule,
DxoPieChartCommonSeriesSettingsModule,
DxoPieChartConnectorModule,
DxoPieChartExportModule,
DxoPieChartFontModule,
DxoPieChartFormatModule,
DxoPieChartHatchingModule,
DxoPieChartHoverStyleModule,
DxoPieChartImageModule,
DxoPieChartLabelModule,
DxoPieChartLegendModule,
DxoPieChartLegendTitleModule,
DxoPieChartLegendTitleSubtitleModule,
DxoPieChartLoadingIndicatorModule,
DxoPieChartMarginModule,
DxoPieChartPieChartTitleModule,
DxoPieChartPieChartTitleSubtitleModule,
DxoPieChartSelectionStyleModule,
DxiPieChartSeriesModule,
DxoPieChartSeriesBorderModule,
DxoPieChartSeriesTemplateModule,
DxoPieChartShadowModule,
DxoPieChartSizeModule,
DxoPieChartSmallValuesGroupingModule,
DxoPieChartSubtitleModule,
DxoPieChartTitleModule,
DxoPieChartTooltipModule,
DxoPieChartTooltipBorderModule,
DxIntegrationModule,
DxTemplateModule, DxoAdaptiveLayoutModule,
DxoAnimationModule,
DxiAnnotationModule,
DxoBorderModule,
DxoFontModule,
DxoImageModule,
DxoShadowModule,
DxoCommonAnnotationSettingsModule,
DxoCommonSeriesSettingsModule,
DxoColorModule,
DxoHoverStyleModule,
DxoHatchingModule,
DxoLabelModule,
DxoArgumentFormatModule,
DxoConnectorModule,
DxoFormatModule,
DxoSelectionStyleModule,
DxoSmallValuesGroupingModule,
DxoExportModule,
DxoLegendModule,
DxoMarginModule,
DxoTitleModule,
DxoSubtitleModule,
DxoLoadingIndicatorModule,
DxiSeriesModule,
DxoSeriesTemplateModule,
DxoSizeModule,
DxoTooltipModule,
DxoPieChartAdaptiveLayoutModule,
DxoPieChartAnimationModule,
DxiPieChartAnnotationModule,
DxoPieChartAnnotationBorderModule,
DxoPieChartArgumentFormatModule,
DxoPieChartBorderModule,
DxoPieChartColorModule,
DxoPieChartCommonAnnotationSettingsModule,
DxoPieChartCommonSeriesSettingsModule,
DxoPieChartConnectorModule,
DxoPieChartExportModule,
DxoPieChartFontModule,
DxoPieChartFormatModule,
DxoPieChartHatchingModule,
DxoPieChartHoverStyleModule,
DxoPieChartImageModule,
DxoPieChartLabelModule,
DxoPieChartLegendModule,
DxoPieChartLegendTitleModule,
DxoPieChartLegendTitleSubtitleModule,
DxoPieChartLoadingIndicatorModule,
DxoPieChartMarginModule,
DxoPieChartPieChartTitleModule,
DxoPieChartPieChartTitleSubtitleModule,
DxoPieChartSelectionStyleModule,
DxiPieChartSeriesModule,
DxoPieChartSeriesBorderModule,
DxoPieChartSeriesTemplateModule,
DxoPieChartShadowModule,
DxoPieChartSizeModule,
DxoPieChartSmallValuesGroupingModule,
DxoPieChartSubtitleModule,
DxoPieChartTitleModule,
DxoPieChartTooltipModule,
DxoPieChartTooltipBorderModule,
DxTemplateModule] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxPieChartModule, decorators: [{
type: NgModule,
args: [{
imports: [
DxPieChartComponent,
DxoAdaptiveLayoutModule,
DxoAnimationModule,
DxiAnnotationModule,
DxoBorderModule,
DxoFontModule,
DxoImageModule,
DxoShadowModule,
DxoCommonAnnotationSettingsModule,
DxoCommonSeriesSettingsModule,
DxoColorModule,
DxoHoverStyleModule,
DxoHatchingModule,
DxoLabelModule,
DxoArgumentFormatModule,
DxoConnectorModule,
DxoFormatModule,
DxoSelectionStyleModule,
DxoSmallValuesGroupingModule,
DxoExportModule,
DxoLegendModule,
DxoMarginModule,
DxoTitleModule,
DxoSubtitleModule,
DxoLoadingIndicatorModule,
DxiSeriesModule,
DxoSeriesTemplateModule,
DxoSizeModule,
DxoTooltipModule,
DxoPieChartAdaptiveLayoutModule,
DxoPieChartAnimationModule,
DxiPieChartAnnotationModule,
DxoPieChartAnnotationBorderModule,
DxoPieChartArgumentFormatModule,
DxoPieChartBorderModule,
DxoPieChartColorModule,
DxoPieChartCommonAnnotationSettingsModule,
DxoPieChartCommonSeriesSettingsModule,
DxoPieChartConnectorModule,
DxoPieChartExportModule,
DxoPieChartFontModule,
DxoPieChartFormatModule,
DxoPieChartHatchingModule,
DxoPieChartHoverStyleModule,
DxoPieChartImageModule,
DxoPieChartLabelModule,
DxoPieChartLegendModule,
DxoPieChartLegendTitleModule,
DxoPieChartLegendTitleSubtitleModule,
DxoPieChartLoadingIndicatorModule,
DxoPieChartMarginModule,
DxoPieChartPieChartTitleModule,
DxoPieChartPieChartTitleSubtitleModule,
DxoPieChartSelectionStyleModule,
DxiPieChartSeriesModule,
DxoPieChartSeriesBorderModule,
DxoPieChartSeriesTemplateModule,
DxoPieChartShadowModule,
DxoPieChartSizeModule,
DxoPieChartSmallValuesGroupingModule,
DxoPieChartSubtitleModule,
DxoPieChartTitleModule,
DxoPieChartTooltipModule,
DxoPieChartTooltipBorderModule,
DxIntegrationModule,
DxTemplateModule
],
exports: [
DxPieChartComponent,
DxoAdaptiveLayoutModule,
DxoAnimationModule,
DxiAnnotationModule,
DxoBorderModule,
DxoFontModule,
DxoImageModule,
DxoShadowModule,
DxoCommonAnnotationSettingsModule,
DxoCommonSeriesSettingsModule,
DxoColorModule,
DxoHoverStyleModule,
DxoHatchingModule,
DxoLabelModule,
DxoArgumentFormatModule,
DxoConnectorModule,
DxoFormatModule,
DxoSelectionStyleModule,
DxoSmallValuesGroupingModule,
DxoExportModule,
DxoLegendModule,
DxoMarginModule,
DxoTitleModule,
DxoSubtitleModule,
DxoLoadingIndicatorModule,
DxiSeriesModule,
DxoSeriesTemplateModule,
DxoSizeModule,
DxoTooltipModule,
DxoPieChartAdaptiveLayoutModule,
DxoPieChartAnimationModule,
DxiPieChartAnnotationModule,
DxoPieChartAnnotationBorderModule,
DxoPieChartArgumentFormatModule,
DxoPieChartBorderModule,
DxoPieChartColorModule,
DxoPieChartCommonAnnotationSettingsModule,
DxoPieChartCommonSeriesSettingsModule,
DxoPieChartConnectorModule,
DxoPieChartExportModule,
DxoPieChartFontModule,
DxoPieChartFormatModule,
DxoPieChartHatchingModule,
DxoPieChartHoverStyleModule,
DxoPieChartImageModule,
DxoPieChartLabelModule,
DxoPieChartLegendModule,
DxoPieChartLegendTitleModule,
DxoPieChartLegendTitleSubtitleModule,
DxoPieChartLoadingIndicatorModule,
DxoPieChartMarginModule,
DxoPieChartPieChartTitleModule,
DxoPieChartPieChartTitleSubtitleModule,
DxoPieChartSelectionStyleModule,
DxiPieChartSeriesModule,
DxoPieChartSeriesBorderModule,
DxoPieChartSeriesTemplateModule,
DxoPieChartShadowModule,
DxoPieChartSizeModule,
DxoPieChartSmallValuesGroupingModule,
DxoPieChartSubtitleModule,
DxoPieChartTitleModule,
DxoPieChartTooltipModule,
DxoPieChartTooltipBorderModule,
DxTemplateModule
]
}]
}] });
export * from 'devextreme-angular/ui/pie-chart/nested';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kaXN0L3VpL3BpZS1jaGFydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILG9DQUFvQztBQUdwQyxPQUFPLEVBQ0gsYUFBYSxFQUNiLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLEVBQ1gsTUFBTSxFQUVOLEtBQUssRUFDTCxNQUFNLEVBRU4sWUFBWSxFQUlaLGVBQWUsRUFDZixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFXdkIsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUM7QUFHbEQsT0FBTyxFQUNILFdBQVcsRUFDWCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGFBQWEsR0FFaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FB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d0JBQy9CLHVCQUF1Qjt3QkFDdkIscUJBQXFCO3dCQUNyQixvQ0FBb0M7d0JBQ3BDLHlCQUF5Qjt3QkFDekIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLDhCQUE4Qjt3QkFDOUIsZ0JBQWdCO3FCQUNqQjtpQkFDRjs7QUFHRCxjQUFjLHdDQUF3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBkZXZleHRyZW1lLWFuZ3VsYXJcbiAqIFZlcnNpb246IDI1LjIuM1xuICogQnVpbGQgZGF0ZTogRnJpIERlYyAxMiAyMDI1XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIC0gMjAyNSBEZXZlbG9wZXIgRXhwcmVzcyBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRURcbiAqXG4gKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zXG4gKiBvZiB0aGUgTUlUIGxpY2Vuc2UuIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBwcm9qZWN0IGZvciBkZXRhaWxzLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL2RldmV4dHJlbWUtYW5ndWxhclxuICovXG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xyXG5cclxuXHJcbmltcG9ydCB7XHJcbiAgICBUcmFuc2ZlclN0YXRlLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgTmdNb2R1bGUsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgTmdab25lLFxyXG4gICAgUExBVEZPUk1fSUQsXHJcbiAgICBJbmplY3QsXHJcblxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBEb0NoZWNrLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIFF1ZXJ5TGlzdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuXHJcbmltcG9ydCBEYXRhU291cmNlIGZyb20gJ2RldmV4dHJlbWUvZGF0YS9kYXRhX3NvdXJjZSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkVhc2VNb2RlLCBDaGFydHNEYXRhVHlwZSwgRGFzaFN0eWxlLCBDaGFydHNDb2xvciwgSGF0Y2hEaXJlY3Rpb24sIEZvbnQsIExhYmVsUG9zaXRpb24sIFRleHRPdmVyZmxvdywgV29yZFdyYXAsIFNlcmllc0xhYmVsLCBTZXJpZXNQb2ludCwgUGFsZXR0ZSwgUGFsZXR0ZUV4dGVuc2lvbk1vZGUsIFNoaWZ0TGFiZWxPdmVybGFwLCBUaGVtZSB9IGZyb20gJ2RldmV4dHJlbWUvY29tbW9uL2NoYXJ0cyc7XHJcbmltcG9ydCB7IGR4UGllQ2hhcnRBbm5vdGF0aW9uQ29uZmlnLCBkeFBpZUNoYXJ0Q29tbW9uQW5ub3RhdGlvbkNvbmZpZywgUGllQ2hhcnRTZXJpZXNJbnRlcmFjdGlvbk1vZGUsIFNtYWxsVmFsdWVzR3JvdXBpbmdNb2RlLCBQaWVDaGFydExlZ2VuZEl0ZW0sIFBpZUNoYXJ0TGVnZW5kSG92ZXJNb2RlLCBEaXNwb3NpbmdFdmVudCwgRG9uZUV2ZW50LCBEcmF3bkV2ZW50LCBFeHBvcnRlZEV2ZW50LCBFeHBvcnRpbmdFdmVudCwgRmlsZVNhdmluZ0V2ZW50LCBJbmNpZGVudE9jY3VycmVkRXZlbnQsIEluaXRpYWxpemVkRXZlbnQsIExlZ2VuZENsaWNrRXZlbnQsIE9wdGlvbkNoYW5nZWRFdmVudCwgUG9pbnRDbGlja0V2ZW50LCBQb2ludEhvdmVyQ2hhbmdlZEV2ZW50LCBQb2ludFNlbGVjdGlvbkNoYW5nZWRFdmVudCwgVG9vbHRpcEhpZGRlbkV2ZW50LCBUb29sdGlwU2hvd25FdmVudCwgUGllQ2hhcnRTZWdtZW50RGlyZWN0aW9uLCBQaWVDaGFydFNlcmllcywgZHhQaWVDaGFydFBvaW50SW5mbywgUGllQ2hhcnRUeXBlIH0gZnJvbSAnZGV2ZXh0cmVtZS92aXovcGllX2NoYXJ0JztcclxuaW1wb3J0IHsgRm9ybWF0IH0gZnJvbSAnZGV2ZXh0cmVtZS9jb21tb24vY29yZS9sb2NhbGl6YXRpb24nO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJ2RldmV4dHJlbWUvZGF0YS9kYXRhX3NvdXJjZSc7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL3N0b3JlJztcclxuaW1wb3J0IHsgRXhwb3J0Rm9ybWF0LCBIb3Jpem9udGFsQWxpZ25tZW50LCBQb3NpdGlvbiwgT3JpZW50YXRpb24sIFZlcnRpY2FsRWRnZSwgU2luZ2xlT3JNdWx0aXBsZSB9IGZyb20gJ2RldmV4dHJlbWUvY29tbW9uJztcclxuXHJcbmltcG9ydCBEeFBpZUNoYXJ0IGZyb20gJ2RldmV4dHJlbWUvdml6L3BpZV9jaGFydCc7XHJcblxyXG5cclxuaW1wb3J0IHtcclxuICAgIER4Q29tcG9uZW50LFxyXG4gICAgRHhUZW1wbGF0ZUhvc3QsXHJcbiAgICBEeEludGVncmF0aW9uTW9kdWxlLFxyXG4gICAgRHhUZW1wbGF0ZU1vZHVsZSxcclxuICAgIE5lc3RlZE9wdGlvbkhvc3QsXHJcbiAgICBJdGVyYWJsZURpZmZlckhlbHBlcixcclxuICAgIFdhdGNoZXJIZWxwZXIsXHJcbiAgICBDb2xsZWN0aW9uTmVzdGVkT3B0aW9uLFxyXG59IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IER4b0FkYXB0aXZlTGF5b3V0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0FuaW1hdGlvbk1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlBbm5vdGF0aW9uTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0JvcmRlck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Gb250TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0ltYWdlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1NoYWRvd01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Db21tb25Bbm5vdGF0aW9uU2V0dGluZ3NNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvQ29tbW9uU2VyaWVzU2V0dGluZ3NNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvQ29sb3JNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvSG92ZXJTdHlsZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9IYXRjaGluZ01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9MYWJlbE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Bcmd1bWVudEZvcm1hdE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Db25uZWN0b3JNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRm9ybWF0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1NlbGVjdGlvblN0eWxlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1NtYWxsVmFsdWVzR3JvdXBpbmdNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRXhwb3J0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0xlZ2VuZE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9NYXJnaW5Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvVGl0bGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvU3VidGl0bGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvTG9hZGluZ0luZGljYXRvck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlTZXJpZXNNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvU2VyaWVzVGVtcGxhdGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvU2l6ZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Ub29sdGlwTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcblxyXG5pbXBvcnQgeyBEeG9QaWVDaGFydEFkYXB0aXZlTGF5b3V0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydEFuaW1hdGlvbk1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpUGllQ2hhcnRBbm5vdGF0aW9uTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydEFubm90YXRpb25Cb3JkZXJNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0QXJndW1lbnRGb3JtYXRNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0Qm9yZGVyTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydENvbG9yTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydENvbW1vbkFubm90YXRpb25TZXR0aW5nc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRDb21tb25TZXJpZXNTZXR0aW5nc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRDb25uZWN0b3JNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0RXhwb3J0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydEZvbnRNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0Rm9ybWF0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydEhhdGNoaW5nTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydEhvdmVyU3R5bGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0SW1hZ2VNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0TGFiZWxNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0TGVnZW5kTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydExlZ2VuZFRpdGxlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydExlZ2VuZFRpdGxlU3VidGl0bGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0TG9hZGluZ0luZGljYXRvck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRNYXJnaW5Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0UGllQ2hhcnRUaXRsZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRQaWVDaGFydFRpdGxlU3VidGl0bGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0U2VsZWN0aW9uU3R5bGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4aVBpZUNoYXJ0U2VyaWVzTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydFNlcmllc0JvcmRlck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRTZXJpZXNUZW1wbGF0ZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRTaGFkb3dNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0U2l6ZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvUGllQ2hhcnRTbWFsbFZhbHVlc0dyb3VwaW5nTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydFN1YnRpdGxlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydFRpdGxlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3BpZS1jaGFydC9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9QaWVDaGFydFRvb2x0aXBNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BpZUNoYXJ0VG9vbHRpcEJvcmRlck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQvbmVzdGVkJztcclxuaW1wb3J0IHsgXHJcbiAgICAgICAgICAgUFJPUEVSVFlfVE9LRU5fYW5ub3RhdGlvbnMsXHJcbiAgICAgICAgICAgUFJPUEVSVFlfVE9LRU5fc2VyaWVzLFxyXG4gICAgIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL2NvcmUvdG9rZW5zJztcclxuXHJcblxyXG4vKipcclxuICogW2Rlc2NyOmR4UGllQ2hhcnRdXHJcblxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2R4LXBpZS1jaGFydCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG4gICAgc3R5bGVzOiBbICcgOmhvc3QgeyAgZGlzcGxheTogYmxvY2s7IH0nXSxcclxuICAgIGhvc3Q6IHsgbmdTa2lwSHlkcmF0aW9uOiAndHJ1ZScgfSxcclxuICAgIGltcG9ydHM6IFsgRHhJbnRlZ3JhdGlvbk1vZHVsZSBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgRHhUZW1wbGF0ZUhvc3QsXHJcbiAgICAgICAgV2F0Y2hlckhlbHBlcixcclxuICAgICAgICBOZXN0ZWRPcHRpb25Ib3N0LFxyXG4gICAgICAgIEl0ZXJhYmxlRGlmZmVySGVscGVyXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeFBpZUNoYXJ0Q29tcG9uZW50IGV4dGVuZHMgRHhDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgRG9DaGVjayB7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihQUk9QRVJUWV9UT0tFTl9hbm5vdGF0aW9ucylcclxuICAgIHNldCBfYW5ub3RhdGlvbnNDb250ZW50Q2hpbGRyZW4odmFsdWU6IFF1ZXJ5TGlzdDxDb2xsZWN0aW9uTmVzdGVkT3B0aW9uPikge1xyXG4gICAgICAgIHRoaXMuc2V0Q2hpbGRyZW4oJ2Fubm90YXRpb25zJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oUFJPUEVSVFlfVE9LRU5fc2VyaWVzKVxyXG4gICAgc2V0IF9zZXJpZXNDb250ZW50Q2hpbGRyZW4odmFsdWU6IFF1ZXJ5TGlzdDxDb2xsZWN0aW9uTmVzdGVkT3B0aW9uPikge1xyXG4gICAgICAgIHRoaXMuc2V0Q2hpbGRyZW4oJ3NlcmllcycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW5jZTogRHhQaWVDaGFydCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMuYWRhcHRpdmVMYXlvdXRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBhZGFwdGl2ZUxheW91dCgpOiB7IGhlaWdodD86IG51bWJlciwga2VlcExhYmVscz86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2FkYXB0aXZlTGF5b3V0Jyk7XHJcbiAgICB9XHJcbiAgICBzZXQgYWRhcHRpdmVMYXlvdXQodmFsdWU6IHsgaGVpZ2h0PzogbnVtYmVyLCBrZWVwTGFiZWxzPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignYWRhcHRpdmVMYXlvdXQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VDaGFydE9wdGlvbnMuYW5pbWF0aW9uXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgYW5pbWF0aW9uKCk6IGJvb2xlYW4gfCB7IGR1cmF0aW9uPzogbnVtYmVyLCBlYXNpbmc/OiBBbmltYXRpb25FYXNlTW9kZSwgZW5hYmxlZD86IGJvb2xlYW4sIG1heFBvaW50Q291bnRTdXBwb3J0ZWQ/OiBudW1iZXIgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignYW5pbWF0aW9uJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgYW5pbWF0aW9uKHZhbHVlOiBib29sZWFuIHwgeyBkdXJhdGlvbj86IG51bWJlciwgZWFzaW5nPzogQW5pbWF0aW9uRWFzZU1vZGUsIGVuYWJsZWQ/OiBib29sZWFuLCBtYXhQb2ludENvdW50U3VwcG9ydGVkPzogbnVtYmVyIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2FuaW1hdGlvbicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMuYW5ub3RhdGlvbnNdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBhbm5vdGF0aW9ucygpOiBBcnJheTxhbnkgfCBkeFBpZUNoYXJ0QW5ub3RhdGlvbkNvbmZpZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2Fubm90YXRpb25zJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgYW5ub3RhdGlvbnModmFsdWU6IEFycmF5PGFueSB8IGR4UGllQ2hhcnRBbm5vdGF0aW9uQ29uZmlnPikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignYW5ub3RhdGlvbnMnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLmNlbnRlclRlbXBsYXRlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY2VudGVyVGVtcGxhdGUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdjZW50ZXJUZW1wbGF0ZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IGNlbnRlclRlbXBsYXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2NlbnRlclRlbXBsYXRlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5jb21tb25Bbm5vdGF0aW9uU2V0dGluZ3NdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjb21tb25Bbm5vdGF0aW9uU2V0dGluZ3MoKTogZHhQaWVDaGFydENvbW1vbkFubm90YXRpb25Db25maWcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2NvbW1vbkFubm90YXRpb25TZXR0aW5ncycpO1xyXG4gICAgfVxyXG4gICAgc2V0IGNvbW1vbkFubm90YXRpb25TZXR0aW5ncyh2YWx1ZTogZHhQaWVDaGFydENvbW1vbkFubm90YXRpb25Db25maWcpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2NvbW1vbkFubm90YXRpb25TZXR0aW5ncycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMuY29tbW9uU2VyaWVzU2V0dGluZ3NdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjb21tb25TZXJpZXNTZXR0aW5ncygpOiBhbnkgfCB7IGFyZ3VtZW50RmllbGQ/OiBzdHJpbmcsIGFyZ3VtZW50VHlwZT86IENoYXJ0c0RhdGFUeXBlIHwgdW5kZWZpbmVkLCBib3JkZXI/OiB7IGNvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXNoU3R5bGU/OiBEYXNoU3R5bGUgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjb2xvcj86IENoYXJ0c0NvbG9yIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBob3Zlck1vZGU/OiBQaWVDaGFydFNlcmllc0ludGVyYWN0aW9uTW9kZSwgaG92ZXJTdHlsZT86IHsgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgZGFzaFN0eWxlPzogRGFzaFN0eWxlIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sb3I/OiBDaGFydHNDb2xvciB8IHN0cmluZyB8IHVuZGVmaW5lZCwgaGF0Y2hpbmc/OiB7IGRpcmVjdGlvbj86IEhhdGNoRGlyZWN0aW9uLCBvcGFjaXR5PzogbnVtYmVyLCBzdGVwPzogbnVtYmVyLCB3aWR0aD86IG51bWJlciB9LCBoaWdobGlnaHQ/OiBib29sZWFuIH0sIGxhYmVsPzogeyBhcmd1bWVudEZvcm1hdD86IEZvcm1hdCB8IHVuZGVmaW5lZCwgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkLCBib3JkZXI/OiB7IGNvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXNoU3R5bGU/OiBEYXNoU3R5bGUgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjb25uZWN0b3I/OiB7IGNvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY3VzdG9taXplVGV4dD86ICgocG9pbnRJbmZvOiBhbnkpID0+IHN0cmluZyksIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvbnQ/OiBGb250LCBmb3JtYXQ/OiBGb3JtYXQgfCB1bmRlZmluZWQsIHBvc2l0aW9uPzogTGFiZWxQb3NpdGlvbiwgcmFkaWFsT2Zmc2V0PzogbnVtYmVyLCByb3RhdGlvbkFuZ2xlPzogbnVtYmVyLCB0ZXh0T3ZlcmZsb3c/OiBUZXh0T3ZlcmZsb3csIHZpc2libGU/OiBib29sZWFuLCB3b3JkV3JhcD86IFdvcmRXcmFwIH0sIG1heExhYmVsQ291bnQ/OiBudW1iZXIgfCB1bmRlZmluZWQsIG1pblNlZ21lbnRTaXplPzogbnVtYmVyIHwgdW5kZWZpbmVkLCBzZWxlY3Rpb25Nb2RlPzogUGllQ2hhcnRTZXJpZXNJbnRlcmFjdGlvbk1vZGUsIHNlbGVjdGlvblN0eWxlPzogeyBib3JkZXI/OiB7IGNvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXNoU3R5bGU/OiBEYXNoU3R5bGUgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjb2xvcj86IENoYXJ0c0NvbG9yIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBoYXRjaGluZz86IHsgZGlyZWN0aW9uPzogSGF0Y2hEaXJlY3Rpb24sIG9wYWNpdHk/OiBudW1iZXIsIHN0ZXA/OiBudW1iZXIsIHdpZHRoPzogbnVtYmVyIH0sIGhpZ2hsaWdodD86IGJvb2xlYW4gfSwgc21hbGxWYWx1ZXNHcm91cGluZz86IHsgZ3JvdXBOYW1lPzogc3RyaW5nLCBtb2RlPzogU21hbGxWYWx1ZXNHcm91cGluZ01vZGUsIHRocmVzaG9sZD86IG51bWJlciB8IHVuZGVmaW5lZCwgdG9wQ291bnQ/OiBudW1iZXIgfCB1bmRlZmluZWQgfSwgdGFnRmllbGQ/OiBzdHJpbmcsIHZhbHVlRmllbGQ/OiBzdHJpbmcgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignY29tbW9uU2VyaWVzU2V0dGluZ3MnKTtcclxuICAgIH1cclxuICAgIHNldCBjb21tb25TZXJpZXNTZXR0aW5ncyh2YWx1ZTogYW55IHwgeyBhcmd1bWVudEZpZWxkPzogc3RyaW5nLCBhcmd1bWVudFR5cGU/OiBDaGFydHNEYXRhVHlwZSB8IHVuZGVmaW5lZCwgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgZGFzaFN0eWxlPzogRGFzaFN0eWxlIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sb3I/OiBDaGFydHNDb2xvciB8IHN0cmluZyB8IHVuZGVmaW5lZCwgaG92ZXJNb2RlPzogUGllQ2hhcnRTZXJpZXNJbnRlcmFjdGlvbk1vZGUsIGhvdmVyU3R5bGU/OiB7IGJvcmRlcj86IHsgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGRhc2hTdHlsZT86IERhc2hTdHlsZSB8IHVuZGVmaW5lZCwgdmlzaWJsZT86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0sIGNvbG9yPzogQ2hhcnRzQ29sb3IgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGhhdGNoaW5nPzogeyBkaXJlY3Rpb24/OiBIYXRjaERpcmVjdGlvbiwgb3BhY2l0eT86IG51bWJlciwgc3RlcD86IG51bWJlciwgd2lkdGg/OiBudW1iZXIgfSwgaGlnaGxpZ2h0PzogYm9vbGVhbiB9LCBsYWJlbD86IHsgYXJndW1lbnRGb3JtYXQ/OiBGb3JtYXQgfCB1bmRlZmluZWQsIGJhY2tncm91bmRDb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgZGFzaFN0eWxlPzogRGFzaFN0eWxlIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29ubmVjdG9yPzogeyBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgdmlzaWJsZT86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0sIGN1c3RvbWl6ZVRleHQ/OiAoKHBvaW50SW5mbzogYW55KSA9PiBzdHJpbmcpLCBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb250PzogRm9udCwgZm9ybWF0PzogRm9ybWF0IHwgdW5kZWZpbmVkLCBwb3NpdGlvbj86IExhYmVsUG9zaXRpb24sIHJhZGlhbE9mZnNldD86IG51bWJlciwgcm90YXRpb25BbmdsZT86IG51bWJlciwgdGV4dE92ZXJmbG93PzogVGV4dE92ZXJmbG93LCB2aXNpYmxlPzogYm9vbGVhbiwgd29yZFdyYXA/OiBXb3JkV3JhcCB9LCBtYXhMYWJlbENvdW50PzogbnVtYmVyIHwgdW5kZWZpbmVkLCBtaW5TZWdtZW50U2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZCwgc2VsZWN0aW9uTW9kZT86IFBpZUNoYXJ0U2VyaWVzSW50ZXJhY3Rpb25Nb2RlLCBzZWxlY3Rpb25TdHlsZT86IHsgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgZGFzaFN0eWxlPzogRGFzaFN0eWxlIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sb3I/OiBDaGFydHNDb2xvciB8IHN0cmluZyB8IHVuZGVmaW5lZCwgaGF0Y2hpbmc/OiB7IGRpcmVjdGlvbj86IEhhdGNoRGlyZWN0aW9uLCBvcGFjaXR5PzogbnVtYmVyLCBzdGVwPzogbnVtYmVyLCB3aWR0aD86IG51bWJlciB9LCBoaWdobGlnaHQ/OiBib29sZWFuIH0sIHNtYWxsVmFsdWVzR3JvdXBpbmc/OiB7IGdyb3VwTmFtZT86IHN0cmluZywgbW9kZT86IFNtYWxsVmFsdWVzR3JvdXBpbmdNb2RlLCB0aHJlc2hvbGQ/OiBudW1iZXIgfCB1bmRlZmluZWQsIHRvcENvdW50PzogbnVtYmVyIHwgdW5kZWZpbmVkIH0sIHRhZ0ZpZWxkPzogc3RyaW5nLCB2YWx1ZUZpZWxkPzogc3RyaW5nIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2NvbW1vblNlcmllc1NldHRpbmdzJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5jdXN0b21pemVBbm5vdGF0aW9uXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY3VzdG9taXplQW5ub3RhdGlvbigpOiAoKGFubm90YXRpb246IGR4UGllQ2hhcnRBbm5vdGF0aW9uQ29uZmlnIHwgYW55KSA9PiBkeFBpZUNoYXJ0QW5ub3RhdGlvbkNvbmZpZykgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2N1c3RvbWl6ZUFubm90YXRpb24nKTtcclxuICAgIH1cclxuICAgIHNldCBjdXN0b21pemVBbm5vdGF0aW9uKHZhbHVlOiAoKGFubm90YXRpb246IGR4UGllQ2hhcnRBbm5vdGF0aW9uQ29uZmlnIHwgYW55KSA9PiBkeFBpZUNoYXJ0QW5ub3RhdGlvbkNvbmZpZykgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2N1c3RvbWl6ZUFubm90YXRpb24nLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VDaGFydE9wdGlvbnMuY3VzdG9taXplTGFiZWxdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjdXN0b21pemVMYWJlbCgpOiAoKHBvaW50SW5mbzogYW55KSA9PiBTZXJpZXNMYWJlbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2N1c3RvbWl6ZUxhYmVsJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3VzdG9taXplTGFiZWwodmFsdWU6ICgocG9pbnRJbmZvOiBhbnkpID0+IFNlcmllc0xhYmVsKSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY3VzdG9taXplTGFiZWwnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VDaGFydE9wdGlvbnMuY3VzdG9taXplUG9pbnRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjdXN0b21pemVQb2ludCgpOiAoKHBvaW50SW5mbzogYW55KSA9PiBTZXJpZXNQb2ludCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2N1c3RvbWl6ZVBvaW50Jyk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3VzdG9taXplUG9pbnQodmFsdWU6ICgocG9pbnRJbmZvOiBhbnkpID0+IFNlcmllc1BvaW50KSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY3VzdG9taXplUG9pbnQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VDaGFydE9wdGlvbnMuZGF0YVNvdXJjZV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGRhdGFTb3VyY2UoKTogQXJyYXk8YW55PiB8IERhdGFTb3VyY2UgfCBEYXRhU291cmNlT3B0aW9ucyB8IG51bGwgfCBTdG9yZSB8IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignZGF0YVNvdXJjZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEFycmF5PGFueT4gfCBEYXRhU291cmNlIHwgRGF0YVNvdXJjZU9wdGlvbnMgfCBudWxsIHwgU3RvcmUgfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2RhdGFTb3VyY2UnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLmRpYW1ldGVyXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGlhbWV0ZXIoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdkaWFtZXRlcicpO1xyXG4gICAgfVxyXG4gICAgc2V0IGRpYW1ldGVyKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2RpYW1ldGVyJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpCYXNlV2lkZ2V0T3B0aW9ucy5kaXNhYmxlZF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2Rpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2Rpc2FibGVkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpET01Db21wb25lbnRPcHRpb25zLmVsZW1lbnRBdHRyXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZWxlbWVudEF0dHIoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignZWxlbWVudEF0dHInKTtcclxuICAgIH1cclxuICAgIHNldCBlbGVtZW50QXR0cih2YWx1ZTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignZWxlbWVudEF0dHInLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VXaWRnZXRPcHRpb25zLmV4cG9ydF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGV4cG9ydCgpOiB7IGJhY2tncm91bmRDb2xvcj86IHN0cmluZywgZW5hYmxlZD86IGJvb2xlYW4sIGZpbGVOYW1lPzogc3RyaW5nLCBmb3JtYXRzPzogQXJyYXk8RXhwb3J0Rm9ybWF0PiwgbWFyZ2luPzogbnVtYmVyLCBwcmludGluZ0VuYWJsZWQ/OiBib29sZWFuLCBzdmdUb0NhbnZhcz86ICgoc3ZnOiBhbnksIGNhbnZhczogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2V4cG9ydCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4cG9ydCh2YWx1ZTogeyBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcsIGVuYWJsZWQ/OiBib29sZWFuLCBmaWxlTmFtZT86IHN0cmluZywgZm9ybWF0cz86IEFycmF5PEV4cG9ydEZvcm1hdD4sIG1hcmdpbj86IG51bWJlciwgcHJpbnRpbmdFbmFibGVkPzogYm9vbGVhbiwgc3ZnVG9DYW52YXM/OiAoKHN2ZzogYW55LCBjYW52YXM6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdleHBvcnQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLmlubmVyUmFkaXVzXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgaW5uZXJSYWRpdXMoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdpbm5lclJhZGl1cycpO1xyXG4gICAgfVxyXG4gICAgc2V0IGlubmVyUmFkaXVzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2lubmVyUmFkaXVzJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5sZWdlbmRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBsZWdlbmQoKTogeyBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvcmRlcj86IHsgY29sb3I/OiBzdHJpbmcsIGNvcm5lclJhZGl1cz86IG51bWJlciwgZGFzaFN0eWxlPzogRGFzaFN0eWxlLCBvcGFjaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sdW1uQ291bnQ/OiBudW1iZXIsIGNvbHVtbkl0ZW1TcGFjaW5nPzogbnVtYmVyLCBjdXN0b21pemVIaW50PzogKChwb2ludEluZm86IHsgcG9pbnRDb2xvcjogc3RyaW5nLCBwb2ludEluZGV4OiBudW1iZXIsIHBvaW50TmFtZTogYW55IH0pID0+IHN0cmluZyksIGN1c3RvbWl6ZUl0ZW1zPzogKChpdGVtczogQXJyYXk8UGllQ2hhcnRMZWdlbmRJdGVtPikgPT4gQXJyYXk8UGllQ2hhcnRMZWdlbmRJdGVtPiksIGN1c3RvbWl6ZVRleHQ/OiAoKHBvaW50SW5mbzogeyBwb2ludENvbG9yOiBzdHJpbmcsIHBvaW50SW5kZXg6IG51bWJlciwgcG9pbnROYW1lOiBhbnkgfSkgPT4gc3RyaW5nKSwgZm9udD86IEZvbnQsIGhvcml6b250YWxBbGlnbm1lbnQ/OiBIb3Jpem9udGFsQWxpZ25tZW50LCBob3Zlck1vZGU/OiBQaWVDaGFydExlZ2VuZEhvdmVyTW9kZSwgaXRlbXNBbGlnbm1lbnQ/OiBIb3Jpem9udGFsQWxpZ25tZW50IHwgdW5kZWZpbmVkLCBpdGVtVGV4dFBvc2l0aW9uPzogUG9zaXRpb24gfCB1bmRlZmluZWQsIG1hcmdpbj86IG51bWJlciB8IHsgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciwgdG9wPzogbnVtYmVyIH0sIG1hcmtlclNpemU/OiBudW1iZXIsIG1hcmtlclRlbXBsYXRlPzogYW55LCBvcmllbnRhdGlvbj86IE9yaWVudGF0aW9uIHwgdW5kZWZpbmVkLCBwYWRkaW5nTGVmdFJpZ2h0PzogbnVtYmVyLCBwYWRkaW5nVG9wQm90dG9tPzogbnVtYmVyLCByb3dDb3VudD86IG51bWJlciwgcm93SXRlbVNwYWNpbmc/OiBudW1iZXIsIHRpdGxlPzogc3RyaW5nIHwgeyBmb250PzogRm9udCwgaG9yaXpvbnRhbEFsaWdubWVudD86IEhvcml6b250YWxBbGlnbm1lbnQgfCB1bmRlZmluZWQsIG1hcmdpbj86IHsgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciwgdG9wPzogbnVtYmVyIH0sIHBsYWNlaG9sZGVyU2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZCwgc3VidGl0bGU/OiBzdHJpbmcgfCB7IGZvbnQ/OiBGb250LCBvZmZzZXQ/OiBudW1iZXIsIHRleHQ/OiBzdHJpbmcgfSwgdGV4dD86IHN0cmluZywgdmVydGljYWxBbGlnbm1lbnQ/OiBWZXJ0aWNhbEVkZ2UgfSwgdmVydGljYWxBbGlnbm1lbnQ/OiBWZXJ0aWNhbEVkZ2UsIHZpc2libGU/OiBib29sZWFuIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2xlZ2VuZCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGxlZ2VuZCh2YWx1ZTogeyBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvcmRlcj86IHsgY29sb3I/OiBzdHJpbmcsIGNvcm5lclJhZGl1cz86IG51bWJlciwgZGFzaFN0eWxlPzogRGFzaFN0eWxlLCBvcGFjaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sdW1uQ291bnQ/OiBudW1iZXIsIGNvbHVtbkl0ZW1TcGFjaW5nPzogbnVtYmVyLCBjdXN0b21pemVIaW50PzogKChwb2ludEluZm86IHsgcG9pbnRDb2xvcjogc3RyaW5nLCBwb2ludEluZGV4OiBudW1iZXIsIHBvaW50TmFtZTogYW55IH0pID0+IHN0cmluZyksIGN1c3RvbWl6ZUl0ZW1zPzogKChpdGVtczogQXJyYXk8UGllQ2hhcnRMZWdlbmRJdGVtPikgPT4gQXJyYXk8UGllQ2hhcnRMZWdlbmRJdGVtPiksIGN1c3RvbWl6ZVRleHQ/OiAoKHBvaW50SW5mbzogeyBwb2ludENvbG9yOiBzdHJpbmcsIHBvaW50SW5kZXg6IG51bWJlciwgcG9pbnROYW1lOiBhbnkgfSkgPT4gc3RyaW5nKSwgZm9udD86IEZvbnQsIGhvcml6b250YWxBbGlnbm1lbnQ/OiBIb3Jpem9udGFsQWxpZ25tZW50LCBob3Zlck1vZGU/OiBQaWVDaGFydExlZ2VuZEhvdmVyTW9kZSwgaXRlbXNBbGlnbm1lbnQ/OiBIb3Jpem9udGFsQWxpZ25tZW50IHwgdW5kZWZpbmVkLCBpdGVtVGV4dFBvc2l0aW9uPzogUG9zaXRpb24gfCB1bmRlZmluZWQsIG1hcmdpbj86IG51bWJlciB8IHsgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciwgdG9wPzogbnVtYmVyIH0sIG1hcmtlclNpemU/OiBudW1iZXIsIG1hcmtlclRlbXBsYXRlPzogYW55LCBvcmllbnRhdGlvbj86IE9yaWVudGF0aW9uIHwgdW5kZWZpbmVkLCBwYWRkaW5nTGVmdFJpZ2h0PzogbnVtYmVyLCBwYWRkaW5nVG9wQm90dG9tPzogbnVtYmVyLCByb3dDb3VudD86IG51bWJlciwgcm93SXRlbVNwYWNpbmc/OiBudW1iZXIsIHRpdGxlPzogc3RyaW5nIHwgeyBmb250PzogRm9udCwgaG9yaXpvbnRhbEFsaWdubWVudD86IEhvcml6b250YWxBbGlnbm1lbnQgfCB1bmRlZmluZWQsIG1hcmdpbj86IHsgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciwgdG9wPzogbnVtYmVyIH0sIHBsYWNlaG9sZGVyU2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZCwgc3VidGl0bGU/OiBzdHJpbmcgfCB7IGZvbnQ/OiBGb250LCBvZmZzZXQ/OiBudW1iZXIsIHRleHQ/OiBzdHJpbmcgfSwgdGV4dD86IHN0cmluZywgdmVydGljYWxBbGlnbm1lbnQ/OiBWZXJ0aWNhbEVkZ2UgfSwgdmVydGljYWxBbGlnbm1lbnQ/OiBWZXJ0aWNhbEVkZ2UsIHZpc2libGU/OiBib29sZWFuIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2xlZ2VuZCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6QmFzZVdpZGdldE9wdGlvbnMubG9hZGluZ0luZGljYXRvcl1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGxvYWRpbmdJbmRpY2F0b3IoKTogeyBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcsIGVuYWJsZWQ/OiBib29sZWFuLCBmb250PzogRm9udCwgc2hvdz86IGJvb2xlYW4sIHRleHQ/OiBzdHJpbmcgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignbG9hZGluZ0luZGljYXRvcicpO1xyXG4gICAgfVxyXG4gICAgc2V0IGxvYWRpbmdJbmRpY2F0b3IodmFsdWU6IHsgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nLCBlbmFibGVkPzogYm9vbGVhbiwgZm9udD86IEZvbnQsIHNob3c/OiBib29sZWFuLCB0ZXh0Pzogc3RyaW5nIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2xvYWRpbmdJbmRpY2F0b3InLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VXaWRnZXRPcHRpb25zLm1hcmdpbl1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1hcmdpbigpOiB7IGJvdHRvbT86IG51bWJlciwgbGVmdD86IG51bWJlciwgcmlnaHQ/OiBudW1iZXIsIHRvcD86IG51bWJlciB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdtYXJnaW4nKTtcclxuICAgIH1cclxuICAgIHNldCBtYXJnaW4odmFsdWU6IHsgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciwgdG9wPzogbnVtYmVyIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ21hcmdpbicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMubWluRGlhbWV0ZXJdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtaW5EaWFtZXRlcigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ21pbkRpYW1ldGVyJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgbWluRGlhbWV0ZXIodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignbWluRGlhbWV0ZXInLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLnBhbGV0dGVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYWxldHRlKCk6IEFycmF5PHN0cmluZz4gfCBQYWxldHRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdwYWxldHRlJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgcGFsZXR0ZSh2YWx1ZTogQXJyYXk8c3RyaW5nPiB8IFBhbGV0dGUpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3BhbGV0dGUnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VDaGFydE9wdGlvbnMucGFsZXR0ZUV4dGVuc2lvbk1vZGVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYWxldHRlRXh0ZW5zaW9uTW9kZSgpOiBQYWxldHRlRXh0ZW5zaW9uTW9kZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigncGFsZXR0ZUV4dGVuc2lvbk1vZGUnKTtcclxuICAgIH1cclxuICAgIHNldCBwYWxldHRlRXh0ZW5zaW9uTW9kZSh2YWx1ZTogUGFsZXR0ZUV4dGVuc2lvbk1vZGUpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3BhbGV0dGVFeHRlbnNpb25Nb2RlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpCYXNlV2lkZ2V0T3B0aW9ucy5wYXRoTW9kaWZpZWRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYXRoTW9kaWZpZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigncGF0aE1vZGlmaWVkJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgcGF0aE1vZGlmaWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdwYXRoTW9kaWZpZWQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VDaGFydE9wdGlvbnMucG9pbnRTZWxlY3Rpb25Nb2RlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgcG9pbnRTZWxlY3Rpb25Nb2RlKCk6IFNpbmdsZU9yTXVsdGlwbGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3BvaW50U2VsZWN0aW9uTW9kZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHBvaW50U2VsZWN0aW9uTW9kZSh2YWx1ZTogU2luZ2xlT3JNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigncG9pbnRTZWxlY3Rpb25Nb2RlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpCYXNlV2lkZ2V0T3B0aW9ucy5yZWRyYXdPblJlc2l6ZV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHJlZHJhd09uUmVzaXplKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3JlZHJhd09uUmVzaXplJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgcmVkcmF3T25SZXNpemUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3JlZHJhd09uUmVzaXplJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5yZXNvbHZlTGFiZWxPdmVybGFwcGluZ11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHJlc29sdmVMYWJlbE92ZXJsYXBwaW5nKCk6IFNoaWZ0TGFiZWxPdmVybGFwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdyZXNvbHZlTGFiZWxPdmVybGFwcGluZycpO1xyXG4gICAgfVxyXG4gICAgc2V0IHJlc29sdmVMYWJlbE92ZXJsYXBwaW5nKHZhbHVlOiBTaGlmdExhYmVsT3ZlcmxhcCkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigncmVzb2x2ZUxhYmVsT3ZlcmxhcHBpbmcnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VXaWRnZXRPcHRpb25zLnJ0bEVuYWJsZWRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBydGxFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3J0bEVuYWJsZWQnKTtcclxuICAgIH1cclxuICAgIHNldCBydGxFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdydGxFbmFibGVkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5zZWdtZW50c0RpcmVjdGlvbl1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNlZ21lbnRzRGlyZWN0aW9uKCk6IFBpZUNoYXJ0U2VnbWVudERpcmVjdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignc2VnbWVudHNEaXJlY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHNldCBzZWdtZW50c0RpcmVjdGlvbih2YWx1ZTogUGllQ2hhcnRTZWdtZW50RGlyZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdzZWdtZW50c0RpcmVjdGlvbicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMuc2VyaWVzXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2VyaWVzKCk6IEFycmF5PFBpZUNoYXJ0U2VyaWVzPiB8IFBpZUNoYXJ0U2VyaWVzIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdzZXJpZXMnKTtcclxuICAgIH1cclxuICAgIHNldCBzZXJpZXModmFsdWU6IEFycmF5PFBpZUNoYXJ0U2VyaWVzPiB8IFBpZUNoYXJ0U2VyaWVzIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdzZXJpZXMnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLnNlcmllc1RlbXBsYXRlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2VyaWVzVGVtcGxhdGUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdzZXJpZXNUZW1wbGF0ZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHNlcmllc1RlbXBsYXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3Nlcmllc1RlbXBsYXRlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpCYXNlV2lkZ2V0T3B0aW9ucy5zaXplXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2l6ZSgpOiB7IGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZCwgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignc2l6ZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHNpemUodmFsdWU6IHsgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkLCB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdzaXplJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5zaXplR3JvdXBdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzaXplR3JvdXAoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdzaXplR3JvdXAnKTtcclxuICAgIH1cclxuICAgIHNldCBzaXplR3JvdXAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignc2l6ZUdyb3VwJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5zdGFydEFuZ2xlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc3RhcnRBbmdsZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3N0YXJ0QW5nbGUnKTtcclxuICAgIH1cclxuICAgIHNldCBzdGFydEFuZ2xlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3N0YXJ0QW5nbGUnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkJhc2VXaWRnZXRPcHRpb25zLnRoZW1lXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdGhlbWUoKTogVGhlbWUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3RoZW1lJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgdGhlbWUodmFsdWU6IFRoZW1lKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd0aGVtZScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6QmFzZVdpZGdldE9wdGlvbnMudGl0bGVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0aXRsZSgpOiBzdHJpbmcgfCB7IGZvbnQ/OiBGb250LCBob3Jpem9udGFsQWxpZ25tZW50PzogSG9yaXpvbnRhbEFsaWdubWVudCwgbWFyZ2luPzogbnVtYmVyIHwgeyBib3R0b20/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCB0b3A/OiBudW1iZXIgfSwgcGxhY2Vob2xkZXJTaXplPzogbnVtYmVyIHwgdW5kZWZpbmVkLCBzdWJ0aXRsZT86IHN0cmluZyB8IHsgZm9udD86IEZvbnQsIG9mZnNldD86IG51bWJlciwgdGV4dD86IHN0cmluZywgdGV4dE92ZXJmbG93PzogVGV4dE92ZXJmbG93LCB3b3JkV3JhcD86IFdvcmRXcmFwIH0sIHRleHQ/OiBzdHJpbmcsIHRleHRPdmVyZmxvdz86IFRleHRPdmVyZmxvdywgdmVydGljYWxBbGlnbm1lbnQ/OiBWZXJ0aWNhbEVkZ2UsIHdvcmRXcmFwPzogV29yZFdyYXAgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigndGl0bGUnKTtcclxuICAgIH1cclxuICAgIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nIHwgeyBmb250PzogRm9udCwgaG9yaXpvbnRhbEFsaWdubWVudD86IEhvcml6b250YWxBbGlnbm1lbnQsIG1hcmdpbj86IG51bWJlciB8IHsgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciwgdG9wPzogbnVtYmVyIH0sIHBsYWNlaG9sZGVyU2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZCwgc3VidGl0bGU/OiBzdHJpbmcgfCB7IGZvbnQ/OiBGb250LCBvZmZzZXQ/OiBudW1iZXIsIHRleHQ/OiBzdHJpbmcsIHRleHRPdmVyZmxvdz86IFRleHRPdmVyZmxvdywgd29yZFdyYXA/OiBXb3JkV3JhcCB9LCB0ZXh0Pzogc3RyaW5nLCB0ZXh0T3ZlcmZsb3c/OiBUZXh0T3ZlcmZsb3csIHZlcnRpY2FsQWxpZ25tZW50PzogVmVydGljYWxFZGdlLCB3b3JkV3JhcD86IFdvcmRXcmFwIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3RpdGxlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy50b29sdGlwXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdG9vbHRpcCgpOiB7IGFyZ3VtZW50Rm9ybWF0PzogRm9ybWF0IHwgdW5kZWZpbmVkLCBhcnJvd0xlbmd0aD86IG51bWJlciwgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZywgZGFzaFN0eWxlPzogRGFzaFN0eWxlLCBvcGFjaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sb3I/OiBzdHJpbmcsIGNvbnRhaW5lcj86IGFueSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udGVudFRlbXBsYXRlPzogYW55LCBjb3JuZXJSYWRpdXM/OiBudW1iZXIsIGN1c3RvbWl6ZVRvb2x0aXA/OiAoKHBvaW50SW5mbzogZHhQaWVDaGFydFBvaW50SW5mbykgPT4gUmVjb3JkPHN0cmluZywgYW55PikgfCB1bmRlZmluZWQsIGVuYWJsZWQ/OiBib29sZWFuLCBmb250PzogRm9udCwgZm9ybWF0PzogRm9ybWF0IHwgdW5kZWZpbmVkLCBpbnRlcmFjdGl2ZT86IGJvb2xlYW4sIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWQsIHBhZGRpbmdMZWZ0UmlnaHQ/OiBudW1iZXIsIHBhZGRpbmdUb3BCb3R0b20/OiBudW1iZXIsIHNoYWRvdz86IHsgYmx1cj86IG51bWJlciwgY29sb3I/OiBzdHJpbmcsIG9mZnNldFg/OiBudW1iZXIsIG9mZnNldFk/OiBudW1iZXIsIG9wYWNpdHk/OiBudW1iZXIgfSwgc2hhcmVkPzogYm9vbGVhbiwgekluZGV4PzogbnVtYmVyIHwgdW5kZWZpbmVkIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3Rvb2x0aXAnKTtcclxuICAgIH1cclxuICAgIHNldCB0b29sdGlwKHZhbHVlOiB7IGFyZ3VtZW50Rm9ybWF0PzogRm9ybWF0IHwgdW5kZWZpbmVkLCBhcnJvd0xlbmd0aD86IG51bWJlciwgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZywgZGFzaFN0eWxlPzogRGFzaFN0eWxlLCBvcGFjaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkLCB2aXNpYmxlPzogYm9vbGVhbiwgd2lkdGg/OiBudW1iZXIgfSwgY29sb3I/OiBzdHJpbmcsIGNvbnRhaW5lcj86IGFueSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udGVudFRlbXBsYXRlPzogYW55LCBjb3JuZXJSYWRpdXM/OiBudW1iZXIsIGN1c3RvbWl6ZVRvb2x0aXA/OiAoKHBvaW50SW5mbzogZHhQaWVDaGFydFBvaW50SW5mbykgPT4gUmVjb3JkPHN0cmluZywgYW55PikgfCB1bmRlZmluZWQsIGVuYWJsZWQ/OiBib29sZWFuLCBmb250PzogRm9udCwgZm9ybWF0PzogRm9ybWF0IHwgdW5kZWZpbmVkLCBpbnRlcmFjdGl2ZT86IGJvb2xlYW4sIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWQsIHBhZGRpbmdMZWZ0UmlnaHQ/OiBudW1iZXIsIHBhZGRpbmdUb3BCb3R0b20/OiBudW1iZXIsIHNoYWRvdz86IHsgYmx1cj86IG51bWJlciwgY29sb3I/OiBzdHJpbmcsIG9mZnNldFg/OiBudW1iZXIsIG9mZnNldFk/OiBudW1iZXIsIG9wYWNpdHk/OiBudW1iZXIgfSwgc2hhcmVkPzogYm9vbGVhbiwgekluZGV4PzogbnVtYmVyIHwgdW5kZWZpbmVkIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3Rvb2x0aXAnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLnR5cGVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0eXBlKCk6IFBpZUNoYXJ0VHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigndHlwZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHR5cGUodmFsdWU6IFBpZUNoYXJ0VHlwZSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigndHlwZScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLm9uRGlzcG9zaW5nXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uRGlzcG9zaW5nOiBFdmVudEVtaXR0ZXI8RGlzcG9zaW5nRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMub25Eb25lXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uRG9uZTogRXZlbnRFbWl0dGVyPERvbmVFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5vbkRyYXduXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uRHJhd246IEV2ZW50RW1pdHRlcjxEcmF3bkV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLm9uRXhwb3J0ZWRdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25FeHBvcnRlZDogRXZlbnRFbWl0dGVyPEV4cG9ydGVkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMub25FeHBvcnRpbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25FeHBvcnRpbmc6IEV2ZW50RW1pdHRlcjxFeHBvcnRpbmdFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5vbkZpbGVTYXZpbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25GaWxlU2F2aW5nOiBFdmVudEVtaXR0ZXI8RmlsZVNhdmluZ0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLm9uSW5jaWRlbnRPY2N1cnJlZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkluY2lkZW50T2NjdXJyZWQ6IEV2ZW50RW1pdHRlcjxJbmNpZGVudE9jY3VycmVkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMub25Jbml0aWFsaXplZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8SW5pdGlhbGl6ZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5vbkxlZ2VuZENsaWNrXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uTGVnZW5kQ2xpY2s6IEV2ZW50RW1pdHRlcjxMZWdlbmRDbGlja0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLm9uT3B0aW9uQ2hhbmdlZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbk9wdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxPcHRpb25DaGFuZ2VkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMub25Qb2ludENsaWNrXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uUG9pbnRDbGljazogRXZlbnRFbWl0dGVyPFBvaW50Q2xpY2tFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5vblBvaW50SG92ZXJDaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uUG9pbnRIb3ZlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQb2ludEhvdmVyQ2hhbmdlZEV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4UGllQ2hhcnRPcHRpb25zLm9uUG9pbnRTZWxlY3Rpb25DaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uUG9pbnRTZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UG9pbnRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhQaWVDaGFydE9wdGlvbnMub25Ub29sdGlwSGlkZGVuXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uVG9vbHRpcEhpZGRlbjogRXZlbnRFbWl0dGVyPFRvb2x0aXBIaWRkZW5FdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeFBpZUNoYXJ0T3B0aW9ucy5vblRvb2x0aXBTaG93bl1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvblRvb2x0aXBTaG93bjogRXZlbnRFbWl0dGVyPFRvb2x0aXBTaG93bkV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgYWRhcHRpdmVMYXlvdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGhlaWdodD86IG51bWJlciwga2VlcExhYmVscz86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBhbmltYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuIHwgeyBkdXJhdGlvbj86IG51bWJlciwgZWFzaW5nPzogQW5pbWF0aW9uRWFzZU1vZGUsIGVuYWJsZWQ/OiBib29sZWFuLCBtYXhQb2ludENvdW50U3VwcG9ydGVkPzogbnVtYmVyIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBhbm5vdGF0aW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueSB8IGR4UGllQ2hhcnRBbm5vdGF0aW9uQ29uZmlnPj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGNlbnRlclRlbXBsYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgY29tbW9uQW5ub3RhdGlvblNldHRpbmdzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8ZHhQaWVDaGFydENvbW1vbkFubm90YXRpb25Db25maWc+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBjb21tb25TZXJpZXNTZXR0aW5nc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueSB8IHsgYXJndW1lbnRGaWVsZD86IHN0cmluZywgYXJndW1lbnRUeXBlPzogQ2hhcnRzRGF0YVR5cGUgfCB1bmRlZmluZWQsIGJvcmRlcj86IHsgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGRhc2hTdHlsZT86IERhc2hTdHlsZSB8IHVuZGVmaW5lZCwgdmlzaWJsZT86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0sIGNvbG9yPzogQ2hhcnRzQ29sb3IgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGhvdmVyTW9kZT86IFBpZUNoYXJ0U2VyaWVzSW50ZXJhY3Rpb25Nb2RlLCBob3ZlclN0eWxlPzogeyBib3JkZXI/OiB7IGNvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXNoU3R5bGU/OiBEYXNoU3R5bGUgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjb2xvcj86IENoYXJ0c0NvbG9yIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBoYXRjaGluZz86IHsgZGlyZWN0aW9uPzogSGF0Y2hEaXJlY3Rpb24sIG9wYWNpdHk/OiBudW1iZXIsIHN0ZXA/OiBudW1iZXIsIHdpZHRoPzogbnVtYmVyIH0sIGhpZ2hsaWdodD86IGJvb2xlYW4gfSwgbGFiZWw/OiB7IGFyZ3VtZW50Rm9ybWF0PzogRm9ybWF0IHwgdW5kZWZpbmVkLCBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvcmRlcj86IHsgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGRhc2hTdHlsZT86IERhc2hTdHlsZSB8IHVuZGVmaW5lZCwgdmlzaWJsZT86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0sIGNvbm5lY3Rvcj86IHsgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjdXN0b21pemVUZXh0PzogKChwb2ludEluZm86IGFueSkgPT4gc3RyaW5nKSwgZGlzcGxheUZvcm1hdD86IHN0cmluZyB8IHVuZGVmaW5lZCwgZm9udD86IEZvbnQsIGZvcm1hdD86IEZvcm1hdCB8IHVuZGVmaW5lZCwgcG9zaXRpb24/OiBMYWJlbFBvc2l0aW9uLCByYWRpYWxPZmZzZXQ/OiBudW1iZXIsIHJvdGF0aW9uQW5nbGU/OiBudW1iZXIsIHRleHRPdmVyZmxvdz86IFRleHRPdmVyZmxvdywgdmlzaWJsZT86IGJvb2xlYW4sIHdvcmRXcmFwPzogV29yZFdyYXAgfSwgbWF4TGFiZWxDb3VudD86IG51bWJlciB8IHVuZGVmaW5lZCwgbWluU2VnbWVudFNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQsIHNlbGVjdGlvbk1vZGU/OiBQaWVDaGFydFNlcmllc0ludGVyYWN0aW9uTW9kZSwgc2VsZWN0aW9uU3R5bGU/OiB7IGJvcmRlcj86IHsgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQsIGRhc2hTdHlsZT86IERhc2hTdHlsZSB8IHVuZGVmaW5lZCwgdmlzaWJsZT86IGJvb2xlYW4sIHdpZHRoPzogbnVtYmVyIH0sIGNvbG9yPzogQ2hhcnRzQ29sb3IgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGhhdGNoaW5nPzogeyBkaXJlY3Rpb24/OiBIYXRjaERpcmVjdGlvbiwgb3BhY2l0eT86IG51bWJlciwgc3RlcD86IG51bWJlciwgd2lkdGg/OiBudW1iZXIgfSwgaGlnaGxpZ2h0PzogYm9vbGVhbiB9LCBzbWFsbFZhbHVlc0dyb3VwaW5nPzogeyBncm91cE5hbWU/OiBzdHJpbmcsIG1vZGU/OiBTbWFsbFZhbHVlc0dyb3VwaW5nTW9kZSwgdGhyZXNob2xkPzogbnVtYmVyIHwgdW5kZWZpbmVkLCB0b3BDb3VudD86IG51bWJlciB8IHVuZGVmaW5lZCB9LCB0YWdGaWVsZD86IHN0cmluZywgdmFsdWVGaWVsZD86IHN0cmluZyB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgY3VzdG9taXplQW5ub3RhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPCgoYW5ub3RhdGlvbjogZHhQaWVDaGFydEFubm90YXRpb25Db25maWcgfCBhbnkpID0+IGR4UGllQ2hhcnRBbm5vdGF0aW9uQ29uZmlnKSB8IHVuZGVmaW5lZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGN1c3RvbWl6ZUxhYmVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8KChwb2ludEluZm86IGFueSkgPT4gU2VyaWVzTGFiZWwpPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgY3VzdG9taXplUG9pbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjwoKHBvaW50SW5mbzogYW55KSA9PiBTZXJpZXNQb2ludCk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBkYXRhU291cmNlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8YW55PiB8IERhdGFTb3VyY2UgfCBEYXRhU291cmNlT3B0aW9ucyB8IG51bGwgfCBTdG9yZSB8IHN0cmluZz47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGRpYW1ldGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZGlzYWJsZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZWxlbWVudEF0dHJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZXhwb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcsIGVuYWJsZWQ/OiBib29sZWFuLCBmaWxlTmFtZT86IHN0cmluZywgZm9ybWF0cz86IEFycmF5PEV4cG9ydEZvcm1hdD4sIG1hcmdpbj86IG51bWJlciwgcHJpbnRpbmdFbmFibGVkPzogYm9vbGVhbiwgc3ZnVG9DYW52YXM/OiAoKHN2ZzogYW55LCBjYW52YXM6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaW5uZXJSYWRpdXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBsZWdlbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGJhY2tncm91bmRDb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZCwgYm9yZGVyPzogeyBjb2xvcj86IHN0cmluZywgY29ybmVyUmFkaXVzPzogbnVtYmVyLCBkYXNoU3R5bGU/OiBEYXNoU3R5bGUsIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjb2x1bW5Db3VudD86IG51bWJlciwgY29sdW1uSXRlbVNwYWNpbmc/OiBudW1iZXIsIGN1c3RvbWl6ZUhpbnQ/OiAoKHBvaW50SW5mbzogeyBwb2ludENvbG9yOiBzdHJpbmcsIHBvaW50SW5kZXg6IG51bWJlciwgcG9pbnROYW1lOiBhbnkgfSkgPT4gc3RyaW5nKSwgY3VzdG9taXplSXRlbXM/OiAoKGl0ZW1zOiBBcnJheTxQaWVDaGFydExlZ2VuZEl0ZW0+KSA9PiBBcnJheTxQaWVDaGFydExlZ2VuZEl0ZW0+KSwgY3VzdG9taXplVGV4dD86ICgocG9pbnRJbmZvOiB7IHBvaW50Q29sb3I6IHN0cmluZywgcG9pbnRJbmRleDogbnVtYmVyLCBwb2ludE5hbWU6IGFueSB9KSA9PiBzdHJpbmcpLCBmb250PzogRm9udCwgaG9yaXpvbnRhbEFsaWdubWVudD86IEhvcml6b250YWxBbGlnbm1lbnQsIGhvdmVyTW9kZT86IFBpZUNoYXJ0TGVnZW5kSG92ZXJNb2RlLCBpdGVtc0FsaWdubWVudD86IEhvcml6b250YWxBbGlnbm1lbnQgfCB1bmRlZmluZWQsIGl0ZW1UZXh0UG9zaXRpb24/OiBQb3NpdGlvbiB8IHVuZGVmaW5lZCwgbWFyZ2luPzogbnVtYmVyIHwgeyBib3R0b20/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCB0b3A/OiBudW1iZXIgfSwgbWFya2VyU2l6ZT86IG51bWJlciwgbWFya2VyVGVtcGxhdGU/OiBhbnksIG9yaWVudGF0aW9uPzogT3JpZW50YXRpb24gfCB1bmRlZmluZWQsIHBhZGRpbmdMZWZ0UmlnaHQ/OiBudW1iZXIsIHBhZGRpbmdUb3BCb3R0b20/OiBudW1iZXIsIHJvd0NvdW50PzogbnVtYmVyLCByb3dJdGVtU3BhY2luZz86IG51bWJlciwgdGl0bGU/OiBzdHJpbmcgfCB7IGZvbnQ/OiBGb250LCBob3Jpem9udGFsQWxpZ25tZW50PzogSG9yaXpvbnRhbEFsaWdubWVudCB8IHVuZGVmaW5lZCwgbWFyZ2luPzogeyBib3R0b20/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCB0b3A/OiBudW1iZXIgfSwgcGxhY2Vob2xkZXJTaXplPzogbnVtYmVyIHwgdW5kZWZpbmVkLCBzdWJ0aXRsZT86IHN0cmluZyB8IHsgZm9udD86IEZvbnQsIG9mZnNldD86IG51bWJlciwgdGV4dD86IHN0cmluZyB9LCB0ZXh0Pzogc3RyaW5nLCB2ZXJ0aWNhbEFsaWdubWVudD86IFZlcnRpY2FsRWRnZSB9LCB2ZXJ0aWNhbEFsaWdubWVudD86IFZlcnRpY2FsRWRnZSwgdmlzaWJsZT86IGJvb2xlYW4gfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGxvYWRpbmdJbmRpY2F0b3JDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGJhY2tncm91bmRDb2xvcj86IHN0cmluZywgZW5hYmxlZD86IGJvb2xlYW4sIGZvbnQ/OiBGb250LCBzaG93PzogYm9vbGVhbiwgdGV4dD86IHN0cmluZyB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgbWFyZ2luQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBib3R0b20/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCB0b3A/OiBudW1iZXIgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG1pbkRpYW1ldGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcGFsZXR0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4gfCBQYWxldHRlPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcGFsZXR0ZUV4dGVuc2lvbk1vZGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQYWxldHRlRXh0ZW5zaW9uTW9kZT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHBhdGhNb2RpZmllZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBwb2ludFNlbGVjdGlvbk1vZGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTaW5nbGVPck11bHRpcGxlPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVkcmF3T25SZXNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVzb2x2ZUxhYmVsT3ZlcmxhcHBpbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTaGlmdExhYmVsT3ZlcmxhcD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHJ0bEVuYWJsZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgc2VnbWVudHNEaXJlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxQaWVDaGFydFNlZ21lbnREaXJlY3Rpb24+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBzZXJpZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxQaWVDaGFydFNlcmllcz4gfCBQaWVDaGFydFNlcmllcyB8IHVuZGVmaW5lZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHNlcmllc1RlbXBsYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgc2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHsgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkLCB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgc2l6ZUdyb3VwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgc3RhcnRBbmdsZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHRoZW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGhlbWU+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB0aXRsZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IHsgZm9udD86IEZvbnQsIGhvcml6b250YWxBbGlnbm1lbnQ/OiBIb3Jpem9udGFsQWxpZ25tZW50LCBtYXJnaW4/OiBudW1iZXIgfCB7IGJvdHRvbT86IG51bWJlciwgbGVmdD86IG51bWJlciwgcmlnaHQ/OiBudW1iZXIsIHRvcD86IG51bWJlciB9LCBwbGFjZWhvbGRlclNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQsIHN1YnRpdGxlPzogc3RyaW5nIHwgeyBmb250PzogRm9udCwgb2Zmc2V0PzogbnVtYmVyLCB0ZXh0Pzogc3RyaW5nLCB0ZXh0T3ZlcmZsb3c/OiBUZXh0T3ZlcmZsb3csIHdvcmRXcmFwPzogV29yZFdyYXAgfSwgdGV4dD86IHN0cmluZywgdGV4dE92ZXJmbG93PzogVGV4dE92ZXJmbG93LCB2ZXJ0aWNhbEFsaWdubWVudD86IFZlcnRpY2FsRWRnZSwgd29yZFdyYXA/OiBXb3JkV3JhcCB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgdG9vbHRpcENoYW5nZTogRXZlbnRFbWl0dGVyPHsgYXJndW1lbnRGb3JtYXQ/OiBGb3JtYXQgfCB1bmRlZmluZWQsIGFycm93TGVuZ3RoPzogbnVtYmVyLCBib3JkZXI/OiB7IGNvbG9yPzogc3RyaW5nLCBkYXNoU3R5bGU/OiBEYXNoU3R5bGUsIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWQsIHZpc2libGU/OiBib29sZWFuLCB3aWR0aD86IG51bWJlciB9LCBjb2xvcj86IHN0cmluZywgY29udGFpbmVyPzogYW55IHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250ZW50VGVtcGxhdGU/OiBhbnksIGNvcm5lclJhZGl1cz86IG51bWJlciwgY3VzdG9taXplVG9vbHRpcD86ICgocG9pbnRJbmZvOiBkeFBpZUNoYXJ0UG9pbnRJbmZvKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB8IHVuZGVmaW5lZCwgZW5hYmxlZD86IGJvb2xlYW4sIGZvbnQ/OiBGb250LCBmb3JtYXQ/OiBGb3JtYXQgfCB1bmRlZmluZWQsIGludGVyYWN0aXZlPzogYm9vbGVhbiwgb3BhY2l0eT86IG51bWJlciB8IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnRSaWdodD86IG51bWJlciwgcGFkZGluZ1RvcEJvdHRvbT86IG51bWJlciwgc2hhZG93PzogeyBibHVyPzogbnVtYmVyLCBjb2xvcj86IHN0cmluZywgb2Zmc2V0WD86IG51bWJlciwgb2Zmc2V0WT86IG51bWJlciwgb3BhY2l0eT86IG51bWJlciB9LCBzaGFyZWQ/OiBib29sZWFuLCB6SW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHR5cGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQaWVDaGFydFR5cGU+O1xyXG5cclxuXHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5nWm9uZTogTmdab25lLCB0ZW1wbGF0ZUhvc3Q6IER4VGVtcGxhdGVIb3N0LFxyXG4gICAgICAgICAgICBwcml2YXRlIF93YXRjaGVySGVscGVyOiBXYXRjaGVySGVscGVyLFxyXG4gICAgICAgICAgICBwcml2YXRlIF9pZGg6IEl0ZXJhYmxlRGlmZmVySGVscGVyLFxyXG4gICAgICAgICAgICBvcHRpb25Ib3N0OiBOZXN0ZWRPcHRpb25Ib3N0LFxyXG4gICAgICAgICAgICB0cmFuc2ZlclN0YXRlOiBUcmFuc2ZlclN0YXRlLFxyXG4gICAgICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBhbnkpIHtcclxuXHJcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgbmdab25lLCB0ZW1wbGF0ZUhvc3QsIF93YXRjaGVySGVscGVyLCB0cmFuc2ZlclN0YXRlLCBwbGF0Zm9ybUlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRFbWl0dGVycyhbXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZGlzcG9zaW5nJywgZW1pdDogJ29uRGlzcG9zaW5nJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2RvbmUnLCBlbWl0OiAnb25Eb25lJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2RyYXduJywgZW1pdDogJ29uRHJhd24nIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZXhwb3J0ZWQnLCBlbWl0OiAnb25FeHBvcnRlZCcgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdleHBvcnRpbmcnLCBlbWl0OiAnb25FeHBvcnRpbmcnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZmlsZVNhdmluZycsIGVtaXQ6ICdvbkZpbGVTYXZpbmcnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnaW5jaWRlbnRPY2N1cnJlZCcsIGVtaXQ6ICdvbkluY2lkZW50T2NjdXJyZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnaW5pdGlhbGl6ZWQnLCBlbWl0OiAnb25Jbml0aWFsaXplZCcgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdsZWdlbmRDbGljaycsIGVtaXQ6ICdvbkxlZ2VuZENsaWNrJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ29wdGlvbkNoYW5nZWQnLCBlbWl0OiAnb25PcHRpb25DaGFuZ2VkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ3BvaW50Q2xpY2snLCBlbWl0OiAnb25Qb2ludENsaWNrJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ3BvaW50SG92ZXJDaGFuZ2VkJywgZW1pdDogJ29uUG9pbnRIb3ZlckNoYW5nZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAncG9pbnRTZWxlY3Rpb25DaGFuZ2VkJywgZW1pdDogJ29uUG9pbnRTZWxlY3Rpb25DaGFuZ2VkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ3Rvb2x0aXBIaWRkZW4nLCBlbWl0OiAnb25Ub29sdGlwSGlkZGVuJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ3Rvb2x0aXBTaG93bicsIGVtaXQ6ICdvblRvb2x0aXBTaG93bicgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnYWRhcHRpdmVMYXlvdXRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2FuaW1hdGlvbkNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnYW5ub3RhdGlvbnNDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2NlbnRlclRlbXBsYXRlQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjb21tb25Bbm5vdGF0aW9uU2V0dGluZ3NDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2NvbW1vblNlcmllc1NldHRpbmdzQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjdXN0b21pemVBbm5vdGF0aW9uQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjdXN0b21pemVMYWJlbENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnY3VzdG9taXplUG9pbnRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2RhdGFTb3VyY2VDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2RpYW1ldGVyQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdkaXNhYmxlZENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnZWxlbWVudEF0dHJDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2V4cG9ydENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnaW5uZXJSYWRpdXNDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2xlZ2VuZENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnbG9hZGluZ0luZGljYXRvckNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnbWFyZ2luQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdtaW5EaWFtZXRlckNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncGFsZXR0ZUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncGFsZXR0ZUV4dGVuc2lvbk1vZGVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3BhdGhNb2RpZmllZENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncG9pbnRTZWxlY3Rpb25Nb2RlQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdyZWRyYXdPblJlc2l6ZUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncmVzb2x2ZUxhYmVsT3ZlcmxhcHBpbmdDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3J0bEVuYWJsZWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3NlZ21lbnRzRGlyZWN0aW9uQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdzZXJpZXNDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3Nlcmllc1RlbXBsYXRlQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdzaXplQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdzaXplR3JvdXBDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3N0YXJ0QW5nbGVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3RoZW1lQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd0aXRsZUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAndG9vbHRpcENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAndHlwZUNoYW5nZScgfVxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICB0aGlzLl9pZGguc2V0SG9zdCh0aGlzKTtcclxuICAgICAgICBvcHRpb25Ib3N0LnNldEhvc3QodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jcmVhdGVJbnN0YW5jZShlbGVtZW50LCBvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgRHhQaWVDaGFydChlbGVtZW50LCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveVdpZGdldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnNldHVwQ2hhbmdlcygnYW5ub3RhdGlvbnMnLCBjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnNldHVwQ2hhbmdlcygnZGF0YVNvdXJjZScsIGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0dXBDaGFuZ2VzKCdwYWxldHRlJywgY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy5zZXR1cENoYW5nZXMoJ3NlcmllcycsIGNoYW5nZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwQ2hhbmdlcyhwcm9wOiBzdHJpbmcsIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoIShwcm9wIGluIHRoaXMuX29wdGlvbnNUb1VwZGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5faWRoLnNldHVwKHByb3AsIGNoYW5nZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgdGhpcy5faWRoLmRvQ2hlY2soJ2Fubm90YXRpb25zJyk7XHJcbiAgICAgICAgdGhpcy5faWRoLmRvQ2hlY2soJ2RhdGFTb3VyY2UnKTtcclxuICAgICAgICB0aGlzLl9pZGguZG9DaGVjaygncGFsZXR0ZScpO1xyXG4gICAgICAgIHRoaXMuX2lkaC5kb0NoZWNrKCdzZXJpZXMnKTtcclxuICAgICAgICB0aGlzLl93YXRjaGVySGVscGVyLmNoZWNrV2F0Y2hlcnMoKTtcclxuICAgICAgICBzdXBlci5uZ0RvQ2hlY2soKTtcclxuICAgICAgICBzdXBlci5jbGVhckNoYW5nZWRPcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NldE9wdGlvbihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBsZXQgaXNTZXR1cCA9IHRoaXMuX2lkaC5zZXR1cFNpbmdsZShuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgbGV0IGlzQ2hhbmdlZCA9IHRoaXMuX2lkaC5nZXRDaGFuZ2VzKG5hbWUsIHZhbHVlKSAhPT0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2V0dXAgfHwgaXNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLl9zZXRPcHRpb24obmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBEeFBpZUNoYXJ0Q29tcG9uZW50LFxyXG4gICAgRHhvQWRhcHRpdmVMYXlvdXRNb2R1bGUsXHJcbiAgICBEeG9BbmltYXRpb25Nb2R1bGUsXHJcbiAgICBEeGlBbm5vdGF0aW9uTW9kdWxlLFxyXG4gICAgRHhvQm9yZGVyTW9kdWxlLFxyXG4gICAgRHhvRm9udE1vZHVsZSxcclxuICAgIER4b0ltYWdlTW9kdWxlLFxyXG4gICAgRHhvU2hhZG93TW9kdWxlLFxyXG4gICAgRHhvQ29tbW9uQW5ub3RhdGlvblNldHRpbmdzTW9kdWxlLFxyXG4gICAgRHhvQ29tbW9uU2VyaWVzU2V0dGluZ3NNb2R1bGUsXHJcbiAgICBEeG9Db2xvck1vZHVsZSxcclxuICAgIER4b0hvdmVyU3R5bGVNb2R1bGUsXHJcbiAgICBEeG9IYXRjaGluZ01vZHVsZSxcclxuICAgIER4b0xhYmVsTW9kdWxlLFxyXG4gICAgRHhvQXJndW1lbnRGb3JtYXRNb2R1bGUsXHJcbiAgICBEeG9Db25uZWN0b3JNb2R1bGUsXHJcbiAgICBEeG9Gb3JtYXRNb2R1bGUsXHJcbiAgICBEeG9TZWxlY3Rpb25TdHlsZU1vZHVsZSxcclxuICAgIER4b1NtYWxsVmFsdWVzR3JvdXBpbmdNb2R1bGUsXHJcbiAgICBEeG9FeHBvcnRNb2R1bGUsXHJcbiAgICBEeG9MZWdlbmRNb2R1bGUsXHJcbiAgICBEeG9NYXJnaW5Nb2R1bGUsXHJcbiAgICBEeG9UaXRsZU1vZHVsZSxcclxuICAgIER4b1N1YnRpdGxlTW9kdWxlLFxyXG4gICAgRHhvTG9hZGluZ0luZGljYXRvck1vZHVsZSxcclxuICAgIER4aVNlcmllc01vZHVsZSxcclxuICAgIER4b1Nlcmllc1RlbXBsYXRlTW9kdWxlLFxyXG4gICAgRHhvU2l6ZU1vZHVsZSxcclxuICAgIER4b1Rvb2x0aXBNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEFkYXB0aXZlTGF5b3V0TW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRBbmltYXRpb25Nb2R1bGUsXHJcbiAgICBEeGlQaWVDaGFydEFubm90YXRpb25Nb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEFubm90YXRpb25Cb3JkZXJNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEFyZ3VtZW50Rm9ybWF0TW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRCb3JkZXJNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydENvbG9yTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRDb21tb25Bbm5vdGF0aW9uU2V0dGluZ3NNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydENvbW1vblNlcmllc1NldHRpbmdzTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRDb25uZWN0b3JNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEV4cG9ydE1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0Rm9udE1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0Rm9ybWF0TW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRIYXRjaGluZ01vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0SG92ZXJTdHlsZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0SW1hZ2VNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydExhYmVsTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRMZWdlbmRNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydExlZ2VuZFRpdGxlTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRMZWdlbmRUaXRsZVN1YnRpdGxlTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRMb2FkaW5nSW5kaWNhdG9yTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRNYXJnaW5Nb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFBpZUNoYXJ0VGl0bGVNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFBpZUNoYXJ0VGl0bGVTdWJ0aXRsZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U2VsZWN0aW9uU3R5bGVNb2R1bGUsXHJcbiAgICBEeGlQaWVDaGFydFNlcmllc01vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U2VyaWVzQm9yZGVyTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRTZXJpZXNUZW1wbGF0ZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U2hhZG93TW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRTaXplTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRTbWFsbFZhbHVlc0dyb3VwaW5nTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRTdWJ0aXRsZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0VGl0bGVNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFRvb2x0aXBNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFRvb2x0aXBCb3JkZXJNb2R1bGUsXHJcbiAgICBEeEludGVncmF0aW9uTW9kdWxlLFxyXG4gICAgRHhUZW1wbGF0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgRHhQaWVDaGFydENvbXBvbmVudCxcclxuICAgIER4b0FkYXB0aXZlTGF5b3V0TW9kdWxlLFxyXG4gICAgRHhvQW5pbWF0aW9uTW9kdWxlLFxyXG4gICAgRHhpQW5ub3RhdGlvbk1vZHVsZSxcclxuICAgIER4b0JvcmRlck1vZHVsZSxcclxuICAgIER4b0ZvbnRNb2R1bGUsXHJcbiAgICBEeG9JbWFnZU1vZHVsZSxcclxuICAgIER4b1NoYWRvd01vZHVsZSxcclxuICAgIER4b0NvbW1vbkFubm90YXRpb25TZXR0aW5nc01vZHVsZSxcclxuICAgIER4b0NvbW1vblNlcmllc1NldHRpbmdzTW9kdWxlLFxyXG4gICAgRHhvQ29sb3JNb2R1bGUsXHJcbiAgICBEeG9Ib3ZlclN0eWxlTW9kdWxlLFxyXG4gICAgRHhvSGF0Y2hpbmdNb2R1bGUsXHJcbiAgICBEeG9MYWJlbE1vZHVsZSxcclxuICAgIER4b0FyZ3VtZW50Rm9ybWF0TW9kdWxlLFxyXG4gICAgRHhvQ29ubmVjdG9yTW9kdWxlLFxyXG4gICAgRHhvRm9ybWF0TW9kdWxlLFxyXG4gICAgRHhvU2VsZWN0aW9uU3R5bGVNb2R1bGUsXHJcbiAgICBEeG9TbWFsbFZhbHVlc0dyb3VwaW5nTW9kdWxlLFxyXG4gICAgRHhvRXhwb3J0TW9kdWxlLFxyXG4gICAgRHhvTGVnZW5kTW9kdWxlLFxyXG4gICAgRHhvTWFyZ2luTW9kdWxlLFxyXG4gICAgRHhvVGl0bGVNb2R1bGUsXHJcbiAgICBEeG9TdWJ0aXRsZU1vZHVsZSxcclxuICAgIER4b0xvYWRpbmdJbmRpY2F0b3JNb2R1bGUsXHJcbiAgICBEeGlTZXJpZXNNb2R1bGUsXHJcbiAgICBEeG9TZXJpZXNUZW1wbGF0ZU1vZHVsZSxcclxuICAgIER4b1NpemVNb2R1bGUsXHJcbiAgICBEeG9Ub29sdGlwTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRBZGFwdGl2ZUxheW91dE1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0QW5pbWF0aW9uTW9kdWxlLFxyXG4gICAgRHhpUGllQ2hhcnRBbm5vdGF0aW9uTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRBbm5vdGF0aW9uQm9yZGVyTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRBcmd1bWVudEZvcm1hdE1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0Qm9yZGVyTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRDb2xvck1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0Q29tbW9uQW5ub3RhdGlvblNldHRpbmdzTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRDb21tb25TZXJpZXNTZXR0aW5nc01vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0Q29ubmVjdG9yTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRFeHBvcnRNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEZvbnRNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEZvcm1hdE1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0SGF0Y2hpbmdNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEhvdmVyU3R5bGVNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydEltYWdlTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRMYWJlbE1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0TGVnZW5kTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRMZWdlbmRUaXRsZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0TGVnZW5kVGl0bGVTdWJ0aXRsZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0TG9hZGluZ0luZGljYXRvck1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0TWFyZ2luTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRQaWVDaGFydFRpdGxlTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRQaWVDaGFydFRpdGxlU3VidGl0bGVNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFNlbGVjdGlvblN0eWxlTW9kdWxlLFxyXG4gICAgRHhpUGllQ2hhcnRTZXJpZXNNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFNlcmllc0JvcmRlck1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U2VyaWVzVGVtcGxhdGVNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFNoYWRvd01vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U2l6ZU1vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U21hbGxWYWx1ZXNHcm91cGluZ01vZHVsZSxcclxuICAgIER4b1BpZUNoYXJ0U3VidGl0bGVNb2R1bGUsXHJcbiAgICBEeG9QaWVDaGFydFRpdGxlTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRUb29sdGlwTW9kdWxlLFxyXG4gICAgRHhvUGllQ2hhcnRUb29sdGlwQm9yZGVyTW9kdWxlLFxyXG4gICAgRHhUZW1wbGF0ZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIER4UGllQ2hhcnRNb2R1bGUgeyB9XHJcblxyXG5leHBvcnQgKiBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvcGllLWNoYXJ0L25lc3RlZCc7XHJcblxyXG5pbXBvcnQgdHlwZSAqIGFzIER4UGllQ2hhcnRUeXBlcyBmcm9tIFwiZGV2ZXh0cmVtZS92aXovcGllX2NoYXJ0X3R5cGVzXCI7XHJcbmV4cG9ydCB7IER4UGllQ2hhcnRUeXBlcyB9O1xyXG5cclxuXHJcbiJdfQ==