UNPKG

@hmscore/cordova-plugin-hms-map

Version:
310 lines (306 loc) 64.3 kB
/* 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