UNPKG

@boldadmin/angular-google-maps

Version:
279 lines 23 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Output } from '@angular/core'; import { EventPublisher } from '@boldadmin/event-publisher'; import * as moment from 'moment'; import { mapsText } from './angular-google-maps.constant'; import { AngularGoogleMapsBuilder } from './service/angular-google-maps-builder.service'; import { AngularGoogleMapsGeocoder } from './service/angular-google-maps-geocoder.service'; import { GoogleMapsFactory } from './service/google-maps-factory.service'; import { IconRegistry } from './service/icon-registry/icon-registry'; var AngularGoogleMapsComponent = /** @class */ (function () { function AngularGoogleMapsComponent(googleMapsFactory, googleMapsBuilder, googleMapsGeocoder, eventPublisher, iconRegistry) { this.googleMapsFactory = googleMapsFactory; this.googleMapsBuilder = googleMapsBuilder; this.googleMapsGeocoder = googleMapsGeocoder; this.eventPublisher = eventPublisher; this.iconRegistry = iconRegistry; this.mapsText = mapsText; this.address = ''; this.mapOptions = { center: { lat: 0, lng: 0 }, mapTypeControlOptions: { mapTypeIds: ['roadmap', 'satellite'], position: this.googleMapsFactory.getGoogleMaps().ControlPosition.LEFT_BOTTOM }, zoom: 16, controlSize: 22, fullscreenControl: false }; this.markerOptions = { position: { lat: 0, lng: 0 }, draggable: true, animation: this.googleMapsFactory.getGoogleMaps().Animation.DROP }; this.circleOptions = { strokeColor: '#448aff', strokeOpacity: 0.8, strokeWeight: 2, fillColor: '#448aff', fillOpacity: 0.35, editable: true, radius: 70 }; this.previousMarkerIcon = { url: 'http://cdn.boldadmin.com.s3-website-eu-west-1.amazonaws.com/previous-marker.png' }; this.currentMarkerIcon = { url: 'http://cdn.boldadmin.com.s3-website-eu-west-1.amazonaws.com/current-marker.png' }; } /** * @return {?} */ AngularGoogleMapsComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.eventPublisher.subscribe('addressReverseGeocoded', (/** * @param {?} address * @return {?} */ function (address) { return _this.address = address; })); this.iconRegistry.register('expand', './assets/expand.svg'); this.iconRegistry.register('collapse', './assets/collapse.svg'); }; /** * @return {?} */ AngularGoogleMapsComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.eventPublisher.unsubscribeAll('addressReverseGeocoded'); }; /** * @param {?} focusLocation * @return {?} */ AngularGoogleMapsComponent.prototype.createMapByLocation = /** * @param {?} focusLocation * @return {?} */ function (focusLocation) { var _this = this; this.googleMapsGeocoder.reverseGeocode(focusLocation.coordinates, (/** * @param {?} address * @return {?} */ function (address) { return _this.address = address; })); this.circleOptions.radius = focusLocation.radiusInMeters; this.changeMapCenter(focusLocation.coordinates); this.googleMapsBuilder .createMap(this.mapOptions) .addCenterMarker(this.markerOptions) .addCircle(this.circleOptions) .bindCircleToMarker() .addSearchBox(); }; /** * @param {?} address * @return {?} */ AngularGoogleMapsComponent.prototype.createMapByAddress = /** * @param {?} address * @return {?} */ function (address) { var _this = this; this.googleMapsGeocoder.geocode(address, (/** * @param {?} coordinates * @return {?} */ function (coordinates) { _this.changeMapCenter(coordinates); _this.googleMapsBuilder .createMap(_this.mapOptions) .addCenterMarker(_this.markerOptions) .addCircle(_this.circleOptions) .bindCircleToMarker() .hideMarker() .hideCircle() .addSearchBox(); })); }; /** * @return {?} */ AngularGoogleMapsComponent.prototype.notifyMapResize = /** * @return {?} */ function () { this.eventPublisher.notify('resizeMap'); }; /** * @param {?} timestampCoordinatesList * @param {?} name * @return {?} */ AngularGoogleMapsComponent.prototype.addTravelPath = /** * @param {?} timestampCoordinatesList * @param {?} name * @return {?} */ function (timestampCoordinatesList, name) { var _this = this; timestampCoordinatesList.forEach((/** * @param {?} timestampCoordinates * @param {?} index * @return {?} */ function (timestampCoordinates, index) { /** @type {?} */ var icon = index === 0 ? _this.currentMarkerIcon : _this.previousMarkerIcon; /** @type {?} */ var dateTime = moment.utc(timestampCoordinates.timestamp).format('YYYY.MM.DD HH:mm'); _this.googleMapsBuilder.addMarker({ position: _this.googleMapsFactory.createLatLng(timestampCoordinates.coordinates), title: "Name: " + name + ", Time: " + dateTime, icon: icon }); })); /** @type {?} */ var latLngs = timestampCoordinatesList.map((/** * @param {?} value * @return {?} */ function (value) { return _this.googleMapsFactory.createLatLng(value.coordinates); })); this.addPolyline(latLngs, '#' + Math.random().toString(16).substr(2, 6)); }; /** * @private * @param {?} path * @param {?} colorCode * @return {?} */ AngularGoogleMapsComponent.prototype.addPolyline = /** * @private * @param {?} path * @param {?} colorCode * @return {?} */ function (path, colorCode) { this.googleMapsBuilder.addPolyline({ geodesic: true, strokeOpacity: 0.8, strokeWeight: 1, path: path, strokeColor: colorCode }); }; /** * @private * @param {?} coordinates * @return {?} */ AngularGoogleMapsComponent.prototype.changeMapCenter = /** * @private * @param {?} coordinates * @return {?} */ function (coordinates) { this.mapOptions.center = { lat: coordinates.latitude, lng: coordinates.longitude }; }; AngularGoogleMapsComponent.decorators = [ { type: Component, args: [{ selector: 'google-maps', template: "<input id=\"search-input\" name=\"searchBox\" class=\"controls\" type=\"text\"\n placeholder=\"{{mapsText.searchBox}}\"\n [ngModelOptions]=\"{standalone: true}\"\n [(ngModel)]=\"address\"/>\n<mat-icon id=\"expand-icon\" class=\"resize-control\" svgIcon=\"expand\" (click)=\"notifyMapResize()\"></mat-icon>\n<mat-icon id=\"collapse-icon\" class=\"resize-control\" svgIcon=\"collapse\" (click)=\"notifyMapResize()\"></mat-icon>\n\n<div id=\"map\"></div>\n", providers: [AngularGoogleMapsBuilder] }] } ]; /** @nocollapse */ AngularGoogleMapsComponent.ctorParameters = function () { return [ { type: GoogleMapsFactory }, { type: AngularGoogleMapsBuilder }, { type: AngularGoogleMapsGeocoder }, { type: EventPublisher }, { type: IconRegistry } ]; }; AngularGoogleMapsComponent.propDecorators = { mapOptions: [{ type: Output }], markerOptions: [{ type: Output }], circleOptions: [{ type: Output }], previousMarkerIcon: [{ type: Output }], currentMarkerIcon: [{ type: Output }] }; return AngularGoogleMapsComponent; }()); export { AngularGoogleMapsComponent }; if (false) { /** @type {?} */ AngularGoogleMapsComponent.prototype.mapsText; /** @type {?} */ AngularGoogleMapsComponent.prototype.address; /** @type {?} */ AngularGoogleMapsComponent.prototype.mapOptions; /** @type {?} */ AngularGoogleMapsComponent.prototype.markerOptions; /** @type {?} */ AngularGoogleMapsComponent.prototype.circleOptions; /** @type {?} */ AngularGoogleMapsComponent.prototype.previousMarkerIcon; /** @type {?} */ AngularGoogleMapsComponent.prototype.currentMarkerIcon; /** * @type {?} * @private */ AngularGoogleMapsComponent.prototype.googleMapsFactory; /** * @type {?} * @private */ AngularGoogleMapsComponent.prototype.googleMapsBuilder; /** * @type {?} * @private */ AngularGoogleMapsComponent.prototype.googleMapsGeocoder; /** * @type {?} * @private */ AngularGoogleMapsComponent.prototype.eventPublisher; /** * @type {?} * @private */ AngularGoogleMapsComponent.prototype.iconRegistry; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1nb29nbGUtbWFwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYm9sZGFkbWluL2FuZ3VsYXItZ29vZ2xlLW1hcHMvIiwic291cmNlcyI6WyJhbmd1bGFyLWdvb2dsZS1tYXBzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUE7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUE7QUFDMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBVXBFO0lBbURJLG9DQUFvQixpQkFBb0MsRUFDcEMsaUJBQTJDLEVBQzNDLGtCQUE2QyxFQUM3QyxjQUE4QixFQUM5QixZQUEwQjtRQUoxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUM3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFoRDlDLGFBQVEsR0FBRyxRQUFRLENBQUE7UUFDbkIsWUFBTyxHQUFHLEVBQUUsQ0FBQTtRQUVGLGVBQVUsR0FBZTtZQUMvQixNQUFNLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxFQUFFLENBQUM7YUFDVDtZQUNELHFCQUFx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SW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEV2ZW50UHVibGlzaGVyIH0gZnJvbSAnQGJvbGRhZG1pbi9ldmVudC1wdWJsaXNoZXInXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgbWFwc1RleHQgfSBmcm9tICcuL2FuZ3VsYXItZ29vZ2xlLW1hcHMuY29uc3RhbnQnXG5pbXBvcnQgeyBBbmd1bGFyR29vZ2xlTWFwc0J1aWxkZXIgfSBmcm9tICcuL3NlcnZpY2UvYW5ndWxhci1nb29nbGUtbWFwcy1idWlsZGVyLnNlcnZpY2UnXG5pbXBvcnQgeyBBbmd1bGFyR29vZ2xlTWFwc0dlb2NvZGVyIH0gZnJvbSAnLi9zZXJ2aWNlL2FuZ3VsYXItZ29vZ2xlLW1hcHMtZ2VvY29kZXIuc2VydmljZSdcbmltcG9ydCB7IEdvb2dsZU1hcHNGYWN0b3J5IH0gZnJvbSAnLi9zZXJ2aWNlL2dvb2dsZS1tYXBzLWZhY3Rvcnkuc2VydmljZSdcbmltcG9ydCB7IEljb25SZWdpc3RyeSB9IGZyb20gJy4vc2VydmljZS9pY29uLXJlZ2lzdHJ5L2ljb24tcmVnaXN0cnknXG5pbXBvcnQgeyBDb29yZGluYXRlcyB9IGZyb20gJy4vdmFsdWUtb2JqZWN0L2Nvb3JkaW5hdGVzJ1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICcuL3ZhbHVlLW9iamVjdC9sb2NhdGlvbidcbmltcG9ydCB7IFRpbWVzdGFtcENvb3JkaW5hdGVzIH0gZnJvbSAnLi92YWx1ZS1vYmplY3QvdGltZXN0YW1wLWNvb3JkaW5hdGVzJ1xuaW1wb3J0IENpcmNsZU9wdGlvbnMgPSBnb29nbGUubWFwcy5DaXJjbGVPcHRpb25zXG5pbXBvcnQgSWNvbiA9IGdvb2dsZS5tYXBzLkljb25cbmltcG9ydCBMYXRMbmcgPSBnb29nbGUubWFwcy5MYXRMbmdcbmltcG9ydCBNYXBPcHRpb25zID0gZ29vZ2xlLm1hcHMuTWFwT3B0aW9uc1xuaW1wb3J0IE1hcmtlck9wdGlvbnMgPSBnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ29vZ2xlLW1hcHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnYW5ndWxhci1nb29nbGUtbWFwcy5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtBbmd1bGFyR29vZ2xlTWFwc0J1aWxkZXJdXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJHb29nbGVNYXBzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgbWFwc1RleHQgPSBtYXBzVGV4dFxuICAgIGFkZHJlc3MgPSAnJ1xuXG4gICAgQE91dHB1dCgpIG1hcE9wdGlvbnM6IE1hcE9wdGlvbnMgPSB7XG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgICAgbGF0OiAwLFxuICAgICAgICAgICAgbG5nOiAwXG4gICAgICAgIH0sXG4gICAgICAgIG1hcFR5cGVDb250cm9sT3B0aW9uczoge1xuICAgICAgICAgICAgbWFwVHlwZUlkczogWydyb2FkbWFwJywgJ3NhdGVsbGl0ZSddLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ29vZ2xlTWFwc0ZhY3RvcnkuZ2V0R29vZ2xlTWFwcygpLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTVxuICAgICAgICB9LFxuICAgICAgICB6b29tOiAxNixcbiAgICAgICAgY29udHJvbFNpemU6IDIyLFxuICAgICAgICBmdWxsc2NyZWVuQ29udHJvbDogZmFsc2VcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgbWFya2VyT3B0aW9uczogTWFya2VyT3B0aW9ucyA9IHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIGxhdDogMCxcbiAgICAgICAgICAgIGxuZzogMFxuICAgICAgICB9LFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgIGFuaW1hdGlvbjogdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5nZXRHb29nbGVNYXBzKCkuQW5pbWF0aW9uLkRST1BcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgY2lyY2xlT3B0aW9uczogQ2lyY2xlT3B0aW9ucyA9IHtcbiAgICAgICAgc3Ryb2tlQ29sb3I6ICcjNDQ4YWZmJyxcbiAgICAgICAgc3Ryb2tlT3BhY2l0eTogMC44LFxuICAgICAgICBzdHJva2VXZWlnaHQ6IDIsXG4gICAgICAgIGZpbGxDb2xvcjogJyM0NDhhZmYnLFxuICAgICAgICBmaWxsT3BhY2l0eTogMC4zNSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIHJhZGl1czogNzBcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgcHJldmlvdXNNYXJrZXJJY29uOiBJY29uID0ge1xuICAgICAgICB1cmw6ICdodHRwOi8vY2RuLmJvbGRhZG1pbi5jb20uczMtd2Vic2l0ZS1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9wcmV2aW91cy1tYXJrZXIucG5nJ1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBjdXJyZW50TWFya2VySWNvbjogSWNvbiA9IHtcbiAgICAgICAgdXJsOiAnaHR0cDovL2Nkbi5ib2xkYWRtaW4uY29tLnMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vY3VycmVudC1tYXJrZXIucG5nJ1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ29vZ2xlTWFwc0ZhY3Rvcnk6IEdvb2dsZU1hcHNGYWN0b3J5LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZ29vZ2xlTWFwc0J1aWxkZXI6IEFuZ3VsYXJHb29nbGVNYXBzQnVpbGRlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGdvb2dsZU1hcHNHZW9jb2RlcjogQW5ndWxhckdvb2dsZU1hcHNHZW9jb2RlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5KSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlKCdhZGRyZXNzUmV2ZXJzZUdlb2NvZGVkJywgKGFkZHJlc3M6IHN0cmluZykgPT4gdGhpcy5hZGRyZXNzID0gYWRkcmVzcylcbiAgICAgICAgdGhpcy5pY29uUmVnaXN0cnkucmVnaXN0ZXIoJ2V4cGFuZCcsICcuL2Fzc2V0cy9leHBhbmQuc3ZnJylcbiAgICAgICAgdGhpcy5pY29uUmVnaXN0cnkucmVnaXN0ZXIoJ2NvbGxhcHNlJywgJy4vYXNzZXRzL2NvbGxhcHNlLnN2ZycpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZXZlbnRQdWJsaXNoZXIudW5zdWJzY3JpYmVBbGwoJ2FkZHJlc3NSZXZlcnNlR2VvY29kZWQnKVxuICAgIH1cblxuICAgIGNyZWF0ZU1hcEJ5TG9jYXRpb24oZm9jdXNMb2NhdGlvbjogTG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5nb29nbGVNYXBzR2VvY29kZXIucmV2ZXJzZUdlb2NvZGUoZm9jdXNMb2NhdGlvbi5jb29yZGluYXRlcywgKGFkZHJlc3M6IHN0cmluZykgPT4gdGhpcy5hZGRyZXNzID0gYWRkcmVzcylcbiAgICAgICAgdGhpcy5jaXJjbGVPcHRpb25zLnJhZGl1cyA9IGZvY3VzTG9jYXRpb24ucmFkaXVzSW5NZXRlcnNcbiAgICAgICAgdGhpcy5jaGFuZ2VNYXBDZW50ZXIoZm9jdXNMb2NhdGlvbi5jb29yZGluYXRlcylcbiAgICAgICAgdGhpcy5nb29nbGVNYXBzQnVpbGRlclxuICAgICAgICAgICAgLmNyZWF0ZU1hcCh0aGlzLm1hcE9wdGlvbnMpXG4gICAgICAgICAgICAuYWRkQ2VudGVyTWFya2VyKHRoaXMubWFya2VyT3B0aW9ucylcbiAgICAgICAgICAgIC5hZGRDaXJjbGUodGhpcy5jaXJjbGVPcHRpb25zKVxuICAgICAgICAgICAgLmJpbmRDaXJjbGVUb01hcmtlcigpXG4gICAgICAgICAgICAuYWRkU2VhcmNoQm94KClcbiAgICB9XG5cbiAgICBjcmVhdGVNYXBCeUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwc0dlb2NvZGVyLmdlb2NvZGUoYWRkcmVzcywgKGNvb3JkaW5hdGVzOiBDb29yZGluYXRlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTWFwQ2VudGVyKGNvb3JkaW5hdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ29vZ2xlTWFwc0J1aWxkZXJcbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZU1hcCh0aGlzLm1hcE9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDZW50ZXJNYXJrZXIodGhpcy5tYXJrZXJPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2lyY2xlKHRoaXMuY2lyY2xlT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLmJpbmRDaXJjbGVUb01hcmtlcigpXG4gICAgICAgICAgICAgICAgICAgIC5oaWRlTWFya2VyKClcbiAgICAgICAgICAgICAgICAgICAgLmhpZGVDaXJjbGUoKVxuICAgICAgICAgICAgICAgICAgICAuYWRkU2VhcmNoQm94KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH1cblxuICAgIG5vdGlmeU1hcFJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5ldmVudFB1Ymxpc2hlci5ub3RpZnkoJ3Jlc2l6ZU1hcCcpXG4gICAgfVxuXG4gICAgYWRkVHJhdmVsUGF0aCh0aW1lc3RhbXBDb29yZGluYXRlc0xpc3Q6IEFycmF5PFRpbWVzdGFtcENvb3JkaW5hdGVzPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRpbWVzdGFtcENvb3JkaW5hdGVzTGlzdC5mb3JFYWNoKCh0aW1lc3RhbXBDb29yZGluYXRlczogVGltZXN0YW1wQ29vcmRpbmF0ZXMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSBpbmRleCA9PT0gMCA/IHRoaXMuY3VycmVudE1hcmtlckljb24gOiB0aGlzLnByZXZpb3VzTWFya2VySWNvblxuICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWUgPSBtb21lbnQudXRjKHRpbWVzdGFtcENvb3JkaW5hdGVzLnRpbWVzdGFtcCkuZm9ybWF0KCdZWVlZLk1NLkREIEhIOm1tJylcbiAgICAgICAgICAgIHRoaXMuZ29vZ2xlTWFwc0J1aWxkZXIuYWRkTWFya2VyKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5jcmVhdGVMYXRMbmcodGltZXN0YW1wQ29vcmRpbmF0ZXMuY29vcmRpbmF0ZXMpLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBgTmFtZTogJHtuYW1lfSwgVGltZTogJHtkYXRlVGltZX1gLFxuICAgICAgICAgICAgICAgIGljb246IGljb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgbGF0TG5ncyA9IHRpbWVzdGFtcENvb3JkaW5hdGVzTGlzdC5tYXAodmFsdWUgPT4gdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5jcmVhdGVMYXRMbmcodmFsdWUuY29vcmRpbmF0ZXMpKVxuICAgICAgICB0aGlzLmFkZFBvbHlsaW5lKGxhdExuZ3MsICcjJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cigyLCA2KSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFBvbHlsaW5lKHBhdGg6IEFycmF5PExhdExuZz4sIGNvbG9yQ29kZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwc0J1aWxkZXIuYWRkUG9seWxpbmUoe1xuICAgICAgICAgICAgZ2VvZGVzaWM6IHRydWUsXG4gICAgICAgICAgICBzdHJva2VPcGFjaXR5OiAwLjgsXG4gICAgICAgICAgICBzdHJva2VXZWlnaHQ6IDEsXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IGNvbG9yQ29kZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlTWFwQ2VudGVyKGNvb3JkaW5hdGVzOiBDb29yZGluYXRlcykge1xuICAgICAgICB0aGlzLm1hcE9wdGlvbnMuY2VudGVyID0ge2xhdDogY29vcmRpbmF0ZXMubGF0aXR1ZGUsIGxuZzogY29vcmRpbmF0ZXMubG9uZ2l0dWRlfVxuICAgIH1cbn1cbiJdfQ==