@hmscore/cordova-plugin-hms-map
Version:
Cordova HMS Map Plugin
310 lines (306 loc) • 64.3 kB
JavaScript
/*
Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License")
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { __decorate, __extends, __metadata } from "tslib";
import { Injectable } from "@angular/core";
import { AwesomeCordovaNativePlugin, cordova } from "@awesome-cordova-plugins/core";
import * as i0 from "@angular/core";
var HMSMap = /** @class */ (function (_super) {
__extends(HMSMap, _super);
function HMSMap() {
return _super !== null && _super.apply(this, arguments) || this;
}
HMSMap.prototype.getMap = function (divId, huaweiMapOptions, bounds) { return cordova(this, "getMap", { "otherPromise": true }, arguments); };
HMSMap.prototype.showMap = function (divId) { return cordova(this, "showMap", { "otherPromise": true }, arguments); };
HMSMap.prototype.hasPermission = function () { return cordova(this, "hasPermission", { "otherPromise": true }, arguments); };
HMSMap.prototype.convertCoordinate = function (LatLngObj) { return cordova(this, "convertCoordinate", { "otherPromise": true }, arguments); };
HMSMap.prototype.convertCoordinates = function (LatLngListObj) { return cordova(this, "convertCoordinates", { "otherPromise": true }, arguments); };
HMSMap.prototype.requestPermission = function () { return cordova(this, "requestPermission", { "otherPromise": true }, arguments); };
HMSMap.prototype.computeDistanceBetween = function (from, to) { return cordova(this, "computeDistanceBetween", { "otherPromise": true }, arguments); };
HMSMap.prototype.setApiKey = function (apiKey) { return cordova(this, "setApiKey", { "otherPromise": true }, arguments); };
HMSMap.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
HMSMap.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
HMSMap.prototype.initialize = function (routePolicy) { return cordova(this, "initialize", { "otherPromise": true }, arguments); };
HMSMap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HMSMap, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
HMSMap.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HMSMap });
HMSMap.pluginName = "HMSMap";
HMSMap.plugin = "cordova-plugin-hms-map";
HMSMap.pluginRef = "HMSMap";
HMSMap.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HMSMap.platforms = ["Android"];
HMSMap = __decorate([], HMSMap);
return HMSMap;
}(AwesomeCordovaNativePlugin));
export { HMSMap };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HMSMap, decorators: [{
type: Injectable
}], propDecorators: { getMap: [], showMap: [], hasPermission: [], convertCoordinate: [], convertCoordinates: [], requestPermission: [], computeDistanceBetween: [], setApiKey: [], disableLogger: [], enableLogger: [], initialize: [] } });
var CameraUpdateFactory = /** @class */ (function () {
function CameraUpdateFactory() {
}
CameraUpdateFactory.newCameraPosition = function (cameraPosition) {
return HMSMap.getPlugin().CameraUpdateFactory.newCameraPosition(cameraPosition);
};
CameraUpdateFactory.newLatLng = function (latLng) {
return HMSMap.getPlugin().CameraUpdateFactory.newLatLng(latLng);
};
CameraUpdateFactory.newLatLngBounds = function (latLngBounds, padding, width, height) {
return HMSMap.getPlugin().CameraUpdateFactory.newLatLngBounds(latLngBounds, padding, width, height);
};
CameraUpdateFactory.newLatLngZoom = function (latLng, zoom) {
return HMSMap.getPlugin().CameraUpdateFactory.newLatLngZoom(latLng, zoom);
};
CameraUpdateFactory.scrollBy = function (xPixel, yPixel) {
return HMSMap.getPlugin().CameraUpdateFactory.scrollBy(xPixel, yPixel);
};
CameraUpdateFactory.zoomBy = function (amount, focus) {
return HMSMap.getPlugin().CameraUpdateFactory.zoomBy(amount, focus);
};
CameraUpdateFactory.zoomIn = function () {
return HMSMap.getPlugin().CameraUpdateFactory.zoomIn();
};
CameraUpdateFactory.zoomOut = function () {
return HMSMap.getPlugin().CameraUpdateFactory.zoomOut();
};
CameraUpdateFactory.zoomTo = function (zoom) {
return HMSMap.getPlugin().CameraUpdateFactory.zoomTo(zoom);
};
CameraUpdateFactory.pluginName = "HMSMap";
CameraUpdateFactory.plugin = "cordova-plugin-hms-map";
CameraUpdateFactory.pluginRef = "HMSMap.CameraUpdateFactory";
CameraUpdateFactory.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
CameraUpdateFactory.platforms = ["Android"];
CameraUpdateFactory = __decorate([
__metadata("design:paramtypes", [])
], CameraUpdateFactory);
return CameraUpdateFactory;
}());
export { CameraUpdateFactory };
var MapStyleOptions = /** @class */ (function () {
function MapStyleOptions(resourceName) {
this.resourceName = resourceName;
}
MapStyleOptions.loadRawResourceStyle = function (resourceName) {
return new MapStyleOptions(resourceName);
};
MapStyleOptions.prototype.getResourceName = function () {
return this.resourceName;
};
return MapStyleOptions;
}());
export { MapStyleOptions };
var Cap = /** @class */ (function () {
function Cap() {
this.refWidth = null;
this.bitmapDescriptor = null;
}
Cap.prototype.getType = function () {
return this.type;
};
Cap.TYPE_BUTT_CAP = 0;
Cap.TYPE_SQUARE_CAP = 1;
Cap.TYPE_ROUND_CAP = 2;
Cap.TYPE_CUSTOM_CAP = 3;
return Cap;
}());
export { Cap };
var ButtCap = /** @class */ (function (_super) {
__extends(ButtCap, _super);
function ButtCap() {
var _this = _super.call(this) || this;
_this.type = 0;
return _this;
}
return ButtCap;
}(Cap));
export { ButtCap };
var RoundCap = /** @class */ (function (_super) {
__extends(RoundCap, _super);
function RoundCap() {
var _this = _super.call(this) || this;
_this.type = 2;
return _this;
}
return RoundCap;
}(Cap));
export { RoundCap };
var SquareCap = /** @class */ (function (_super) {
__extends(SquareCap, _super);
function SquareCap() {
var _this = _super.call(this) || this;
_this.type = 1;
return _this;
}
return SquareCap;
}(Cap));
export { SquareCap };
var CustomCap = /** @class */ (function (_super) {
__extends(CustomCap, _super);
function CustomCap(bitmapDescriptor, refWidth) {
var _this = _super.call(this) || this;
_this.type = 3;
_this.bitmapDescriptor = bitmapDescriptor;
_this.refWidth = refWidth;
return _this;
}
CustomCap.prototype.getRefWidth = function () {
return this.refWidth;
};
CustomCap.prototype.getBitmapDescriptor = function () {
return this.bitmapDescriptor;
};
return CustomCap;
}(Cap));
export { CustomCap };
var AnimationSet = /** @class */ (function () {
function AnimationSet() {
this.animations = new Map();
}
AnimationSet.prototype.addRotateAnimation = function (animation) {
this.animations.set("Rotate", animation);
};
AnimationSet.prototype.addScaleAnimation = function (animation) {
this.animations.set("Scale", animation);
};
AnimationSet.prototype.addTranslateAnimation = function (animation) {
this.animations.set("Translate", animation);
};
AnimationSet.prototype.addAlphaAnimation = function (animation) {
this.animations.set("Alpha", animation);
};
return AnimationSet;
}());
export { AnimationSet };
export var RadiusUnit;
(function (RadiusUnit) {
RadiusUnit["PIXEL"] = "pixel";
RadiusUnit["METER"] = "meter";
})(RadiusUnit || (RadiusUnit = {}));
/*-------------------------------------------------------------ENUMS----------------------------------------------------------*/
export var TileType;
(function (TileType) {
TileType[TileType["URL_TILE"] = 0] = "URL_TILE";
TileType[TileType["REPETITIVE_TILE"] = 1] = "REPETITIVE_TILE";
TileType[TileType["LOCAL_TILE"] = 2] = "LOCAL_TILE";
})(TileType || (TileType = {}));
export var Color;
(function (Color) {
Color[Color["RED"] = -65536] = "RED";
Color[Color["DARK_GRAY"] = -12303292] = "DARK_GRAY";
Color[Color["GRAY"] = -7829368] = "GRAY";
Color[Color["WHITE"] = -1] = "WHITE";
Color[Color["BLUE"] = -16776961] = "BLUE";
Color[Color["BLACK"] = -16777216] = "BLACK";
Color[Color["LITE_GRAY"] = -3355444] = "LITE_GRAY";
Color[Color["MAGENTA"] = -65281] = "MAGENTA";
Color[Color["YELLOW"] = -256] = "YELLOW";
Color[Color["CYAN"] = -16711681] = "CYAN";
Color[Color["GREEN"] = -16711936] = "GREEN";
Color[Color["TRANSPARENT"] = 0] = "TRANSPARENT";
})(Color || (Color = {}));
export var JointType;
(function (JointType) {
JointType[JointType["ROUND"] = 2] = "ROUND";
JointType[JointType["BEVEL"] = 1] = "BEVEL";
JointType[JointType["DEFAULT"] = 0] = "DEFAULT";
})(JointType || (JointType = {}));
export var MapEvent;
(function (MapEvent) {
MapEvent["ON_INDOOR_BUILDINGS_FOCUSED"] = "onIndoorBuildingsFocused";
MapEvent["ON_INDOOR_LEVEL_ACTIVATED"] = "onIndoorLevelActivated";
MapEvent["ON_MAP_LOADED"] = "onMapLoaded";
MapEvent["ON_CAMERA_IDLE"] = "onCameraIdle";
MapEvent["ON_CAMERA_MOVE_CANCELED"] = "onCameraMoveCanceled";
MapEvent["ON_CAMERA_MOVE"] = "onCameraMove";
MapEvent["ON_CAMERA_MOVE_STARTED"] = "onCameraMoveStarted";
MapEvent["ON_CIRCLE_CLICK"] = "onCircleClick";
MapEvent["ON_GROUND_OVERLAY_CLICK"] = "onGroundOverlayClick";
MapEvent["ON_INFO_WINDOW_CLICK"] = "onInfoWindowClick";
MapEvent["ON_INFO_WINDOW_CLOSE"] = "onInfoWindowClose";
MapEvent["ON_INFO_WINDOW_LONG_CLICK"] = "onInfoWindowLongClick";
MapEvent["ON_MAP_CLICK"] = "onMapClick";
MapEvent["ON_MAP_LONG_CLICK"] = "onMapLongClick";
MapEvent["ON_MARKER_CLICK"] = "onMarkerClick";
MapEvent["ON_MARKER_DRAG_START"] = "onMarkerDragStart";
MapEvent["ON_MARKER_DRAG"] = "onMarkerDrag";
MapEvent["ON_MARKER_DRAG_END"] = "onMarkerDragEnd";
MapEvent["ON_MY_LOCATION_BUTTON_CLICK"] = "onMyLocationButtonClick";
MapEvent["ON_MY_LOCATION_CLICK"] = "onMyLocationClick";
MapEvent["ON_POI_CLICK"] = "onPoiClick";
MapEvent["ON_POLYGON_CLICK"] = "onPolygonClick";
MapEvent["ON_POLYLINE_CLICK"] = "onPolylineClick";
MapEvent["ON_CANCELABLE_CALLBACK_FINISH"] = "onCancelableCallbackFinish";
MapEvent["ON_CANCELABLE_CALLBACK_CANCEL"] = "onCancelableCallbackCancel";
MapEvent["ON_SNAPSHOT_READY_CALLBACK"] = "onSnapshotReadyCallback";
})(MapEvent || (MapEvent = {}));
export var MapType;
(function (MapType) {
MapType[MapType["MAP_TYPE_NONE"] = 0] = "MAP_TYPE_NONE";
MapType[MapType["MAP_TYPE_SATELLITE"] = 2] = "MAP_TYPE_SATELLITE";
MapType[MapType["MAP_TYPE_NORMAL"] = 1] = "MAP_TYPE_NORMAL";
MapType[MapType["MAP_TYPE_HYBRID"] = 4] = "MAP_TYPE_HYBRID";
MapType[MapType["MAP_TYPE_TERRAIN"] = 3] = "MAP_TYPE_TERRAIN";
})(MapType || (MapType = {}));
export var Hue;
(function (Hue) {
Hue[Hue["HUE_GREEN"] = 120] = "HUE_GREEN";
Hue[Hue["HUE_AZURE"] = 210] = "HUE_AZURE";
Hue[Hue["HUE_ROSE"] = 330] = "HUE_ROSE";
Hue[Hue["HUE_CYAN"] = 180] = "HUE_CYAN";
Hue[Hue["HUE_ORANGE"] = 30] = "HUE_ORANGE";
Hue[Hue["HUE_MAGENTA"] = 300] = "HUE_MAGENTA";
Hue[Hue["HUE_VIOLET"] = 270] = "HUE_VIOLET";
Hue[Hue["HUE_YELLOW"] = 60] = "HUE_YELLOW";
Hue[Hue["HUE_BLUE"] = 240] = "HUE_BLUE";
Hue[Hue["HUE_RED"] = 0] = "HUE_RED";
})(Hue || (Hue = {}));
export var PatternItemType;
(function (PatternItemType) {
PatternItemType[PatternItemType["TYPE_GAP"] = 2] = "TYPE_GAP";
PatternItemType[PatternItemType["TYPE_DOT"] = 1] = "TYPE_DOT";
PatternItemType[PatternItemType["TYPE_DASH"] = 0] = "TYPE_DASH";
})(PatternItemType || (PatternItemType = {}));
export var CameraMoveStartedReason;
(function (CameraMoveStartedReason) {
CameraMoveStartedReason[CameraMoveStartedReason["REASON_API_ANIMATION"] = 2] = "REASON_API_ANIMATION";
CameraMoveStartedReason[CameraMoveStartedReason["REASON_DEVELOPER_ANIMATION"] = 3] = "REASON_DEVELOPER_ANIMATION";
CameraMoveStartedReason[CameraMoveStartedReason["REASON_GESTURE"] = 1] = "REASON_GESTURE";
})(CameraMoveStartedReason || (CameraMoveStartedReason = {}));
export var InterpolatorType;
(function (InterpolatorType) {
InterpolatorType[InterpolatorType["LINEAR"] = 0] = "LINEAR";
InterpolatorType[InterpolatorType["ACCELERATE_DECELERATE"] = 1] = "ACCELERATE_DECELERATE";
InterpolatorType[InterpolatorType["ACCELERATE"] = 2] = "ACCELERATE";
InterpolatorType[InterpolatorType["ANTICIPATE"] = 3] = "ANTICIPATE";
InterpolatorType[InterpolatorType["ANTICIPATE_OVERSHOOT"] = 4] = "ANTICIPATE_OVERSHOOT";
InterpolatorType[InterpolatorType["BOUNCE"] = 5] = "BOUNCE";
InterpolatorType[InterpolatorType["CYCLE"] = 6] = "CYCLE";
InterpolatorType[InterpolatorType["DECELERATE"] = 7] = "DECELERATE";
InterpolatorType[InterpolatorType["OVERSHOOT"] = 8] = "OVERSHOOT";
InterpolatorType[InterpolatorType["PATH"] = 9] = "PATH";
})(InterpolatorType || (InterpolatorType = {}));
export var AnimationConstant;
(function (AnimationConstant) {
AnimationConstant[AnimationConstant["FILL_MODE_FORWARDS"] = 0] = "FILL_MODE_FORWARDS";
AnimationConstant[AnimationConstant["FILL_MODE_BACKWARDS"] = 1] = "FILL_MODE_BACKWARDS";
AnimationConstant[AnimationConstant["INFINITE"] = -1] = "INFINITE";
AnimationConstant[AnimationConstant["RESTART"] = 1] = "RESTART";
AnimationConstant[AnimationConstant["REVERSE"] = 2] = "REVERSE";
})(AnimationConstant || (AnimationConstant = {}));
export var Gravity;
(function (Gravity) {
Gravity[Gravity["TOP"] = 48] = "TOP";
Gravity[Gravity["BOTTOM"] = 80] = "BOTTOM";
Gravity[Gravity["START"] = 8388611] = "START";
Gravity[Gravity["END"] = 8388613] = "END";
})(Gravity || (Gravity = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvbmF0aXZlL25neC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sdUNBQStDLE1BQU0sK0JBQStCLENBQUM7OztJQVVoRSwwQkFBMEI7Ozs7SUFFbEQsdUJBQU0sYUFDRixLQUFhLEVBQ2IsZ0JBQWtDLEVBQ2xDLE1BQWtCO0lBTXRCLHdCQUFPLGFBQUMsS0FBYTtJQUtyQiw4QkFBYTtJQUtiLGtDQUFpQixhQUFDLFNBQW9CO0lBS3RDLG1DQUFrQixhQUFDLGFBQTRCO0lBSy9DLGtDQUFpQjtJQUtqQix1Q0FBc0IsYUFDbEIsSUFBWSxFQUNaLEVBQVU7SUFNZCwwQkFBUyxhQUFDLE1BQWM7SUFLeEIsOEJBQWE7SUFLYiw2QkFBWTtJQUtaLDJCQUFVLGFBQUMsV0FBb0I7d0dBM0R0QixNQUFNOzRHQUFOLE1BQU07Ozs7OztJQUFOLE1BQU0sa0JBQU4sTUFBTTtpQkEzQm5CO0VBMkI0QiwwQkFBMEI7U0FBekMsTUFBTTs0RkFBTixNQUFNO2tCQURsQixVQUFVOzhCQUdQLE1BQU0sTUFTTixPQUFPLE1BS1AsYUFBYSxNQUtiLGlCQUFpQixNQUtqQixrQkFBa0IsTUFLbEIsaUJBQWlCLE1BS2pCLHNCQUFzQixNQVF0QixTQUFTLE1BS1QsYUFBYSxNQUtiLFlBQVksTUFLWixVQUFVOztJQWFWO0lBQXdCLENBQUM7SUFFbEIscUNBQWlCLEdBQXhCLFVBQXlCLGNBQThCO1FBQ25ELE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUMzRCxjQUFjLENBQ2pCLENBQUM7SUFDTixDQUFDO0lBRU0sNkJBQVMsR0FBaEIsVUFBaUIs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eUZBQXFCLENBQUE7SUFDckIsbUVBQVUsQ0FBQTtJQUNWLG1FQUFVLENBQUE7SUFDVix1RkFBb0IsQ0FBQTtJQUNwQiwyREFBTSxDQUFBO0lBQ04seURBQUssQ0FBQTtJQUNMLG1FQUFVLENBQUE7SUFDVixpRUFBUyxDQUFBO0lBQ1QsdURBQUksQ0FBQTtBQUNSLENBQUMsRUFYVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBVzNCO0FBRUQsTUFBTSxDQUFOLElBQVksaUJBTVg7QUFORCxXQUFZLGlCQUFpQjtJQUN6QixxRkFBc0IsQ0FBQTtJQUN0Qix1RkFBdUIsQ0FBQTtJQUN2QixrRUFBYSxDQUFBO0lBQ2IsK0RBQVcsQ0FBQTtJQUNYLCtEQUFXLENBQUE7QUFDZixDQUFDLEVBTlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQU01QjtBQUVELE1BQU0sQ0FBTixJQUFZLE9BS1g7QUFMRCxXQUFZLE9BQU87SUFDZixvQ0FBUSxDQUFBO0lBQ1IsMENBQVcsQ0FBQTtJQUNYLDZDQUFlLENBQUE7SUFDZix5Q0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFMVyxPQUFPLEtBQVAsT0FBTyxRQUtsQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAgICBDb3B5cmlnaHQgMjAyMC0yMDI0LiBIdWF3ZWkgVGVjaG5vbG9naWVzIENvLiwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIilcclxuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG5cclxuICAgICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhLCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiwgUGx1Z2luIH0gZnJvbSBcIkBhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9jb3JlXCI7XHJcblxyXG5AUGx1Z2luKHtcclxuICAgIHBsdWdpbk5hbWU6IFwiSE1TTWFwXCIsXHJcbiAgICBwbHVnaW46IFwiY29yZG92YS1wbHVnaW4taG1zLW1hcFwiLFxyXG4gICAgcGx1Z2luUmVmOiBcIkhNU01hcFwiLFxyXG4gICAgcmVwbzogXCJodHRwczovL2dpdGh1Yi5jb20vSE1TLUNvcmUvaG1zLWNvcmRvdmEtcGx1Z2luXCIsXHJcbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sXHJcbn0pXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEhNU01hcCBleHRlbmRzIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIHtcclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBnZXRNYXAoXHJcbiAgICAgICAgZGl2SWQ6IHN0cmluZyxcclxuICAgICAgICBodWF3ZWlNYXBPcHRpb25zOiBIdWF3ZWlNYXBPcHRpb25zLFxyXG4gICAgICAgIGJvdW5kcz86IE1hcEJvdW5kc1xyXG4gICAgKTogUHJvbWlzZTxIdWF3ZWlNYXA+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHNob3dNYXAoZGl2SWQ6IHN0cmluZyk6IFByb21pc2U8SHVhd2VpTWFwPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBoYXNQZXJtaXNzaW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY29udmVydENvb3JkaW5hdGUoTGF0TG5nT2JqOiBMYXRMbmdPYmopOiBQcm9taXNlPExhdExuZ09iaj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY29udmVydENvb3JkaW5hdGVzKExhdExuZ0xpc3RPYmo6IExhdExuZ0xpc3RPYmopOiBQcm9taXNlPExhdExuZ0xpc3RPYmpbXT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuKFxyXG4gICAgICAgIGZyb206IExhdExuZyxcclxuICAgICAgICB0bzogTGF0TG5nXHJcbiAgICApOiBQcm9taXNlPENvbXB1dGVEaXN0YW5jZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgc2V0QXBpS2V5KGFwaUtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBkaXNhYmxlTG9nZ2VyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZW5hYmxlTG9nZ2VyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgaW5pdGlhbGl6ZShyb3V0ZVBvbGljeT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhNU01hcFwiLFxyXG4gICAgcGx1Z2luOiBcImNvcmRvdmEtcGx1Z2luLWhtcy1tYXBcIixcclxuICAgIHBsdWdpblJlZjogXCJITVNNYXAuQ2FtZXJhVXBkYXRlRmFjdG9yeVwiLFxyXG4gICAgcmVwbzogXCJodHRwczovL2dpdGh1Yi5jb20vSE1TLUNvcmUvaG1zLWNvcmRvdmEtcGx1Z2luXCIsXHJcbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYW1lcmFVcGRhdGVGYWN0b3J5IHtcclxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBzdGF0aWMgbmV3Q2FtZXJhUG9zaXRpb24oY2FtZXJhUG9zaXRpb246IENhbWVyYVBvc2l0aW9uKTogQ2FtZXJhVXBkYXRlIHtcclxuICAgICAgICByZXR1cm4gSE1TTWFwLmdldFBsdWdpbigpLkNhbWVyYVVwZGF0ZUZhY3RvcnkubmV3Q2FtZXJhUG9zaXRpb24oXHJcbiAgICAgICAgICAgIGNhbWVyYVBvc2l0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbmV3TGF0TG5nKGxhdExuZzogTGF0TG5nKTogQ2FtZXJhVXBkYXRlIHtcclxuICAgICAgICByZXR1cm4gSE1TTWFwLmdldFBsdWdpbigpLkNhbWVyYVVwZGF0ZUZhY3RvcnkubmV3TGF0TG5nKGxhdExuZyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZ0JvdW5kcyhcclxuICAgICAgICBsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcyxcclxuICAgICAgICBwYWRkaW5nOiBudW1iZXJcclxuICAgICk6IENhbWVyYVVwZGF0ZTtcclxuXHJcbiAgICBzdGF0aWMgbmV3TGF0TG5nQm91bmRzKFxyXG4gICAgICAgIGxhdExuZ0JvdW5kczogTGF0TG5nQm91bmRzLFxyXG4gICAgICAgIHBhZGRpbmc6IG51bWJlcixcclxuICAgICAgICB3aWR0aD86IG51bWJlcixcclxuICAgICAgICBoZWlnaHQ/OiBudW1iZXJcclxuICAgICk6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0xhdExuZ0JvdW5kcyhcclxuICAgICAgICAgICAgbGF0TG5nQm91bmRzLFxyXG4gICAgICAgICAgICBwYWRkaW5nLFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbmV3TGF0TG5nWm9vbShsYXRMbmc6IExhdExuZywgem9vbTogbnVtYmVyKTogQ2FtZXJhVXBkYXRlIHtcclxuICAgICAgICByZXR1cm4gSE1TTWFwLmdldFBsdWdpbigpLkNhbWVyYVVwZGF0ZUZhY3RvcnkubmV3TGF0TG5nWm9vbShcclxuICAgICAgICAgICAgbGF0TG5nLFxyXG4gICAgICAgICAgICB6b29tXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2Nyb2xsQnkoeFBpeGVsOiBudW1iZXIsIHlQaXhlbDogbnVtYmVyKTogQ2FtZXJhVXBkYXRlIHtcclxuICAgICAgICByZXR1cm4gSE1TTWFwLmdldFBsdWdpbigpLkNhbWVyYVVwZGF0ZUZhY3Rvcnkuc2Nyb2xsQnkoeFBpeGVsLCB5UGl4ZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB6b29tQnkoYW1vdW50OiBudW1iZXIpOiBDYW1lcmFVcGRhdGU7XHJcblxyXG4gICAgc3RhdGljIHpvb21CeShhbW91bnQ6IG51bWJlciwgZm9jdXM/OiBQb2ludCk6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lnpvb21CeShhbW91bnQsIGZvY3VzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgem9vbUluKCk6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lnpvb21JbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB6b29tT3V0KCk6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lnpvb21PdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgem9vbVRvKHpvb206IG51bWJlcik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lnpvb21Ubyh6b29tKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcFN0eWxlT3B0aW9ucyB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgY29uc3RydWN0b3IocmVzb3VyY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJlc291cmNlTmFtZSA9IHJlc291cmNlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGxvYWRSYXdSZXNvdXJjZVN0eWxlKHJlc291cmNlTmFtZTogc3RyaW5nKTogTWFwU3R5bGVPcHRpb25zIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcFN0eWxlT3B0aW9ucyhyZXNvdXJjZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJlc291cmNlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTmFtZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhcCB7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVFlQRV9CVVRUX0NBUCA9IDA7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVFlQRV9TUVVBUkVfQ0FQID0gMTtcclxuICAgIHN0YXRpYyByZWFkb25seSBUWVBFX1JPVU5EX0NBUCA9IDI7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVFlQRV9DVVNUT01fQ0FQID0gMztcclxuICAgIHByb3RlY3RlZCB0eXBlOiBudW1iZXI7XHJcbiAgICBwcm90ZWN0ZWQgcmVmV2lkdGg/OiBudW1iZXIgPSBudWxsO1xyXG4gICAgcHJvdGVjdGVkIGJpdG1hcERlc2NyaXB0b3I/OiBCaXRtYXBEZXNjcmlwdG9yID0gbnVsbDtcclxuXHJcbiAgICBnZXRUeXBlKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRDYXAgZXh0ZW5kcyBDYXAge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnR5cGUgPSAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm91bmRDYXAgZXh0ZW5kcyBDYXAge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnR5cGUgPSAyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3F1YXJlQ2FwIGV4dGVuZHMgQ2FwIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gMTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUNhcCBleHRlbmRzIENhcCB7XHJcbiAgICBjb25zdHJ1Y3RvcihiaXRtYXBEZXNjcmlwdG9yOiBCaXRtYXBEZXNjcmlwdG9yLCByZWZXaWR0aD86IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gMztcclxuICAgICAgICB0aGlzLmJpdG1hcERlc2NyaXB0b3IgPSBiaXRtYXBEZXNjcmlwdG9yO1xyXG4gICAgICAgIHRoaXMucmVmV2lkdGggPSByZWZXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZWZXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZldpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJpdG1hcERlc2NyaXB0b3IoKTogQml0bWFwRGVzY3JpcHRvciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYml0bWFwRGVzY3JpcHRvcjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvblNldCB7XHJcbiAgICByZWFkb25seSBhbmltYXRpb25zOiBNYXA8c3RyaW5nLCBBbmltYXRpb24+ID0gbmV3IE1hcDxzdHJpbmcsIEFuaW1hdGlvbj4oKTtcclxuXHJcbiAgICBhZGRSb3RhdGVBbmltYXRpb24oYW5pbWF0aW9uOiBSb3RhdGVBbmltYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbnMuc2V0KFwiUm90YXRlXCIsIGFuaW1hdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2NhbGVBbmltYXRpb24oYW5pbWF0aW9uOiBTY2FsZUFuaW1hdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9ucy5zZXQoXCJTY2FsZVwiLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRyYW5zbGF0ZUFuaW1hdGlvbihhbmltYXRpb246IFRyYW5zbGF0ZUFuaW1hdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9ucy5zZXQoXCJUcmFuc2xhdGVcIiwgYW5pbWF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBbHBoYUFuaW1hdGlvbihhbmltYXRpb246IEFscGhhQW5pbWF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25zLnNldChcIkFscGhhXCIsIGFuaW1hdGlvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL0lOVEVSRkFDRVMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVpU2V0dGluZ3Mge1xyXG4gICAgaXNDb21wYXNzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNJbmRvb3JMZXZlbFBpY2tlckVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzTWFwVG9vbGJhckVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzTXlMb2NhdGlvbkJ1dHRvbkVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzUm90YXRlR2VzdHVyZXNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1Njcm9sbEdlc3R1cmVzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNTY3JvbGxHZXN0dXJlc0VuYWJsZWREdXJpbmdSb3RhdGVPclpvb20oKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzVGlsdEdlc3R1cmVzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNab29tQ29udHJvbHNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1pvb21HZXN0dXJlc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIHNldEFsbEdlc3R1cmVzRW5hYmxlZChhbGxHZXN0dXJlc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q29tcGFzc0VuYWJsZWQoY29tcGFzc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0SW5kb29yTGV2ZWxQaWNrZXJFbmFibGVkKFxyXG4gICAgICAgIGluZG9vckxldmVsUGlja2VyRW5hYmxlZDogYm9vbGVhblxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcFRvb2xiYXJFbmFibGVkKG1hcFRvb2xiYXJFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE15TG9jYXRpb25CdXR0b25FbmFibGVkKG15TG9jYXRpb25CdXR0b25FbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFJvdGF0ZUdlc3R1cmVzRW5hYmxlZChyb3RhdGVHZXN0dXJlc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U2Nyb2xsR2VzdHVyZXNFbmFibGVkKHNjcm9sbEdlc3R1cmVzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTY3JvbGxHZXN0dXJlc0VuYWJsZWREdXJpbmdSb3RhdGVPclpvb20oXHJcbiAgICAgICAgc2Nyb2xsR2VzdHVyZXNFbmFibGVkRHVyaW5nUm90YXRlT3Jab29tOiBib29sZWFuXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VGlsdEdlc3R1cmVzRW5hYmxlZCh0aWx0R2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpvb21Db250cm9sc0VuYWJsZWQoem9vbUNvbnRyb2xzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRab29tR2VzdHVyZXNFbmFibGVkKHpvb21HZXN0dXJlc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0R2VzdHVyZVNjYWxlQnlNYXBDZW50ZXIoXHJcbiAgICAgICAgZ2VzdHVyZVNjYWxlQnlNYXBDZW50ZXJFbmFibGVkOiBib29sZWFuXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TWFya2VyQ2x1c3RlckNvbG9yKG1hcmtlckNsdXN0ZXJDb2xvcjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcmtlckNsdXN0ZXJJY29uKG1hcmtlckNsdXN0ZXJJY29uOiBCaXRtYXBEZXNjcmlwdG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcmtlckNsdXN0ZXJUZXh0Q29sb3IobWFya2VyQ2x1c3RlclRleHRDb2xvcjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldExvZ29Qb3NpdGlvbihsb2dvUG9zaXRpb246IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRMb2dvUGFkZGluZyhcclxuICAgICAgICBwYWRkaW5nU3RhcnQ6IG51bWJlcixcclxuICAgICAgICBwYWRkaW5nVG9wOiBudW1iZXIsXHJcbiAgICAgICAgcGFkZGluZ0VuZDogbnVtYmVyLFxyXG4gICAgICAgIHBhZGRpbmdCb3R0b206IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIdWF3ZWlNYXAge1xyXG4gICAgb24oZXZlbnQ6IE1hcEV2ZW50LCBjYWxsYmFjazogKHZhbDogYW55KSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGRlc3Ryb3lNYXAoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGhpZGVNYXAoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGdldENvbXBvbmVudChrZXk6IHN0cmluZyk6IGFueTtcclxuICAgIHJlbW92ZUNvbXBvbmVudChrZXk6IHN0cmluZyk6IHZvaWQ7XHJcbiAgICBnZXRJZCgpOiBudW1iZXI7XHJcbiAgICBzY3JvbGwoKTogdm9pZDtcclxuICAgIHN5bmNEaW1lbnNpb25zKCk6IHZvaWQ7XHJcbiAgICBhZGRDaXJjbGUoY2lyY2xlT3B0aW9uczogQ2lyY2xlT3B0aW9ucyk6IFByb21pc2U8Q2lyY2xlPjtcclxuICAgIGFkZEhlYXRNYXAoaGVhdE1hcE9wdGlvbnM6IEhlYXRNYXBPcHRpb25zKTogUHJvbWlzZTxIZWF0TWFwPlxyXG4gICAgYWRkTWFya2VyKG1hcmtlck9wdGlvbnM6IE1hcmtlck9wdGlvbnMpOiBQcm9taXNlPE1hcmtlcj47XHJcbiAgICBhZGRHcm91bmRPdmVybGF5KFxyXG4gICAgICAgIGdyb3VuZE92ZXJsYXlPcHRpb25zOiBHcm91bmRPdmVybGF5T3B0aW9uc1xyXG4gICAgKTogUHJvbWlzZTxHcm91bmRPdmVybGF5PjtcclxuICAgIGFkZFRpbGVPdmVybGF5KFxyXG4gICAgICAgIHRpbGVPdmVybGF5T3B0aW9uczogVGlsZU92ZXJsYXlPcHRpb25zXHJcbiAgICApOiBQcm9taXNlPFRpbGVPdmVybGF5PjtcclxuICAgIGFkZFBvbHlnb24ocG9seWdvbk9wdGlvbnM6IFBvbHlnb25PcHRpb25zKTogUHJvbWlzZTxQb2x5Z29uPjtcclxuICAgIGFkZFBvbHlsaW5lKHBvbHlsaW5lT3B0aW9uczogUG9seWxpbmVPcHRpb25zKTogUHJvbWlzZTxQb2x5bGluZT47XHJcbiAgICBhbmltYXRlQ2FtZXJhKGNhbWVyYVVwZGF0ZTogQ2FtZXJhVXBkYXRlKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGFuaW1hdGVDYW1lcmEoXHJcbiAgICAgICAgY2FtZXJhVXBkYXRlOiBDYW1lcmFVcGRhdGUsXHJcbiAgICAgICAgY2FuY2VsYWJsZUNhbGxiYWNrOiBDYW5jZWxhYmxlQ2FsbGJhY2tcclxuICAgICk6IFByb21pc2U8dm9pZD47XHJcbiAgICBhbmltYXRlQ2FtZXJhKFxyXG4gICAgICAgIGNhbWVyYVVwZGF0ZTogQ2FtZXJhVXBkYXRlLFxyXG4gICAgICAgIGNhbmNlbGFibGVDYWxsYmFjaz86IENhbmNlbGFibGVDYWxsYmFjayxcclxuICAgICAgICBkdXJhdGlvbk1zPzogbnVtYmVyXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgbW92ZUNhbWVyYShjYW1lcmFVcGRhdGU6IENhbWVyYVVwZGF0ZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBjbGVhcigpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgcmVzZXRNaW5NYXhab29tUHJlZmVyZW5jZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc3RvcEFuaW1hdGlvbigpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgZ2V0Q2FtZXJhUG9zaXRpb24oKTogUHJvbWlzZTxDYW1lcmFQb3NpdGlvbj47XHJcbiAgICBnZXRNYXBUeXBlKCk6IFByb21pc2U8TWFwVHlwZT47XHJcbiAgICBnZXRNYXhab29tTGV2ZWwoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0TWluWm9vbUxldmVsKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFByb2plY3Rpb24oKTogUHJvamVjdGlvbjtcclxuICAgIGdldFVpU2V0dGluZ3MoKTogVWlTZXR0aW5ncztcclxuICAgIGdldFNjYWxlUGVyUGl4ZWwoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0TXlMb2NhdGlvblN0eWxlKCk6IFByb21pc2U8TXlMb2NhdGlvblN0eWxlPjtcclxuICAgIGlzQnVpbGRpbmdzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNEYXJrKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc015TG9jYXRpb25FbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1RyYWZmaWNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0luZG9vckVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIFxyXG4gICAgc2V0QnVpbGRpbmdzRW5hYmxlZChidWlsZGluZ3NFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldERhcmtFbmFibGVkKGRhcmtFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENvbnRlbnREZXNjcmlwdGlvbihjb250ZW50RGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJbmZvV2luZG93QWRhcHRlcihpbmZvV2luZG93QWRhcHRlcjogSW5mb1dpbmRvd0FkYXB0ZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TGF0TG5nQm91bmRzRm9yQ2FtZXJhVGFyZ2V0KFxyXG4gICAgICAgIGxhdExuZ0JvdW5kc0ZvckNhbWVyYVRhcmdldDogTGF0TG5nQm91bmRzXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TG9jYXRpb25Tb3VyY2UobG9jYXRpb25Tb3VyY2U6IExvY2F0aW9uU291cmNlKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcFN0eWxlKG1hcFN0eWxlOiBNYXBTdHlsZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TWFwVHlwZShtYXBUeXBlOiBNYXBUeXBlKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcmtlcnNDbHVzdGVyaW5nKG1hcmtlcnNDbHVzdGVyaW5nOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1heFpvb21QcmVmZXJlbmNlKG1heFpvb21QcmVmZXJlbmNlOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TWluWm9vbVByZWZlcmVuY2UobWluWm9vbVByZWZlcmVuY2U6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNeUxvY2F0aW9uRW5hYmxlZChteUxvY2F0aW9uRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQYWRkaW5nKFxyXG4gICAgICAgIGxlZnQ6IG51bWJlcixcclxuICAgICAgICB0b3A6IG51bWJlcixcclxuICAgICAgICByaWdodDogbnVtYmVyLFxyXG4gICAgICAgIGJvdHRvbTogbnVtYmVyXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VHJhZmZpY0VuYWJsZWQodHJhZmZpY0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc25hcHNob3QoXHJcbiAgICAgICAgb25SZWFkeUNhbGxiYWNrOiAoc25hcHNob3Q6IFNuYXBzaG90UmVzdWx0KSA9PiB2b2lkXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TWFwUG9pbnRlcnNFbmFibGVkKG1hcFBvaW50ZXJzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBpc01hcFBvaW50ZXJzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgc2V0UG9pbnRUb0NlbnRlcih4OiBudW1iZXIsIHk6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHlsZUlkKHN0eWxlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBwcmV2aWV3SWQocHJldmlld0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TXlMb2NhdGlvblN0eWxlKHN0eWxlOiBNeUxvY2F0aW9uU3R5bGUpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbWVyYVVwZGF0ZSB7XHJcbiAgICBtb3ZlQ2FtZXJhKG1hcElkOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICBhbmltYXRlQ2FtZXJhKG1hcElkOiBzdHJpbmcsIHByb3BzOiBhbnkpOiBQcm9taXNlPGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2lyY2xlIHtcclxuICAgIGdldENlbnRlcigpOiBQcm9taXNlPExhdExuZz47XHJcbiAgICBnZXRGaWxsQ29sb3IoKTogUHJvbWlzZTxDb2xvcj47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRSYWRpdXMoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0U3Ryb2tlQ29sb3IoKTogUHJvbWlzZTxDb2xvcj47XHJcbiAgICBnZXRTdHJva2VQYXR0ZXJuKCk6IFByb21pc2U8UGF0dGVybkl0ZW1bXT47XHJcbiAgICBnZXRTdHJva2VXaWR0aCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRUYWcoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgZ2V0WkluZGV4KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGlzQ2xpY2thYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1Zpc2libGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc3RhcnRBbmltYXRpb24oKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGNsZWFyQW5pbWF0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj47IFxyXG4gICAgc2V0Q2VudGVyKGNlbnRlcjogTGF0TG5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEZpbGxDb2xvcihmaWxsQ29sb3I6IENvbG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFJhZGl1cyhyYWRpdXM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VDb2xvcihzdHJva2VDb2xvcjogQ29sb3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlUGF0dGVybihzdHJva2VQYXR0ZXJuOiBQYXR0ZXJuSXRlbVtdKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VGFnKHRhZzogYW55KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDbGlja2FibGUoY2xpY2thYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRBbmltYXRpb24oYW5pbWF0aW9uOiBBbmltYXRpb25TZXQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhlYXRNYXAge1xyXG5cclxuICAgIGdldElkKCk6IHN0cmluZztcclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgY2hhbmdlRGF0YVNldChqc29uRGF0YTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGNoYW5nZURhdGFTZXRJZChyZXNvdXJjZUlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgZ2V0UmFkaXVzVW5pdCgpOiBQcm9taXNlPFJhZGl1c1VuaXQ+O1xyXG4gICAgc2V0UmFkaXVzVW5pdChyYWRpdXNVbml0OiBSYWRpdXNVbml0KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENvbG9yKGNvbG9yOiBNYXA8bnVtYmVyLCBOdW1iZXJbXT4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0SW50ZW5zaXR5KGludGVuc2l0eTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEludGVuc2l0aWVzKGludGVuc2l0aWVzOiBNYXA8bnVtYmVyLCBudW1iZXI+KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE9wYWNpdHkob3BhY2l0eTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE9wYWNpdGllcyhPcGFjaXRpZXM6IE1hcDxudW1iZXIsIG51bWJlcj4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UmFkaXVzKHJhZGl1czogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFJhZGl1c2VzKHJhZGl1c2VzOiBNYXA8bnVtYmVyLCBudW1iZXI+KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VuZE92ZXJsYXkge1xyXG4gICAgZ2V0QmVhcmluZygpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRCb3VuZHMoKTogUHJvbWlzZTxMYXRMbmdCb3VuZHM+O1xyXG4gICAgZ2V0SGVpZ2h0KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldElkKCk6IHN0cmluZztcclxuICAgIGdldFBvc2l0aW9uKCk6IFByb21pc2U8TGF0TG5nPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRUcmFuc3BhcmVuY3koKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0V2lkdGgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0WkluZGV4KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGlzQ2xpY2thYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1Zpc2libGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBzZXRCZWFyaW5nKGJlYXJpbmc6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDbGlja2FibGUoY2xpY2thYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldERpbWVuc2lvbnMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0RGltZW5zaW9ucyh3aWR0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEltYWdlKGltYWdlRGVzY3JpcHRvcjogQml0bWFwRGVzY3JpcHRvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb3NpdGlvbihwb3NpdGlvbjogTGF0TG5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFBvc2l0aW9uRnJvbUJvdW5kcyhwb3NpdGlvbkxhdExuZ0JvdW5kczogTGF0TG5nQm91bmRzKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRhZyh0YWc6IGFueSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUcmFuc3BhcmVuY3kodHJhbnNwYXJlbmN5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWFya2VyIHtcclxuICAgIGdldEFscGhhKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldElkKCk6IHN0cmluZztcclxuICAgIGdldFBvc2l0aW9uKCk6IFByb21pc2U8TGF0TG5nPjtcclxuICAgIGdldFJvdGF0aW9uKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFNuaXBwZXQoKTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gICAgZ2V0VGFnKCk6IFByb21pc2U8YW55PjtcclxuICAgIGdldFRpdGxlKCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc1Zpc2libGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzQ2x1c3RlcmFibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzRHJhZ2dhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0ZsYXQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzSW5mb1dpbmRvd1Nob3duKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgaGlkZUluZm9XaW5kb3coKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNob3dJbmZvV2luZG93KCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzdGFydEFuaW1hdGlvbigpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgIHNldEFscGhhKGFscGhhOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0QW5pbWF0aW9uKGFuaW1hdGlvbjogQW5pbWF0aW9uU2V0KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldERyYWdnYWJsZShkcmFnZ2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0RmxhdChmbGF0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEljb24oaWNvbjogQml0bWFwRGVzY3JpcHRvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJbmZvV2luZG93QW5jaG9yKHU6IG51bWJlciwgdjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcmtlckFuY2hvcih1OiBudW1iZXIsIHY6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb3NpdGlvbihsYXRMbmc6IExhdExuZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSb3RhdGlvbihyb3RhdGlvbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFNuaXBwZXQoc25pcHBldDogU3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VGFnKHRhZzogYW55KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9seWdvbiB7XHJcbiAgICBnZXRGaWxsQ29sb3IoKTogUHJvbWlzZTxDb2xvcj47XHJcbiAgICBnZXRIb2xlcygpOiBQcm9taXNlPExhdExuZ1tdW10+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0UG9pbnRzKCk6IFByb21pc2U8TGF0TG5nW10+O1xyXG4gICAgZ2V0U3Ryb2tlQ29sb3IoKTogUHJvbWlzZTxDb2xvcj47XHJcbiAgICBnZXRTdHJva2VKb2ludFR5cGUoKTogUHJvbWlzZTxKb2ludFR5cGU+O1xyXG4gICAgZ2V0U3Ryb2tlUGF0dGVybigpOiBQcm9taXNlPFBhdHRlcm5JdGVtW10+O1xyXG4gICAgZ2V0U3Ryb2tlV2lkdGgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0VGFnKCk6IFByb21pc2U8YW55PjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0dlb2Rlc2ljKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gICAgcmVtb3ZlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRGaWxsQ29sb3IoY29sb3I6IENvbG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEdlb2Rlc2ljKGdlb2Rlc2ljOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEhvbGVzKGhvbGVzOiBMYXRMbmdbXVtdKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFBvaW50cyhwb2ludHM6IExhdExuZ1tdKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0cm9rZUNvbG9yKGNvbG9yOiBDb2xvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VKb2ludFR5cGUoam9pbnRUeXBlOiBKb2ludFR5cGUpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlUGF0dGVybihwYXR0ZXJuSXRlbTogUGF0dGVybkl0ZW1bXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VXaWR0aCh3aWR0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRhZyh0YWc6IGFueSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQb2x5bGluZSB7XHJcbiAgICBnZXRDb2xvcigpOiBQcm9taXNlPENvbG9yPjtcclxuICAgIGdldEVuZENhcCgpOiBQcm9taXNlPENhcD47XHJcbiAgICBnZXRTdGFydENhcCgpOiBQcm9taXNlPENhcD47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRKb2ludFR5cGUoKTogUHJvbWlzZTxKb2ludFR5cGU+O1xyXG4gICAgZ2V0UGF0dGVybigpOiBQcm9taXNlPFBhdHRlcm5JdGVtW10+O1xyXG4gICAgZ2V0UG9pbnRzKCk6IFByb21pc2U8TGF0TG5nW10+O1xyXG4gICAgZ2V0VGFnKCk6IFByb21pc2U8YW55PjtcclxuICAgIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNHZW9kZXNpYygpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gICAgcmVtb3ZlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb2xvcihjb2xvcjogQ29sb3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3RhcnRDYXAoc3RhcnRDYXA6IENhcCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRFbmRDYXAoZW5kQ2FwOiBDYXApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0R2VvZGVzaWMoZ2VvZGVzaWM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Sm9pbnRUeXBlKGpvaW50VHlwZTogSm9pbnRUeXBlKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFBhdHRlcm4ocGF0dGVybjogUGF0dGVybkl0ZW1bXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb2ludHMocG9pbnRzOiBMYXRMbmdbXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUYWcodGFnOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFdpZHRoKHdpZHRoOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEdyYWRpZW50KG9uOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENvbG9yVmFsdWVzKGNvbG9yczogQ29sb3JbXSk6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGlsZU92ZXJsYXkge1xyXG4gICAgZ2V0RmFkZUluKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRUcmFuc3BhcmVuY3koKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0WkluZGV4KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGlzVmlzaWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgY2xlYXJUaWxlQ2FjaGUoKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBzZXRGYWRlSW4oZmFkZUluOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRyYW5zcGFyZW5jeSh