@guajiritos/map 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,293 @@
1
+ import { Component, EventEmitter, forwardRef, Input, Output, signal } from '@angular/core';
2
+ import { NgIf, TitleCasePipe } from '@angular/common';
3
+ import * as L from 'leaflet';
4
+ import { icon, layerGroup } from 'leaflet';
5
+ import { MatInputModule } from '@angular/material/input';
6
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { Subject, takeUntil } from 'rxjs';
9
+ import { TranslateModule } from '@ngx-translate/core';
10
+ import { DEFAULT_MAP_OPTION } from '../interfaces/interfaces';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/material/input";
13
+ import * as i2 from "@angular/material/form-field";
14
+ import * as i3 from "@angular/forms";
15
+ import * as i4 from "@angular/material/icon";
16
+ import * as i5 from "@ngx-translate/core";
17
+ export class GuajiritosMap {
18
+ constructor() {
19
+ this._layerGroup = new L.LayerGroup();
20
+ this.mapMarkers = signal([]);
21
+ this.options = signal(DEFAULT_MAP_OPTION);
22
+ this.circle = signal(null);
23
+ this.form = new UntypedFormGroup({
24
+ latitude: new UntypedFormControl({ value: null, disabled: false }, [Validators.required]),
25
+ longitude: new UntypedFormControl({ value: null, disabled: false }, [Validators.required])
26
+ });
27
+ this.appearance = 'outline';
28
+ this.color = 'accent';
29
+ this.floatLabel = 'auto';
30
+ this.subscriptSizing = 'dynamic';
31
+ this.readonly = false;
32
+ this.hiddenForm = false;
33
+ /**
34
+ * Default marker icon
35
+ */
36
+ this.icon = {
37
+ iconSize: [25, 41],
38
+ iconAnchor: [13, 41],
39
+ iconUrl: 'marker-icon.png'
40
+ };
41
+ /**
42
+ * Se lanza cada vez que cambia un marcador
43
+ */
44
+ this.markerDragend = new EventEmitter();
45
+ /**
46
+ * Se lanza cada vez que se añade un marcador
47
+ */
48
+ this.markerAdded = new EventEmitter();
49
+ }
50
+ static { this._observableSubject$ = new Subject(); }
51
+ /**
52
+ * Default map options
53
+ */
54
+ set optionsMap(options) {
55
+ if (options) {
56
+ this.options.set({
57
+ ...this.options(),
58
+ ...options
59
+ });
60
+ }
61
+ }
62
+ ;
63
+ /**
64
+ * Add a circle on the map
65
+ */
66
+ set circleConfig(circle) {
67
+ if (circle) {
68
+ this.circle.set(circle);
69
+ if (this.map) {
70
+ this.addCircle(this.circle()?.center, this.circle()?.radius);
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * List of markers
76
+ * @param markers - Markers array
77
+ */
78
+ set markers(markers) {
79
+ if (markers?.length) {
80
+ this.mapMarkers.set(markers);
81
+ this.form.patchValue({
82
+ latitude: this.mapMarkers()?.[0]?.lat,
83
+ longitude: this.mapMarkers()?.[0]?.lng
84
+ });
85
+ if (this.map && this._layerGroup) {
86
+ this.drawMarkers();
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Draws the markers.
92
+ */
93
+ drawMarkers() {
94
+ if (this.mapMarkers()?.length) {
95
+ this._layerGroup.clearLayers();
96
+ this.mapMarkers().forEach((m) => {
97
+ this.addMarker(m);
98
+ });
99
+ }
100
+ }
101
+ /**
102
+ * Main properties of the map
103
+ * @private
104
+ */
105
+ initMap() {
106
+ this.map = L.map(this.options().id, {
107
+ center: this.options()?.center ?? DEFAULT_MAP_OPTION.center,
108
+ dragging: this.options()?.draggable ?? DEFAULT_MAP_OPTION.draggable,
109
+ zoom: this.options()?.zoom ?? DEFAULT_MAP_OPTION.zoom,
110
+ zoomControl: this.options()?.zoomControl || DEFAULT_MAP_OPTION.zoomControl,
111
+ scrollWheelZoom: this.options()?.scrollWheelZoom || DEFAULT_MAP_OPTION.scrollWheelZoom,
112
+ maxZoom: 18,
113
+ minZoom: 3
114
+ });
115
+ this._layerGroup = layerGroup().addTo(this.map);
116
+ L.tileLayer('http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png').addTo(this.map);
117
+ this.drawMarkers();
118
+ this.changeCenter(new L.LatLng(this.mapMarkers()?.[0]?.lat, this.mapMarkers()?.[0]?.lng));
119
+ if (this.circle()) {
120
+ this.addCircle(this.circle()?.center, this.circle()?.radius);
121
+ }
122
+ if (this.options()?.addMarker) {
123
+ let that = this;
124
+ this.map.on('click', function (e) {
125
+ const newMarker = {
126
+ lat: e.latlng.lat,
127
+ lng: e.latlng.lng,
128
+ draggable: that.options()?.draggable ?? DEFAULT_MAP_OPTION.draggable
129
+ };
130
+ that.addMarker(newMarker);
131
+ that.markerAdded.emit(newMarker);
132
+ });
133
+ }
134
+ }
135
+ /**
136
+ * Add marker to map
137
+ * @param center - center of the circle
138
+ * @param radius - radius of the circle in meters
139
+ * @private
140
+ */
141
+ addCircle(center, radius) {
142
+ if (this.map && center) {
143
+ this.drawMarkers();
144
+ L.circleMarker([center?.lat, center?.lng], { radius }).addTo(this.map);
145
+ }
146
+ }
147
+ /**
148
+ * Add marker to map
149
+ * @param marker - Point of the map
150
+ */
151
+ addMarker(marker) {
152
+ if (this.map && marker) {
153
+ const markerAdd = L.marker({
154
+ lat: marker?.lat,
155
+ lng: marker?.lng
156
+ }, {
157
+ draggable: marker?.draggable ?? true,
158
+ autoPan: true
159
+ }).setIcon(icon({
160
+ iconSize: this.icon?.iconSize,
161
+ iconAnchor: this.icon?.iconAnchor,
162
+ iconUrl: this.icon?.iconUrl
163
+ })).addTo(this._layerGroup);
164
+ markerAdd.on('dragend', () => {
165
+ this.changeCenter(markerAdd.getLatLng());
166
+ this.markerDragend.emit(markerAdd.getLatLng());
167
+ });
168
+ }
169
+ }
170
+ /**
171
+ * Put the map center on marker position
172
+ * @param marker - Point of the map
173
+ * @public
174
+ */
175
+ changeCenter(marker) {
176
+ this.map?.setView(marker);
177
+ }
178
+ /**
179
+ * Propagates the change to other components.
180
+ *
181
+ * @param {any} _ - an arbitrary parameter.
182
+ */
183
+ propagateChange(_) {
184
+ }
185
+ ;
186
+ /**
187
+ * Sets the callback function to be called when the value
188
+ * of the control changes.
189
+ *
190
+ * @param {any} fn - The callback function to be called
191
+ * when the value of the control changes.
192
+ */
193
+ registerOnChange(fn) {
194
+ this.propagateChange = fn;
195
+ }
196
+ /**
197
+ * Registers a callback function to be called when the form control is "touched".
198
+ */
199
+ registerOnTouched() {
200
+ }
201
+ /**
202
+ * Sets the disabled state of the form.
203
+ *
204
+ * @param {boolean} isDisabled - Specifies whether the form should be disabled or not.
205
+ */
206
+ setDisabledState(isDisabled) {
207
+ if (isDisabled) {
208
+ this.form.disable();
209
+ }
210
+ else {
211
+ this.form.enable();
212
+ }
213
+ }
214
+ /**
215
+ * Writes a value to the form.
216
+ *
217
+ * @param {any} data - The data to be written.
218
+ */
219
+ writeValue(data) {
220
+ if (data) {
221
+ this.form.patchValue({
222
+ latitude: data?.latitude,
223
+ longitude: data?.longitude
224
+ });
225
+ }
226
+ }
227
+ /**
228
+ * Initializes the component and sets up a listener for changes in the form value.
229
+ */
230
+ ngOnInit() {
231
+ this.form.valueChanges
232
+ .pipe(takeUntil(GuajiritosMap._observableSubject$.asObservable()))
233
+ .subscribe(() => {
234
+ this.propagateChange(this.form.value);
235
+ });
236
+ }
237
+ /**
238
+ * Initializes the map after the view has been initialized.
239
+ */
240
+ ngAfterViewInit() {
241
+ this.initMap();
242
+ }
243
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuajiritosMap, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
244
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GuajiritosMap, isStandalone: true, selector: "guajiritos-map", inputs: { appearance: "appearance", color: "color", floatLabel: "floatLabel", subscriptSizing: "subscriptSizing", readonly: "readonly", hiddenForm: "hiddenForm", optionsMap: "optionsMap", circleConfig: "circleConfig", icon: "icon", markers: "markers" }, outputs: { markerDragend: "markerDragend", markerAdded: "markerAdded" }, providers: [
245
+ {
246
+ provide: NG_VALUE_ACCESSOR,
247
+ useExisting: forwardRef(() => GuajiritosMap),
248
+ multi: true
249
+ }
250
+ ], ngImport: i0, template: "<div class=\"map-container\">\r\n <div class=\"lat-lng-input\" [formGroup]=\"form\" *ngIf=\"mapMarkers()?.length === 1 && !hiddenForm\">\r\n <mat-form-field [appearance]=\"appearance\" [color]=\"color\" [floatLabel]=\"floatLabel\" class='w-100'\r\n [subscriptSizing]=\"subscriptSizing\">\r\n <mat-label>{{ \"latitud\" | translate | titlecase }}</mat-label>\r\n <mat-icon matSuffix class=\"material-icons-outlined\" [color]=\"color\">place</mat-icon>\r\n <input matInput [placeholder]=\"'latitud' | translate\" [readonly]=\"readonly\" formControlName=\"latitude\">\r\n <mat-error>{{ 'Latitud requerida' | translate }}</mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field [appearance]=\"appearance\" [color]=\"color\" [floatLabel]=\"floatLabel\" class='w-100'\r\n [subscriptSizing]=\"subscriptSizing\">\r\n <mat-label>{{ \"longitud\" | translate | titlecase }}</mat-label>\r\n <mat-icon matSuffix class=\"material-icons-outlined\" [color]=\"color\">place</mat-icon>\r\n <input matInput [placeholder]=\"'longitud' | translate\" [readonly]=\"readonly\" formControlName=\"longitude\">\r\n <mat-error>{{ 'Longitud requerida' | translate }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div [id]=\"options().id\" class=\"map\"></div>\r\n</div>\r\n", styles: [".map-container{display:flex;flex-direction:column;gap:2rem}.lat-lng-input{display:flex;flex-direction:row;gap:1rem}.map{min-height:400px;max-width:100%}.w-100{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
251
+ }
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuajiritosMap, decorators: [{
253
+ type: Component,
254
+ args: [{ selector: 'guajiritos-map', standalone: true, imports: [
255
+ MatInputModule,
256
+ ReactiveFormsModule,
257
+ NgIf,
258
+ MatIconModule,
259
+ TranslateModule,
260
+ TitleCasePipe
261
+ ], providers: [
262
+ {
263
+ provide: NG_VALUE_ACCESSOR,
264
+ useExisting: forwardRef(() => GuajiritosMap),
265
+ multi: true
266
+ }
267
+ ], template: "<div class=\"map-container\">\r\n <div class=\"lat-lng-input\" [formGroup]=\"form\" *ngIf=\"mapMarkers()?.length === 1 && !hiddenForm\">\r\n <mat-form-field [appearance]=\"appearance\" [color]=\"color\" [floatLabel]=\"floatLabel\" class='w-100'\r\n [subscriptSizing]=\"subscriptSizing\">\r\n <mat-label>{{ \"latitud\" | translate | titlecase }}</mat-label>\r\n <mat-icon matSuffix class=\"material-icons-outlined\" [color]=\"color\">place</mat-icon>\r\n <input matInput [placeholder]=\"'latitud' | translate\" [readonly]=\"readonly\" formControlName=\"latitude\">\r\n <mat-error>{{ 'Latitud requerida' | translate }}</mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field [appearance]=\"appearance\" [color]=\"color\" [floatLabel]=\"floatLabel\" class='w-100'\r\n [subscriptSizing]=\"subscriptSizing\">\r\n <mat-label>{{ \"longitud\" | translate | titlecase }}</mat-label>\r\n <mat-icon matSuffix class=\"material-icons-outlined\" [color]=\"color\">place</mat-icon>\r\n <input matInput [placeholder]=\"'longitud' | translate\" [readonly]=\"readonly\" formControlName=\"longitude\">\r\n <mat-error>{{ 'Longitud requerida' | translate }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div [id]=\"options().id\" class=\"map\"></div>\r\n</div>\r\n", styles: [".map-container{display:flex;flex-direction:column;gap:2rem}.lat-lng-input{display:flex;flex-direction:row;gap:1rem}.map{min-height:400px;max-width:100%}.w-100{width:100%}\n"] }]
268
+ }], propDecorators: { appearance: [{
269
+ type: Input
270
+ }], color: [{
271
+ type: Input
272
+ }], floatLabel: [{
273
+ type: Input
274
+ }], subscriptSizing: [{
275
+ type: Input
276
+ }], readonly: [{
277
+ type: Input
278
+ }], hiddenForm: [{
279
+ type: Input
280
+ }], optionsMap: [{
281
+ type: Input
282
+ }], circleConfig: [{
283
+ type: Input
284
+ }], icon: [{
285
+ type: Input
286
+ }], markers: [{
287
+ type: Input
288
+ }], markerDragend: [{
289
+ type: Output
290
+ }], markerAdded: [{
291
+ type: Output
292
+ }] } });
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhamlyaXRvcy1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VhamlyaXRvcy1tYXAvc3JjL2xpYi9ndWFqaXJpdG9zLW1hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFqaXJpdG9zLW1hcC9zcmMvbGliL2d1YWppcml0b3MtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQTRCLFVBQVUsRUFBbUIsTUFBTSxTQUFTLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQWEsa0JBQWtCLEVBQThCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7QUF1QnJHLE1BQU0sT0FBTyxhQUFhO0lBckIxQjtRQXdCVSxnQkFBVyxHQUFlLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlDLGVBQVUsR0FB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MENBcUJBLHFPRGdCSSxjQUFjLG8xQkFDZCxtQkFBbUIsbzJCQUNuQixJQUFJLDRGQUNKLGFBQWEsbUxBQ2IsZUFBZSx1RkFDZixhQUFhOzs0RkFVSixhQUFhO2tCQXJCekIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FHZCxJQUFJLFdBQ1A7d0JBQ1AsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLElBQUk7d0JBQ0osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7cUJBQ2QsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUM7NEJBQzVDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQWdCUSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBWU8sWUFBWTtzQkFBeEIsS0FBSztnQkFhRyxJQUFJO3NCQUFaLEtBQUs7Z0JBVU8sT0FBTztzQkFBbkIsS0FBSztnQkFrQkksYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBXcml0YWJsZVNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0lmLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0ICogYXMgTCBmcm9tICdsZWFmbGV0JztcclxuaW1wb3J0IHsgaWNvbiwgTGF0TG5nLCBMYXRMbmdFeHByZXNzaW9uLCBsYXllckdyb3VwLCBMYXllckdyb3VwLCBNYXAgfSBmcm9tICdsZWFmbGV0JztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGbG9hdExhYmVsVHlwZSwgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgU3Vic2NyaXB0U2l6aW5nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbmltcG9ydCB7IENpcmNsZU1hcCwgREVGQVVMVF9NQVBfT1BUSU9OLCBJY29uLCBNYXBPcHRpb24sIE1hcmtlck1hcCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d1YWppcml0b3MtbWFwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3VhamlyaXRvcy1tYXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2d1YWppcml0b3MtbWFwLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBOZ0lmLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIFRpdGxlQ2FzZVBpcGVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR3VhamlyaXRvc01hcCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3VhamlyaXRvc01hcCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgc3RhdGljIF9vYnNlcnZhYmxlU3ViamVjdCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgbWFwOiBNYXA7XHJcbiAgcHJpdmF0ZSBfbGF5ZXJHcm91cDogTGF5ZXJHcm91cCA9IG5ldyBMLkxheWVyR3JvdXAoKTtcclxuICBwdWJsaWMgbWFwTWFya2VyczogV3JpdGFibGVTaWduYWw8TWFya2VyTWFwW10+ID0gc2lnbmFsKFtdKTtcclxuXHJcbiAgcHVibGljIG9wdGlvbnM6IFdyaXRhYmxlU2lnbmFsPE1hcE9wdGlvbj4gPSBzaWduYWwoREVGQVVMVF9NQVBfT1BUSU9OKTtcclxuICBwdWJsaWMgY2lyY2xlOiBXcml0YWJsZVNpZ25hbDxDaXJjbGVNYXA+ID0gc2lnbmFsKG51bGwpO1xyXG5cclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgIGxhdGl0dWRlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgbG9uZ2l0dWRlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXHJcbiAgfSk7XHJcblxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XHJcbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdhY2NlbnQnO1xyXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xyXG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nID0gJ2R5bmFtaWMnO1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGRlbkZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmYXVsdCBtYXAgb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zTWFwKG9wdGlvbnM6IFBhcnRpYWw8TWFwT3B0aW9uPikge1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnNldCh7XHJcbiAgICAgICAgLi4udGhpcy5vcHRpb25zKCksXHJcbiAgICAgICAgLi4ub3B0aW9uc1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBjaXJjbGUgb24gdGhlIG1hcFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCBjaXJjbGVDb25maWcoY2lyY2xlOiBDaXJjbGVNYXApIHtcclxuICAgIGlmIChjaXJjbGUpIHtcclxuICAgICAgdGhpcy5jaXJjbGUuc2V0KGNpcmNsZSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5tYXApIHtcclxuICAgICAgICB0aGlzLmFkZENpcmNsZSh0aGlzLmNpcmNsZSgpPy5jZW50ZXIsIHRoaXMuY2lyY2xlKCk/LnJhZGl1cyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgbWFya2VyIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBpY29uOiBJY29uID0ge1xyXG4gICAgaWNvblNpemU6IFsyNSwgNDFdLFxyXG4gICAgaWNvbkFuY2hvcjogWzEzLCA0MV0sXHJcbiAgICBpY29uVXJsOiAnbWFya2VyLWljb24ucG5nJ1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3Qgb2YgbWFya2Vyc1xyXG4gICAqIEBwYXJhbSBtYXJrZXJzIC0gTWFya2VycyBhcnJheVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCBtYXJrZXJzKG1hcmtlcnM6IE1hcmtlck1hcFtdKSB7XHJcbiAgICBpZiAobWFya2Vycz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubWFwTWFya2Vycy5zZXQobWFya2Vycyk7XHJcblxyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgbGF0aXR1ZGU6IHRoaXMubWFwTWFya2VycygpPy5bMF0/LmxhdCxcclxuICAgICAgICBsb25naXR1ZGU6IHRoaXMubWFwTWFya2VycygpPy5bMF0/LmxuZ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1hcCAmJiB0aGlzLl9sYXllckdyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5kcmF3TWFya2VycygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSBsYW56YSBjYWRhIHZleiBxdWUgY2FtYmlhIHVuIG1hcmNhZG9yXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG1hcmtlckRyYWdlbmQ6IEV2ZW50RW1pdHRlcjxMYXRMbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8qKlxyXG4gICAqIFNlIGxhbnphIGNhZGEgdmV6IHF1ZSBzZSBhw7FhZGUgdW4gbWFyY2Fkb3JcclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFya2VyQWRkZWQ6IEV2ZW50RW1pdHRlcjxNYXJrZXJNYXA+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBEcmF3cyB0aGUgbWFya2Vycy5cclxuICAgKi9cclxuICBwcml2YXRlIGRyYXdNYXJrZXJzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubWFwTWFya2VycygpPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fbGF5ZXJHcm91cC5jbGVhckxheWVycygpO1xyXG4gICAgICB0aGlzLm1hcE1hcmtlcnMoKS5mb3JFYWNoKChtOiBNYXJrZXJNYXApOiB2b2lkID0+IHtcclxuICAgICAgICB0aGlzLmFkZE1hcmtlcihtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWluIHByb3BlcnRpZXMgb2YgdGhlIG1hcFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpbml0TWFwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXAgPSBMLm1hcCh0aGlzLm9wdGlvbnMoKS5pZCwge1xyXG4gICAgICBjZW50ZXI6IHRoaXMub3B0aW9ucygpPy5jZW50ZXIgYXMgTGF0TG5nRXhwcmVzc2lvbiA/PyBERUZBVUxUX01BUF9PUFRJT04uY2VudGVyLFxyXG4gICAgICBkcmFnZ2luZzogdGhpcy5vcHRpb25zKCk/LmRyYWdnYWJsZSA/PyBERUZBVUxUX01BUF9PUFRJT04uZHJhZ2dhYmxlLFxyXG4gICAgICB6b29tOiB0aGlzLm9wdGlvbnMoKT8uem9vbSA/PyBERUZBVUxUX01BUF9PUFRJT04uem9vbSxcclxuICAgICAgem9vbUNvbnRyb2w6IHRoaXMub3B0aW9ucygpPy56b29tQ29udHJvbCB8fCBERUZBVUxUX01BUF9PUFRJT04uem9vbUNvbnRyb2wsXHJcbiAgICAgIHNjcm9sbFdoZWVsWm9vbTogdGhpcy5vcHRpb25zKCk/LnNjcm9sbFdoZWVsWm9vbSB8fCBERUZBVUxUX01BUF9PUFRJT04uc2Nyb2xsV2hlZWxab29tLFxyXG4gICAgICBtYXhab29tOiAxOCxcclxuICAgICAgbWluWm9vbTogM1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fbGF5ZXJHcm91cCA9IGxheWVyR3JvdXAoKS5hZGRUbyh0aGlzLm1hcCk7XHJcblxyXG4gICAgTC50aWxlTGF5ZXIoJ2h0dHA6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLmZyL2hvdC97en0ve3h9L3t5fS5wbmcnKS5hZGRUbyh0aGlzLm1hcCk7XHJcblxyXG4gICAgdGhpcy5kcmF3TWFya2VycygpO1xyXG4gICAgdGhpcy5jaGFuZ2VDZW50ZXIobmV3IEwuTGF0TG5nKHRoaXMubWFwTWFya2VycygpPy5bMF0/LmxhdCwgdGhpcy5tYXBNYXJrZXJzKCk/LlswXT8ubG5nKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2lyY2xlKCkpIHtcclxuICAgICAgdGhpcy5hZGRDaXJjbGUodGhpcy5jaXJjbGUoKT8uY2VudGVyLCB0aGlzLmNpcmNsZSgpPy5yYWRpdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMoKT8uYWRkTWFya2VyKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgICAgdGhpcy5tYXAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGU6IEwuTGVhZmxldE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNYXJrZXI6IE1hcmtlck1hcCA9IHtcclxuICAgICAgICAgIGxhdDogZS5sYXRsbmcubGF0LFxyXG4gICAgICAgICAgbG5nOiBlLmxhdGxuZy5sbmcsXHJcbiAgICAgICAgICBkcmFnZ2FibGU6IHRoYXQub3B0aW9ucygpPy5kcmFnZ2FibGUgPz8gREVGQVVMVF9NQVBfT1BUSU9OLmRyYWdnYWJsZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoYXQuYWRkTWFya2VyKG5ld01hcmtlcik7XHJcblxyXG4gICAgICAgIHRoYXQubWFya2VyQWRkZWQuZW1pdChuZXdNYXJrZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBtYXJrZXIgdG8gbWFwXHJcbiAgICogQHBhcmFtIGNlbnRlciAtIGNlbnRlciBvZiB0aGUgY2lyY2xlXHJcbiAgICogQHBhcmFtIHJhZGl1cyAtIHJhZGl1cyBvZiB0aGUgY2lyY2xlIGluIG1ldGVyc1xyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRDaXJjbGUoY2VudGVyOiBNYXJrZXJNYXAsIHJhZGl1czogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tYXAgJiYgY2VudGVyKSB7XHJcbiAgICAgIHRoaXMuZHJhd01hcmtlcnMoKTtcclxuICAgICAgTC5jaXJjbGVNYXJrZXIoW2NlbnRlcj8ubGF0LCBjZW50ZXI/LmxuZ10sIHsgcmFkaXVzIH0pLmFkZFRvKHRoaXMubWFwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBtYXJrZXIgdG8gbWFwXHJcbiAgICogQHBhcmFtIG1hcmtlciAtIFBvaW50IG9mIHRoZSBtYXBcclxuICAgKi9cclxuICBwcml2YXRlIGFkZE1hcmtlcihtYXJrZXI6IE1hcmtlck1hcCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubWFwICYmIG1hcmtlcikge1xyXG4gICAgICBjb25zdCBtYXJrZXJBZGQ6IEwuTWFya2VyID0gTC5tYXJrZXIoe1xyXG4gICAgICAgIGxhdDogbWFya2VyPy5sYXQsXHJcbiAgICAgICAgbG5nOiBtYXJrZXI/LmxuZ1xyXG4gICAgICB9LCB7XHJcbiAgICAgICAgZHJhZ2dhYmxlOiBtYXJrZXI/LmRyYWdnYWJsZSA/PyB0cnVlLFxyXG4gICAgICAgIGF1dG9QYW46IHRydWVcclxuICAgICAgfSkuc2V0SWNvbihcclxuICAgICAgICBpY29uKHtcclxuICAgICAgICAgIGljb25TaXplOiB0aGlzLmljb24/Lmljb25TaXplLFxyXG4gICAgICAgICAgaWNvbkFuY2hvcjogdGhpcy5pY29uPy5pY29uQW5jaG9yLFxyXG4gICAgICAgICAgaWNvblVybDogdGhpcy5pY29uPy5pY29uVXJsXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5hZGRUbyh0aGlzLl9sYXllckdyb3VwKTtcclxuXHJcbiAgICAgIG1hcmtlckFkZC5vbignZHJhZ2VuZCcsICgpOiB2b2lkID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZUNlbnRlcihtYXJrZXJBZGQuZ2V0TGF0TG5nKCkpO1xyXG4gICAgICAgIHRoaXMubWFya2VyRHJhZ2VuZC5lbWl0KG1hcmtlckFkZC5nZXRMYXRMbmcoKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHV0IHRoZSBtYXAgY2VudGVyIG9uIG1hcmtlciBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBtYXJrZXIgLSBQb2ludCBvZiB0aGUgbWFwXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjaGFuZ2VDZW50ZXIobWFya2VyOiBMLkxhdExuZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXA/LnNldFZpZXcobWFya2VyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb3BhZ2F0ZXMgdGhlIGNoYW5nZSB0byBvdGhlciBjb21wb25lbnRzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IF8gLSBhbiBhcmJpdHJhcnkgcGFyYW1ldGVyLlxyXG4gICAqL1xyXG4gIHByb3BhZ2F0ZUNoYW5nZShfOiBhbnkpOiB2b2lkIHtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdmFsdWVcclxuICAgKiBvZiB0aGUgY29udHJvbCBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IGZuIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxyXG4gICAqIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBcInRvdWNoZWRcIi5cclxuICAgKi9cclxuICByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBmb3JtLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0Rpc2FibGVkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGZvcm0gc2hvdWxkIGJlIGRpc2FibGVkIG9yIG5vdC5cclxuICAgKi9cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXcml0ZXMgYSB2YWx1ZSB0byB0aGUgZm9ybS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgd3JpdHRlbi5cclxuICAgKi9cclxuICB3cml0ZVZhbHVlKGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIGxhdGl0dWRlOiBkYXRhPy5sYXRpdHVkZSxcclxuICAgICAgICBsb25naXR1ZGU6IGRhdGE/LmxvbmdpdHVkZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYW5kIHNldHMgdXAgYSBsaXN0ZW5lciBmb3IgY2hhbmdlcyBpbiB0aGUgZm9ybSB2YWx1ZS5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKEd1YWppcml0b3NNYXAuX29ic2VydmFibGVTdWJqZWN0JC5hc09ic2VydmFibGUoKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIG1hcCBhZnRlciB0aGUgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZC5cclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRNYXAoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwibGF0LWxuZy1pbnB1dFwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwibWFwTWFya2VycygpPy5sZW5ndGggPT09IDEgJiYgIWhpZGRlbkZvcm1cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW2NvbG9yXT1cImNvbG9yXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIGNsYXNzPSd3LTEwMCdcclxuICAgICAgICAgICAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7IFwibGF0aXR1ZFwiIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtjb2xvcl09XCJjb2xvclwiPnBsYWNlPC9tYXQtaWNvbj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInbGF0aXR1ZCcgfCB0cmFuc2xhdGVcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiPlxyXG4gICAgICA8bWF0LWVycm9yPnt7ICdMYXRpdHVkIHJlcXVlcmlkYScgfCB0cmFuc2xhdGUgfX08L21hdC1lcnJvcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBbY29sb3JdPVwiY29sb3JcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgY2xhc3M9J3ctMTAwJ1xyXG4gICAgICAgICAgICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3sgXCJsb25naXR1ZFwiIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtjb2xvcl09XCJjb2xvclwiPnBsYWNlPC9tYXQtaWNvbj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInbG9uZ2l0dWQnIHwgdHJhbnNsYXRlXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCI+XHJcbiAgICAgIDxtYXQtZXJyb3I+e3sgJ0xvbmdpdHVkIHJlcXVlcmlkYScgfCB0cmFuc2xhdGUgfX08L21hdC1lcnJvcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW2lkXT1cIm9wdGlvbnMoKS5pZFwiIGNsYXNzPVwibWFwXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,5 +1,6 @@
1
1
  /*
2
2
  * Public API Surface of guajiritos-map
3
3
  */
4
- export * from './lib/map.component';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2d1YWppcml0b3MtbWFwL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZ3VhamlyaXRvcy1tYXBcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXAuY29tcG9uZW50JztcbiJdfQ==
4
+ export * from './interfaces/interfaces';
5
+ export * from './lib/guajiritos-map.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2d1YWppcml0b3MtbWFwL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGd1YWppcml0b3MtbWFwXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2ludGVyZmFjZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9ndWFqaXJpdG9zLW1hcC5jb21wb25lbnQnO1xyXG4iXX0=