kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
547 lines (545 loc) • 54.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.UNKNOWN_COLOR_KEY = exports.PROPERTY_GROUPS = exports.LAYER_VIS_CONFIGS = exports.LAYER_TYPES = exports.LAYER_TEXT_CONFIGS = exports.EDITOR_AVAILABLE_LAYERS = exports.DEFAULT_TEXT_LABEL = exports.DEFAULT_LAYER_OPACITY = exports.DEFAULT_LAYER_LABEL = exports.DEFAULT_HIGHLIGHT_COLOR = exports.DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_RANGE = void 0;
var _keymirror = _interopRequireDefault(require("keymirror"));
var _defaultSettings = require("./default-settings");
var _colorPalettes = require("./color-palettes");
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var PROPERTY_GROUPS = exports.PROPERTY_GROUPS = (0, _keymirror["default"])({
color: null,
stroke: null,
radius: null,
height: null,
angle: null,
// for heatmap aggregation
cell: null,
precision: null,
display: null,
interaction: null
});
var DEFAULT_LAYER_OPACITY = exports.DEFAULT_LAYER_OPACITY = 0.8;
var DEFAULT_HIGHLIGHT_COLOR = exports.DEFAULT_HIGHLIGHT_COLOR = [252, 242, 26, 255];
var DEFAULT_LAYER_LABEL = exports.DEFAULT_LAYER_LABEL = 'new layer';
var DEFAULT_TEXT_LABEL = exports.DEFAULT_TEXT_LABEL = {
field: null,
color: [255, 255, 255],
size: 18,
offset: [0, 0],
anchor: 'start',
alignment: 'center',
outlineWidth: 0,
outlineColor: [255, 0, 0, 255],
background: false,
backgroundColor: [0, 0, 200, 255]
};
var DEFAULT_COLOR_PALETTE = _colorPalettes.KEPLER_COLOR_PALETTES.find(function (_ref) {
var name = _ref.name;
return name === _defaultSettings.DEFAULT_LAYER_COLOR_PALETTE;
});
var DEFAULT_COLOR_RANGE = exports.DEFAULT_COLOR_RANGE = (0, _colorPalettes.colorPaletteToColorRange)(DEFAULT_COLOR_PALETTE, {
reversed: false,
steps: _defaultSettings.DEFAULT_LAYER_COLOR_PALETTE_STEPS
});
var DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_CUSTOM_PALETTE = {
name: 'color.customPalette',
type: 'custom',
category: 'Custom',
colors: []
};
var UNKNOWN_COLOR_KEY = exports.UNKNOWN_COLOR_KEY = '__unknownColor__';
var DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_UI = {
// customPalette in edit
customPalette: DEFAULT_CUSTOM_PALETTE,
// show color sketcher modal
showSketcher: false,
// show color range selection panel
showDropdown: false,
// show color chart
showColorChart: false,
// color range selector config
colorRangeConfig: {
type: 'all',
steps: 6,
reversed: false,
colorBlindSafe: false,
custom: false,
customBreaks: false
}
};
var LAYER_VIS_CONFIGS = exports.LAYER_VIS_CONFIGS = {
thickness: {
type: 'number',
defaultValue: 2,
label: 'layerVisConfigs.strokeWidth',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.stroke,
property: 'thickness',
allowCustomValue: true
},
strokeWidthRange: {
type: 'number',
defaultValue: [0, 10],
label: 'layerVisConfigs.strokeWidthRange',
isRanged: true,
range: [0, 200],
step: 0.1,
group: PROPERTY_GROUPS.stroke,
property: 'sizeRange',
allowCustomValue: true
},
trailLength: {
type: 'number',
defaultValue: 180,
label: 'layerVisConfigs.strokeWidth',
isRanged: false,
range: [1, 1000],
step: 1,
group: PROPERTY_GROUPS.stroke,
property: 'trailLength',
allowCustomValue: true
},
fadeTrail: {
defaultValue: true,
type: 'boolean',
label: 'layerVisConfigs.fadeTrail',
group: PROPERTY_GROUPS.stroke,
property: 'fadeTrail'
},
billboard: {
defaultValue: false,
type: 'boolean',
label: 'layerVisConfigs.billboard',
description: 'layerVisConfigs.billboardDescription',
group: PROPERTY_GROUPS.display,
property: 'billboard'
},
// radius is actually radiusScale in deck.gl
radius: {
type: 'number',
defaultValue: 10,
label: 'layerVisConfigs.radius',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'radius',
allowCustomValue: true
},
fixedRadius: {
defaultValue: false,
type: 'boolean',
label: 'layerVisConfigs.fixedRadius',
description: 'layerVisConfigs.fixedRadiusDescription',
group: PROPERTY_GROUPS.radius,
property: 'fixedRadius'
},
fixedHeight: {
defaultValue: false,
type: 'boolean',
label: 'layerVisConfigs.fixedHeight',
description: 'layerVisConfigs.fixedHeightDescription',
group: PROPERTY_GROUPS.height,
property: 'fixedHeight'
},
radiusRange: {
type: 'number',
defaultValue: [0, 50],
isRanged: true,
range: [0, 500],
step: 0.1,
label: 'layerVisConfigs.radiusRange',
group: PROPERTY_GROUPS.radius,
property: 'radiusRange',
allowCustomValue: true
},
clusterRadius: {
type: 'number',
label: 'layerVisConfigs.clusterRadius',
defaultValue: 40,
isRanged: false,
range: [1, 500],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'clusterRadius',
allowCustomValue: true
},
clusterRadiusRange: {
type: 'number',
label: 'layerVisConfigs.radiusRangePixels',
defaultValue: [1, 40],
isRanged: true,
range: [1, 150],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'radiusRange',
allowCustomValue: true
},
opacity: {
type: 'number',
defaultValue: DEFAULT_LAYER_OPACITY,
label: 'layerVisConfigs.opacity',
isRanged: false,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.color,
property: 'opacity',
allowCustomValue: false
},
coverage: {
type: 'number',
defaultValue: 1,
label: 'layerVisConfigs.coverage',
isRanged: false,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'coverage',
allowCustomValue: false
},
// used in point layer
outline: {
type: 'boolean',
defaultValue: false,
label: 'layer.outline',
group: PROPERTY_GROUPS.display,
property: 'outline'
},
colorRange: {
type: 'color-range-select',
defaultValue: DEFAULT_COLOR_RANGE,
label: 'layerVisConfigs.colorRange',
group: PROPERTY_GROUPS.color,
property: 'colorRange'
},
strokeColorRange: {
type: 'color-range-select',
defaultValue: DEFAULT_COLOR_RANGE,
label: 'layerVisConfigs.strokeColorRange',
group: PROPERTY_GROUPS.color,
property: 'strokeColorRange'
},
targetColor: {
type: 'color-select',
label: 'layerVisConfigs.targetColor',
defaultValue: null,
group: PROPERTY_GROUPS.color,
property: 'targetColor'
},
strokeColor: {
type: 'color-select',
label: 'layerVisConfigs.strokeColor',
defaultValue: null,
group: PROPERTY_GROUPS.color,
property: 'strokeColor'
},
colorAggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'layerVisConfigs.colorAggregation',
// aggregation options are based on color field types
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.color,
property: 'colorAggregation',
condition: function condition(config) {
return Boolean(config.colorField);
}
},
sizeAggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'layerVisConfigs.heightAggregation',
// aggregation options are based on color field types
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.height,
property: 'sizeAggregation',
condition: function condition(config) {
return Boolean(config.sizeField);
}
},
percentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return "Filter by ".concat(config.colorField ? "".concat(config.visConfig.colorAggregation, " ").concat(config.colorField.name) : 'count', " percentile");
},
isRanged: true,
range: [0, 100],
step: 0.01,
group: PROPERTY_GROUPS.color,
property: 'percentile',
// percentile filter only makes sense with linear aggregation
condition: function condition(config) {
return config.colorScale !== 'ordinal';
},
allowCustomValue: false
},
elevationPercentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return "Filter by ".concat(config.sizeField ? "".concat(config.visConfig.sizeAggregation, " ").concat(config.sizeField.name) : 'count', " percentile");
},
isRanged: true,
range: [0, 100],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'elevationPercentile',
// percentile filter only makes sense with linear aggregation
condition: function condition(config) {
return Boolean(config.visConfig.enable3d && (config.colorField || config.sizeField));
},
allowCustomValue: false
},
resolution: {
type: 'number',
defaultValue: 8,
label: 'layerVisConfigs.resolution',
isRanged: false,
range: [0, 13],
step: 1,
group: PROPERTY_GROUPS.cell,
property: 'resolution',
allowCustomValue: true
},
sizeScale: {
type: 'number',
defaultValue: 10,
label: 'layerVisConfigs.sizeScale',
isRanged: false,
range: [1, 1000],
step: 1,
group: PROPERTY_GROUPS.stroke,
property: 'sizeScale',
allowCustomValue: true
},
angle: {
type: 'number',
label: 'layerVisConfigs.angle',
defaultValue: 0,
isRanged: false,
range: [0, 360],
group: PROPERTY_GROUPS.angle,
step: 1,
property: 'angle',
allowCustomValue: true
},
worldUnitSize: {
type: 'number',
defaultValue: 1,
label: 'layerVisConfigs.worldUnitSize',
isRanged: false,
range: [0, 500],
step: 0.0001,
group: PROPERTY_GROUPS.cell,
property: 'worldUnitSize',
allowCustomValue: true
},
elevationScale: {
type: 'number',
defaultValue: 5,
label: 'layerVisConfigs.elevationScale',
isRanged: false,
range: [0, 1000],
step: 0.1,
group: PROPERTY_GROUPS.height,
property: 'elevationScale',
allowCustomValue: true
},
enableElevationZoomFactor: {
type: 'boolean',
defaultValue: true,
label: 'layerVisConfigs.enableElevationZoomFactor',
group: PROPERTY_GROUPS.height,
property: 'enableElevationZoomFactor',
description: 'layerVisConfigs.enableElevationZoomFactorDescription'
},
elevationRange: {
type: 'number',
defaultValue: [0, 500],
label: 'layerVisConfigs.heightScale',
isRanged: true,
range: [0, 1000],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'sizeRange',
allowCustomValue: true
},
heightRange: {
type: 'number',
defaultValue: [0, 500],
label: 'Height Scale',
isRanged: true,
range: [0, 1000],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'heightRange',
allowCustomValue: true
},
coverageRange: {
type: 'number',
defaultValue: [0, 1],
label: 'layerVisConfigs.coverageRange',
isRanged: true,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.radius,
property: 'coverageRange',
allowCustomValue: false
},
// hi precision is deprecated by deck.gl
'hi-precision': {
type: 'boolean',
defaultValue: false,
label: 'layerVisConfigs.highPrecisionRendering',
group: PROPERTY_GROUPS.precision,
property: 'hi-precision',
description: 'layerVisConfigs.highPrecisionRenderingDescription'
},
enable3d: {
type: 'boolean',
defaultValue: false,
label: 'layerVisConfigs.height',
group: PROPERTY_GROUPS.height,
property: 'enable3d',
description: 'layerVisConfigs.heightDescription'
},
stroked: {
type: 'boolean',
label: 'layerVisConfigs.stroke',
defaultValue: true,
group: PROPERTY_GROUPS.display,
property: 'stroked'
},
filled: {
type: 'boolean',
label: 'layerVisConfigs.fill',
defaultValue: false,
group: PROPERTY_GROUPS.display,
property: 'filled'
},
extruded: {
type: 'boolean',
defaultValue: false,
label: 'layerVisConfigs.enablePolygonHeight',
group: PROPERTY_GROUPS.display,
property: 'extruded'
},
wireframe: {
type: 'boolean',
defaultValue: false,
label: 'layerVisConfigs.showWireframe',
group: PROPERTY_GROUPS.display,
property: 'wireframe'
},
// used for heatmap
weight: {
type: 'number',
defaultValue: 1,
label: 'layerVisConfigs.weightIntensity',
isRanged: false,
range: [0.01, 500],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'weight',
condition: function condition(config) {
return Boolean(config.weightField);
},
allowCustomValue: true
},
heatmapRadius: {
type: 'number',
defaultValue: 20,
label: 'layerVisConfigs.radius',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.cell,
property: 'radius',
allowCustomValue: true
},
darkBaseMapEnabled: {
type: 'boolean',
defaultValue: true,
label: 'layerVisConfigs.darkModeEnabled',
property: 'darkBaseMapEnabled',
group: PROPERTY_GROUPS.display
},
allowHover: {
type: 'boolean',
defaultValue: true,
label: 'layerVisConfigs.allowHover',
group: PROPERTY_GROUPS.interaction,
property: 'allowHover'
},
showNeighborOnHover: {
type: 'boolean',
defaultValue: false,
label: 'layerVisConfigs.showNeighborOnHover',
group: PROPERTY_GROUPS.interaction,
property: 'showNeighborOnHover'
},
showHighlightColor: {
type: 'boolean',
defaultValue: true,
label: 'layerVisConfigs.showHighlightColor',
group: PROPERTY_GROUPS.interaction,
property: 'showHighlightColor'
}
};
var LAYER_TEXT_CONFIGS = exports.LAYER_TEXT_CONFIGS = {
fontSize: {
type: 'number',
range: [1, 100],
value0: 1,
step: 1,
isRanged: false,
label: 'Font size',
showInput: true
},
outlineWidth: {
type: 'number',
range: [0, 1],
value0: 0,
step: 0.01,
isRanged: false,
label: 'Outline width',
showInput: true
},
textAnchor: {
type: 'select',
options: ['start', 'middle', 'end'],
multiSelect: false,
searchable: false
},
textAlignment: {
type: 'select',
options: ['top', 'center', 'bottom'],
multiSelect: false,
searchable: false
}
};
var LAYER_TYPES = exports.LAYER_TYPES = (0, _keymirror["default"])({
point: null,
arc: null,
line: null,
grid: null,
hexagon: null,
geojson: null,
cluster: null,
icon: null,
heatmap: null,
hexagonId: null,
'3D': null,
trip: null,
s2: null,
vectorTile: null,
rasterTile: null
});
var EDITOR_AVAILABLE_LAYERS = exports.EDITOR_AVAILABLE_LAYERS = [LAYER_TYPES.point, LAYER_TYPES.hexagon, LAYER_TYPES.arc, LAYER_TYPES.line, LAYER_TYPES.hexagonId, LAYER_TYPES.geojson];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfa2V5bWlycm9yIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2NvbG9yUGFsZXR0ZXMiLCJQUk9QRVJUWV9HUk9VUFMiLCJleHBvcnRzIiwia2V5TWlycm9yIiwiY29sb3IiLCJzdHJva2UiLCJyYWRpdXMiLCJoZWlnaHQiLCJhbmdsZSIsImNlbGwiLCJwcmVjaXNpb24iLCJkaXNwbGF5IiwiaW50ZXJhY3Rpb24iLCJERUZBVUxUX0xBWUVSX09QQUNJVFkiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsIkRFRkFVTFRfTEFZRVJfTEFCRUwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJmaWVsZCIsInNpemUiLCJvZmZzZXQiLCJhbmNob3IiLCJhbGlnbm1lbnQiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lQ29sb3IiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENvbG9yIiwiREVGQVVMVF9DT0xPUl9QQUxFVFRFIiwiS0VQTEVSX0NPTE9SX1BBTEVUVEVTIiwiZmluZCIsIl9yZWYiLCJuYW1lIiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFIiwiREVGQVVMVF9DT0xPUl9SQU5HRSIsImNvbG9yUGFsZXR0ZVRvQ29sb3JSYW5nZSIsInJldmVyc2VkIiwic3RlcHMiLCJERUZBVUxUX0xBWUVSX0NPTE9SX1BBTEVUVEVfU1RFUFMiLCJERUZBVUxUX0NVU1RPTV9QQUxFVFRFIiwidHlwZSIsImNhdGVnb3J5IiwiY29sb3JzIiwiVU5LTk9XTl9DT0xPUl9LRVkiLCJERUZBVUxUX0NPTE9SX1VJIiwiY3VzdG9tUGFsZXR0ZSIsInNob3dTa2V0Y2hlciIsInNob3dEcm9wZG93biIsInNob3dDb2xvckNoYXJ0IiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yQmxpbmRTYWZlIiwiY3VzdG9tIiwiY3VzdG9tQnJlYWtzIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJ0aGlja25lc3MiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsImFsbG93Q3VzdG9tVmFsdWUiLCJzdHJva2VXaWR0aFJhbmdlIiwidHJhaWxMZW5ndGgiLCJmYWRlVHJhaWwiLCJiaWxsYm9hcmQiLCJkZXNjcmlwdGlvbiIsImZpeGVkUmFkaXVzIiwiZml4ZWRIZWlnaHQiLCJyYWRpdXNSYW5nZSIsImNsdXN0ZXJSYWRpdXMiLCJjbHVzdGVyUmFkaXVzUmFuZ2UiLCJvcGFjaXR5IiwiY292ZXJhZ2UiLCJvdXRsaW5lIiwiY29sb3JSYW5nZSIsInN0cm9rZUNvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsInN0cm9rZUNvbG9yIiwiY29sb3JBZ2dyZWdhdGlvbiIsIkFHR1JFR0FUSU9OX1RZUEVTIiwiYXZlcmFnZSIsIm9wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiY29uZGl0aW9uIiwiY29uZmlnIiwiQm9vbGVhbiIsImNvbG9yRmllbGQiLCJzaXplQWdncmVnYXRpb24iLCJzaXplRmllbGQiLCJwZXJjZW50aWxlIiwiY29uY2F0IiwidmlzQ29uZmlnIiwiY29sb3JTY2FsZSIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJlbmFibGUzZCIsInJlc29sdXRpb24iLCJzaXplU2NhbGUiLCJ3b3JsZFVuaXRTaXplIiwiZWxldmF0aW9uU2NhbGUiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZWxldmF0aW9uUmFuZ2UiLCJoZWlnaHRSYW5nZSIsImNvdmVyYWdlUmFuZ2UiLCJzdHJva2VkIiwiZmlsbGVkIiwiZXh0cnVkZWQiLCJ3aXJlZnJhbWUiLCJ3ZWlnaHQiLCJ3ZWlnaHRGaWVsZCIsImhlYXRtYXBSYWRpdXMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJhbGxvd0hvdmVyIiwic2hvd05laWdoYm9yT25Ib3ZlciIsInNob3dIaWdobGlnaHRDb2xvciIsIkxBWUVSX1RFWFRfQ09ORklHUyIsImZvbnRTaXplIiwidmFsdWUwIiwic2hvd0lucHV0IiwidGV4dEFuY2hvciIsIm11bHRpU2VsZWN0Iiwic2VhcmNoYWJsZSIsInRleHRBbGlnbm1lbnQiLCJMQVlFUl9UWVBFUyIsInBvaW50IiwiYXJjIiwibGluZSIsImdyaWQiLCJoZXhhZ29uIiwiZ2VvanNvbiIsImNsdXN0ZXIiLCJpY29uIiwiaGVhdG1hcCIsImhleGFnb25JZCIsInRyaXAiLCJzMiIsInZlY3RvclRpbGUiLCJyYXN0ZXJUaWxlIiwiRURJVE9SX0FWQUlMQUJMRV9MQVlFUlMiXSwic291cmNlcyI6WyIuLi9zcmMvbGF5ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcblxuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURSxcbiAgREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTXG59IGZyb20gJy4vZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge1xuICBDb2xvclJhbmdlLFxuICBDb2xvclVJLFxuICBMYXllclRleHRDb25maWcsXG4gIExheWVyVGV4dExhYmVsLFxuICBMYXllclZpc0NvbmZpZ1NldHRpbmdzLFxuICBSR0JBQ29sb3Jcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0NvbG9yUGFsZXR0ZSwgS0VQTEVSX0NPTE9SX1BBTEVUVEVTLCBjb2xvclBhbGV0dGVUb0NvbG9yUmFuZ2V9IGZyb20gJy4vY29sb3ItcGFsZXR0ZXMnO1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvblR5cGVzID0ga2V5b2YgdHlwZW9mIEFHR1JFR0FUSU9OX1RZUEVTO1xuXG5leHBvcnQgY29uc3QgUFJPUEVSVFlfR1JPVVBTID0ga2V5TWlycm9yKHtcbiAgY29sb3I6IG51bGwsXG4gIHN0cm9rZTogbnVsbCxcbiAgcmFkaXVzOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIGFuZ2xlOiBudWxsLFxuICAvLyBmb3IgaGVhdG1hcCBhZ2dyZWdhdGlvblxuICBjZWxsOiBudWxsLFxuICBwcmVjaXNpb246IG51bGwsXG4gIGRpc3BsYXk6IG51bGwsXG4gIGludGVyYWN0aW9uOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfT1BBQ0lUWSA9IDAuODtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUjogUkdCQUNvbG9yID0gWzI1MiwgMjQyLCAyNiwgMjU1XTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0xBQkVMID0gJ25ldyBsYXllcic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFWFRfTEFCRUw6IExheWVyVGV4dExhYmVsID0ge1xuICBmaWVsZDogbnVsbCxcbiAgY29sb3I6IFsyNTUsIDI1NSwgMjU1XSxcbiAgc2l6ZTogMTgsXG4gIG9mZnNldDogWzAsIDBdLFxuICBhbmNob3I6ICdzdGFydCcsXG4gIGFsaWdubWVudDogJ2NlbnRlcicsXG4gIG91dGxpbmVXaWR0aDogMCxcbiAgb3V0bGluZUNvbG9yOiBbMjU1LCAwLCAwLCAyNTVdLFxuICBiYWNrZ3JvdW5kOiBmYWxzZSxcbiAgYmFja2dyb3VuZENvbG9yOiBbMCwgMCwgMjAwLCAyNTVdXG59O1xuXG5jb25zdCBERUZBVUxUX0NPTE9SX1BBTEVUVEUgPSBLRVBMRVJfQ09MT1JfUEFMRVRURVMuZmluZChcbiAgKHtuYW1lfSkgPT4gbmFtZSA9PT0gREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFXG4pIGFzIENvbG9yUGFsZXR0ZTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfUkFOR0UgPSBjb2xvclBhbGV0dGVUb0NvbG9yUmFuZ2UoREVGQVVMVF9DT0xPUl9QQUxFVFRFLCB7XG4gIHJldmVyc2VkOiBmYWxzZSxcbiAgc3RlcHM6IERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURV9TVEVQU1xufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NVU1RPTV9QQUxFVFRFOiBDb2xvclJhbmdlID0ge1xuICBuYW1lOiAnY29sb3IuY3VzdG9tUGFsZXR0ZScsXG4gIHR5cGU6ICdjdXN0b20nLFxuICBjYXRlZ29yeTogJ0N1c3RvbScsXG4gIGNvbG9yczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBVTktOT1dOX0NPTE9SX0tFWSA9ICdfX3Vua25vd25Db2xvcl9fJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfVUk6IENvbG9yVUkgPSB7XG4gIC8vIGN1c3RvbVBhbGV0dGUgaW4gZWRpdFxuICBjdXN0b21QYWxldHRlOiBERUZBVUxUX0NVU1RPTV9QQUxFVFRFLFxuICAvLyBzaG93IGNvbG9yIHNrZXRjaGVyIG1vZGFsXG4gIHNob3dTa2V0Y2hlcjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgcmFuZ2Ugc2VsZWN0aW9uIHBhbmVsXG4gIHNob3dEcm9wZG93bjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgY2hhcnRcbiAgc2hvd0NvbG9yQ2hhcnQ6IGZhbHNlLFxuICAvLyBjb2xvciByYW5nZSBzZWxlY3RvciBjb25maWdcbiAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgIHR5cGU6ICdhbGwnLFxuICAgIHN0ZXBzOiA2LFxuICAgIHJldmVyc2VkOiBmYWxzZSxcbiAgICBjb2xvckJsaW5kU2FmZTogZmFsc2UsXG4gICAgY3VzdG9tOiBmYWxzZSxcbiAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBMQVlFUl9WSVNfQ09ORklHUzogTGF5ZXJWaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgdGhpY2tuZXNzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAyLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnN0cm9rZVdpZHRoJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ3RoaWNrbmVzcycsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZVxuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnN0cm9rZVdpZHRoUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMjAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgdHJhaWxMZW5ndGg6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDE4MCxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zdHJva2VXaWR0aCcsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMSwgMTAwMF0sXG4gICAgc3RlcDogMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ3RyYWlsTGVuZ3RoJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIGZhZGVUcmFpbDoge1xuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuZmFkZVRyYWlsJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ2ZhZGVUcmFpbCdcbiAgfSxcbiAgYmlsbGJvYXJkOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuYmlsbGJvYXJkJyxcbiAgICBkZXNjcmlwdGlvbjogJ2xheWVyVmlzQ29uZmlncy5iaWxsYm9hcmREZXNjcmlwdGlvbicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnYmlsbGJvYXJkJ1xuICB9LFxuICAvLyByYWRpdXMgaXMgYWN0dWFsbHkgcmFkaXVzU2NhbGUgaW4gZGVjay5nbFxuICByYWRpdXM6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEwLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnJhZGl1cycsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgZml4ZWRSYWRpdXM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5maXhlZFJhZGl1cycsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuZml4ZWRSYWRpdXNEZXNjcmlwdGlvbicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdmaXhlZFJhZGl1cydcbiAgfSxcbiAgZml4ZWRIZWlnaHQ6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5maXhlZEhlaWdodCcsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuZml4ZWRIZWlnaHREZXNjcmlwdGlvbicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdmaXhlZEhlaWdodCdcbiAgfSxcbiAgcmFkaXVzUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5yYWRpdXNSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXNSYW5nZScsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZVxuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY2x1c3RlclJhZGl1cycsXG4gICAgZGVmYXVsdFZhbHVlOiA0MCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NsdXN0ZXJSYWRpdXMnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgY2x1c3RlclJhZGl1c1JhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MucmFkaXVzUmFuZ2VQaXhlbHMnLFxuICAgIGRlZmF1bHRWYWx1ZTogWzEsIDQwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzEsIDE1MF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzUmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgb3BhY2l0eToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9MQVlFUl9PUEFDSVRZLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLm9wYWNpdHknLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ29wYWNpdHknLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG4gIGNvdmVyYWdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmNvdmVyYWdlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiBmYWxzZVxuICB9LFxuICAvLyB1c2VkIGluIHBvaW50IGxheWVyXG4gIG91dGxpbmU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyLm91dGxpbmUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ291dGxpbmUnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfQ09MT1JfUkFOR0UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY29sb3JSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2NvbG9yUmFuZ2UnXG4gIH0sXG4gIHN0cm9rZUNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfQ09MT1JfUkFOR0UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlQ29sb3JSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yUmFuZ2UnXG4gIH0sXG4gIHRhcmdldENvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MudGFyZ2V0Q29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAndGFyZ2V0Q29sb3InXG4gIH0sXG4gIHN0cm9rZUNvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InXG4gIH0sXG4gIGNvbG9yQWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUykgYXMgQWdncmVnYXRpb25UeXBlc1tdLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdjb2xvckFnZ3JlZ2F0aW9uJyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBCb29sZWFuKGNvbmZpZy5jb2xvckZpZWxkKVxuICB9LFxuICBzaXplQWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuaGVpZ2h0QWdncmVnYXRpb24nLFxuICAgIC8vIGFnZ3JlZ2F0aW9uIG9wdGlvbnMgYXJlIGJhc2VkIG9uIGNvbG9yIGZpZWxkIHR5cGVzXG4gICAgb3B0aW9uczogT2JqZWN0LmtleXMoQUdHUkVHQVRJT05fVFlQRVMpIGFzIEFnZ3JlZ2F0aW9uVHlwZXNbXSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gQm9vbGVhbihjb25maWcuc2l6ZUZpZWxkKVxuICB9LFxuICBwZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5jb2xvckZpZWxkXG4gICAgICAgICAgPyBgJHtjb25maWcudmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb259ICR7Y29uZmlnLmNvbG9yRmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnY291bnQnXG4gICAgICB9IHBlcmNlbnRpbGVgLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdwZXJjZW50aWxlJyxcblxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcuY29sb3JTY2FsZSAhPT0gJ29yZGluYWwnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG4gIGVsZXZhdGlvblBlcmNlbnRpbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMDBdLFxuICAgIGxhYmVsOiBjb25maWcgPT5cbiAgICAgIGBGaWx0ZXIgYnkgJHtcbiAgICAgICAgY29uZmlnLnNpemVGaWVsZCA/IGAke2NvbmZpZy52aXNDb25maWcuc2l6ZUFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5zaXplRmllbGQubmFtZX1gIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PlxuICAgICAgQm9vbGVhbihjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkICYmIChjb25maWcuY29sb3JGaWVsZCB8fCBjb25maWcuc2l6ZUZpZWxkKSksXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogZmFsc2VcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5yZXNvbHV0aW9uJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxM10sXG4gICAgc3RlcDogMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdyZXNvbHV0aW9uJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIHNpemVTY2FsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTAsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc2l6ZVNjYWxlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCAxMDAwXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAnc2l6ZVNjYWxlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIGFuZ2xlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuYW5nbGUnLFxuICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAzNjBdLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuYW5nbGUsXG4gICAgc3RlcDogMSxcbiAgICBwcm9wZXJ0eTogJ2FuZ2xlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Mud29ybGRVbml0U2l6ZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgNTAwXSxcbiAgICBzdGVwOiAwLjAwMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd29ybGRVbml0U2l6ZScsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZVxuICB9LFxuICBlbGV2YXRpb25TY2FsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogNSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5lbGV2YXRpb25TY2FsZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uU2NhbGUnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcjoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yJyxcbiAgICBkZXNjcmlwdGlvbjogJ2xheWVyVmlzQ29uZmlncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yRGVzY3JpcHRpb24nXG4gIH0sXG4gIGVsZXZhdGlvblJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgNTAwXSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5oZWlnaHRTY2FsZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIGhlaWdodFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgNTAwXSxcbiAgICBsYWJlbDogJ0hlaWdodCBTY2FsZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnaGVpZ2h0UmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgY292ZXJhZ2VSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmNvdmVyYWdlUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlUmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG4gIC8vIGhpIHByZWNpc2lvbiBpcyBkZXByZWNhdGVkIGJ5IGRlY2suZ2xcbiAgJ2hpLXByZWNpc2lvbic6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5oaWdoUHJlY2lzaW9uUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuaGlnaFByZWNpc2lvblJlbmRlcmluZ0Rlc2NyaXB0aW9uJ1xuICB9LFxuICBlbmFibGUzZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGUzZCcsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuaGVpZ2h0RGVzY3JpcHRpb24nXG4gIH0sXG4gIHN0cm9rZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmZpbGwnLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZmlsbGVkJ1xuICB9LFxuICBleHRydWRlZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmVuYWJsZVBvbHlnb25IZWlnaHQnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2V4dHJ1ZGVkJ1xuICB9LFxuICB3aXJlZnJhbWU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zaG93V2lyZWZyYW1lJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICd3aXJlZnJhbWUnXG4gIH0sXG4gIC8vIHVzZWQgZm9yIGhlYXRtYXBcbiAgd2VpZ2h0OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLndlaWdodEludGVuc2l0eScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMC4wMSwgNTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3dlaWdodCcsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gQm9vbGVhbihjb25maWcud2VpZ2h0RmllbGQpLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MucmFkaXVzJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgZGFya0Jhc2VNYXBFbmFibGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5kYXJrTW9kZUVuYWJsZWQnLFxuICAgIHByb3BlcnR5OiAnZGFya0Jhc2VNYXBFbmFibGVkJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXlcbiAgfSxcbiAgYWxsb3dIb3Zlcjoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuYWxsb3dIb3ZlcicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5pbnRlcmFjdGlvbixcbiAgICBwcm9wZXJ0eTogJ2FsbG93SG92ZXInXG4gIH0sXG4gIHNob3dOZWlnaGJvck9uSG92ZXI6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zaG93TmVpZ2hib3JPbkhvdmVyJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmludGVyYWN0aW9uLFxuICAgIHByb3BlcnR5OiAnc2hvd05laWdoYm9yT25Ib3ZlcidcbiAgfSxcbiAgc2hvd0hpZ2hsaWdodENvbG9yOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zaG93SGlnaGxpZ2h0Q29sb3InLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaW50ZXJhY3Rpb24sXG4gICAgcHJvcGVydHk6ICdzaG93SGlnaGxpZ2h0Q29sb3InXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBMQVlFUl9URVhUX0NPTkZJR1M6IExheWVyVGV4dENvbmZpZyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgb3V0bGluZVdpZHRoOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICB2YWx1ZTA6IDAsXG4gICAgc3RlcDogMC4wMSxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgbGFiZWw6ICdPdXRsaW5lIHdpZHRoJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9LFxuICB0ZXh0QWxpZ25tZW50OiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgb3B0aW9uczogWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbSddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuZXhwb3J0IGNvbnN0IExBWUVSX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgcG9pbnQ6IG51bGwsXG4gIGFyYzogbnVsbCxcbiAgbGluZTogbnVsbCxcbiAgZ3JpZDogbnVsbCxcbiAgaGV4YWdvbjogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgY2x1c3RlcjogbnVsbCxcbiAgaWNvbjogbnVsbCxcbiAgaGVhdG1hcDogbnVsbCxcbiAgaGV4YWdvbklkOiBudWxsLFxuICAnM0QnOiBudWxsLFxuICB0cmlwOiBudWxsLFxuICBzMjogbnVsbCxcbiAgdmVjdG9yVGlsZTogbnVsbCxcbiAgcmFzdGVyVGlsZTogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBFRElUT1JfQVZBSUxBQkxFX0xBWUVSUzogc3RyaW5nW10gPSBbXG4gIExBWUVSX1RZUEVTLnBvaW50LFxuICBMQVlFUl9UWVBFUy5oZXhhZ29uLFxuICBMQVlFUl9UWVBFUy5hcmMsXG4gIExBWUVSX1RZUEVTLmxpbmUsXG4gIExBWUVSX1RZUEVTLmhleGFnb25JZCxcbiAgTEFZRVJfVFlQRVMuZ2VvanNvblxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFhQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFsQkE7QUFDQTs7QUFxQk8sSUFBTUcsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsR0FBRyxJQUFBRSxxQkFBUyxFQUFDO0VBQ3ZDQyxLQUFLLEVBQUUsSUFBSTtFQUNYQyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxLQUFLLEVBQUUsSUFBSTtFQUNYO0VBQ0FDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLE9BQU8sRUFB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