@igo2/geo 18.1.4 → 18.1.5
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.
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +5 -5
- package/esm2022/lib/import-export/shared/export.service.mjs +61 -25
- package/esm2022/lib/map/shared/projection.utils.mjs +3 -3
- package/fesm2022/igo2-geo.mjs +64 -28
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/import-export/shared/export.service.d.ts +7 -0
- package/package.json +5 -5
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
1
|
+
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import { ConfigService } from '@igo2/core/config';
|
|
4
4
|
import { addExcelSheetToWorkBook, createExcelWorkBook, downloadBlob, downloadContent, isIsoDate, writeExcelFile } from '@igo2/utils';
|
|
5
5
|
import OlFeature from 'ol/Feature';
|
|
6
6
|
import * as olformat from 'ol/format';
|
|
7
7
|
import { circular } from 'ol/geom/Polygon';
|
|
8
|
-
import { Observable, catchError, lastValueFrom, of, tap } from 'rxjs';
|
|
8
|
+
import { Observable, catchError, lastValueFrom, of, tap, throwError } from 'rxjs';
|
|
9
9
|
import { ClusterDataSource, WFSDataSource } from '../../datasource';
|
|
10
10
|
import { VectorLayer, isLayerGroup } from '../../layer';
|
|
11
11
|
import { ExportInvalidFileError, ExportNothingToExportError } from './export.errors';
|
|
@@ -18,9 +18,9 @@ export class ExportService {
|
|
|
18
18
|
config;
|
|
19
19
|
httpClient;
|
|
20
20
|
static ogreFormats = {
|
|
21
|
-
GML: '
|
|
22
|
-
GPX: '
|
|
23
|
-
KML: '
|
|
21
|
+
GML: 'GML',
|
|
22
|
+
GPX: 'GPX',
|
|
23
|
+
KML: 'KML',
|
|
24
24
|
Shapefile: 'ESRI Shapefile',
|
|
25
25
|
CSV: 'CSV',
|
|
26
26
|
/** @deprecated use CSV */
|
|
@@ -107,7 +107,7 @@ export class ExportService {
|
|
|
107
107
|
}
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
|
-
this.exportWithOgre(olFeatures, options, title, projectionIn, projectionOut)
|
|
110
|
+
this.exportWithOgre(olFeatures, options, title, projectionIn, projectionOut)?.subscribe({
|
|
111
111
|
complete: () => observer.complete(),
|
|
112
112
|
error: (error) => observer.error(error)
|
|
113
113
|
});
|
|
@@ -197,43 +197,63 @@ export class ExportService {
|
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
exportWithOgre(olFeatures, { format, csvSeparator = null }, title, projectionIn, projectionOut) {
|
|
200
|
-
|
|
200
|
+
if (!format) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const features = new olformat.GeoJSON().writeFeaturesObject(olFeatures, {
|
|
201
204
|
dataProjection: projectionOut,
|
|
202
205
|
featureProjection: projectionIn
|
|
203
206
|
});
|
|
207
|
+
const sizeError = this.checkOgrePayloadSize(JSON.stringify(features));
|
|
208
|
+
if (sizeError)
|
|
209
|
+
return sizeError;
|
|
204
210
|
const url = `${this.ogreUrl}/convertJson`;
|
|
205
|
-
|
|
206
|
-
formData.append('json', featuresText);
|
|
207
|
-
let outputName = format === 'Shapefile'
|
|
208
|
-
? `${title}.zip`
|
|
209
|
-
: `${title}.${format.toLowerCase()}`;
|
|
211
|
+
let outputName = title;
|
|
210
212
|
let ogreFormat = ExportService.ogreFormats[format];
|
|
213
|
+
let params = new HttpParams();
|
|
211
214
|
if (isCsvExport(format)) {
|
|
212
|
-
outputName =
|
|
215
|
+
outputName = title;
|
|
213
216
|
if (format === 'CSVcomma' || format === 'CSVsemicolon') {
|
|
214
217
|
ogreFormat = 'CSV';
|
|
215
218
|
}
|
|
216
|
-
|
|
217
|
-
if (format === 'CSVsemicolon') {
|
|
218
|
-
formData.append('lco', `SEPARATOR=${csvSeparator}`);
|
|
219
|
-
}
|
|
219
|
+
params = params.append('lco', `SEPARATOR=${csvSeparator}`);
|
|
220
220
|
}
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
params = params
|
|
222
|
+
.set('name', this.formatFilename(outputName))
|
|
223
|
+
.set('format', ogreFormat)
|
|
224
|
+
.set('forceUTF8', 'true');
|
|
223
225
|
return this.httpClient
|
|
224
|
-
.post(url,
|
|
225
|
-
|
|
226
|
+
.post(url, features, {
|
|
227
|
+
params,
|
|
228
|
+
responseType: 'blob',
|
|
229
|
+
observe: 'response'
|
|
226
230
|
})
|
|
227
|
-
.pipe(tap((
|
|
228
|
-
|
|
231
|
+
.pipe(tap((response) => {
|
|
232
|
+
if (!response.body) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const filename = this.getFileName(response.headers, outputName, format);
|
|
236
|
+
downloadBlob(response.body, filename);
|
|
229
237
|
}));
|
|
230
238
|
}
|
|
239
|
+
getFileName(headers, outputName, format) {
|
|
240
|
+
const contentDisposition = headers.get('content-disposition');
|
|
241
|
+
const filenameMatch = contentDisposition?.match(/filename="?([^";\n]+)"?/);
|
|
242
|
+
if (filenameMatch?.[1]) {
|
|
243
|
+
return filenameMatch[1];
|
|
244
|
+
}
|
|
245
|
+
let extension = format.toLowerCase();
|
|
246
|
+
if (format === 'Shapefile') {
|
|
247
|
+
extension = 'zip';
|
|
248
|
+
}
|
|
249
|
+
return `${outputName}.${extension}`;
|
|
250
|
+
}
|
|
231
251
|
formatFilename(name) {
|
|
232
252
|
return name
|
|
233
253
|
.replaceAll(' ', '_')
|
|
234
254
|
.normalize('NFD')
|
|
235
255
|
.replace(/[\u0300-\u036f]/g, '')
|
|
236
|
-
.replace(
|
|
256
|
+
.replace(/[^a-zA-Z0-9_-]/g, '');
|
|
237
257
|
}
|
|
238
258
|
nothingToExport(olFeatures, format) {
|
|
239
259
|
if (olFeatures.length === 0) {
|
|
@@ -366,6 +386,22 @@ export class ExportService {
|
|
|
366
386
|
});
|
|
367
387
|
return geomTypes;
|
|
368
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Checks if the given payload exceeds the OGRE maximum allowed size (50MB).
|
|
391
|
+
* @param payload The GeoJSON payload as a string.
|
|
392
|
+
* @returns An Observable that throws an error if the payload is too large, or undefined if the size is acceptable.
|
|
393
|
+
*/
|
|
394
|
+
checkOgrePayloadSize(payload) {
|
|
395
|
+
const OGRE_MAX_SIZE = 50 * 1024 * 1024; // 50MB
|
|
396
|
+
const byteLength = new TextEncoder().encode(payload).length;
|
|
397
|
+
if (byteLength > OGRE_MAX_SIZE) {
|
|
398
|
+
const error = new Error();
|
|
399
|
+
error.name = 'maxFieldsSize';
|
|
400
|
+
error.message = `GeoJSON too large for OGRE: ${byteLength} bytes (max is ${OGRE_MAX_SIZE})`;
|
|
401
|
+
return throwError(() => error);
|
|
402
|
+
}
|
|
403
|
+
return undefined;
|
|
404
|
+
}
|
|
369
405
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
370
406
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportService, providedIn: 'root' });
|
|
371
407
|
}
|
|
@@ -375,4 +411,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
375
411
|
providedIn: 'root'
|
|
376
412
|
}]
|
|
377
413
|
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
|
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsY0FBYyxFQUNmLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0MsT0FBTyxFQUFFLFVBQVUsRUFBWSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBFLE9BQU8sRUFBUyxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBTy9ELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzNCLE1BQU0saUJBQWlCLENBQUM7QUFHekIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRTdDLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBS3ZDLE1BQU0sT0FBTyxhQUFhO0lBbUJkO0lBQ0E7SUFuQlYsTUFBTSxDQUFDLFdBQVcsR0FBcUM7UUFDckQsR0FBRyxF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QUFXLENBQUM7d0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO3FCQUN4QixDQUFDO29CQUNGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNqRCxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7b0JBQzFELE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzt3R0EvZlUsYUFBYTs0R0FBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbnRpdHlSZWNvcmQgfSBmcm9tICdAaWdvMi9jb21tb24vZW50aXR5JztcbmltcG9ydCB7IFdvcmtzcGFjZSwgV29ya3NwYWNlU3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24vd29ya3NwYWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhZGRFeGNlbFNoZWV0VG9Xb3JrQm9vayxcbiAgY3JlYXRlRXhjZWxXb3JrQm9vayxcbiAgZG93bmxvYWRCbG9iLFxuICBkb3dubG9hZENvbnRlbnQsXG4gIGlzSXNvRGF0ZSxcbiAgd3JpdGVFeGNlbEZpbGVcbn0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgb2xmb3JtYXQgZnJvbSAnb2wvZm9ybWF0JztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5cbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSAnZ2VvanNvbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgY2F0Y2hFcnJvciwgbGFzdFZhbHVlRnJvbSwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDbHVzdGVyRGF0YVNvdXJjZSwgV0ZTRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2UnO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUnO1xuaW1wb3J0IHsgTGF5ZXIsIFZlY3RvckxheWVyLCBpc0xheWVyR3JvdXAgfSBmcm9tICcuLi8uLi9sYXllcic7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAnO1xuaW1wb3J0IHtcbiAgRWRpdGlvbldvcmtzcGFjZSxcbiAgRmVhdHVyZVdvcmtzcGFjZSxcbiAgV2ZzV29ya3NwYWNlXG59IGZyb20gJy4uLy4uL3dvcmtzcGFjZSc7XG5pbXBvcnQge1xuICBFeHBvcnRJbnZhbGlkRmlsZUVycm9yLFxuICBFeHBvcnROb3RoaW5nVG9FeHBvcnRFcnJvclxufSBmcm9tICcuL2V4cG9ydC5lcnJvcnMnO1xuaW1wb3J0IHsgRXhwb3J0T3B0aW9ucywgR2VvbWV0cnlDb2xsZWN0aW9uIH0gZnJvbSAnLi9leHBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFueUV4cG9ydEZvcm1hdCwgRXhwb3J0T2dyZUZvcm1hdCB9IGZyb20gJy4vZXhwb3J0LnR5cGUnO1xuaW1wb3J0IHsgaXNDc3ZFeHBvcnQgfSBmcm9tICcuL2V4cG9ydC51dGlscyc7XG5cbmNvbnN0IFNIQVBFRklMRV9GSUVMRF9NQVhfTEVOR0hUID0gMjU1O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcbiAgc3RhdGljIG9ncmVGb3JtYXRzOiBSZWNvcmQ8RXhwb3J0T2dyZUZvcm1hdCwgc3RyaW5nPiA9IHtcbiAgICBHTUw6ICdnbWwnLFxuICAgIEdQWDogJ2dweCcsXG4gICAgS01MOiAna21sJyxcbiAgICBTaGFwZWZpbGU6ICdFU1JJIFNoYXBlZmlsZScsXG4gICAgQ1NWOiAnQ1NWJyxcbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIENTViAqL1xuICAgIENTVmNvbW1hOiAnQ1NWY29tbWEnLFxuICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgQ1NWICovXG4gICAgQ1NWc2VtaWNvbG9uOiAnQ1NWc2VtaWNvbG9uJ1xuICB9O1xuXG4gIHN0YXRpYyBub09ncmVGYWxsYmFja3M6IFBhcnRpYWw8QW55RXhwb3J0Rm9ybWF0W10+ID0gWydHTUwnLCAnR1BYJywgJ0tNTCddO1xuXG4gIHByaXZhdGUgb2dyZVVybDogc3RyaW5nO1xuICBwcml2YXRlIGFnZ3JlZ2F0ZUluQ29tbWVudCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHRoaXMub2dyZVVybCA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LnVybCcpO1xuICAgIGNvbnN0IGdweEFnZ3JlZ2F0ZUluQ29tbWVudCA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcbiAgICAgICdpbXBvcnRFeHBvcnQuZ3B4QWdncmVnYXRlSW5Db21tZW50J1xuICAgICk7XG4gICAgaWYgKGdweEFnZ3JlZ2F0ZUluQ29tbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUluQ29tbWVudCA9IGdweEFnZ3JlZ2F0ZUluQ29tbWVudDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgb3B0aW9uczogRXhwb3J0T3B0aW9ucyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHByb2plY3Rpb25JbiA9ICdFUFNHOjQzMjYnLFxuICAgIHByb2plY3Rpb25PdXQgPSAnRVBTRzo0MzI2J1xuICApOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBleHBvcnRPbEZlYXR1cmVzID0gdGhpcy5jbGVhbkZlYXR1cmVzKFxuICAgICAgb2xGZWF0dXJlcyxcbiAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgJ19mZWF0dXJlU3RvcmUnXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmV4cG9ydEFzeW5jKFxuICAgICAgZXhwb3J0T2xGZWF0dXJlcyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0aXRsZSxcbiAgICAgIHByb2plY3Rpb25JbixcbiAgICAgIHByb2plY3Rpb25PdXRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsZWFuRmVhdHVyZXMoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgZm9ybWF0OiBBbnlFeHBvcnRGb3JtYXQsXG4gICAgZXhjbHVkZVByZWZpeCA9ICdfJ1xuICApOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gJ0dQWCcgJiYgdGhpcy5hZ2dyZWdhdGVJbkNvbW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQWdncmVnYXRlZEZlYXR1cmUob2xGZWF0dXJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9sRmVhdHVyZXMubWFwKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgbGV0IGtleXMgPSBvbEZlYXR1cmVcbiAgICAgICAgLmdldEtleXMoKVxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4gIWtleS5zdGFydHNXaXRoKGV4Y2x1ZGVQcmVmaXgpKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ1NoYXBlZmlsZScgJiYgb2xGZWF0dXJlLmdldCgnX3N0eWxlJykpIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBKU09OLnN0cmluZ2lmeShvbEZlYXR1cmUuZ2V0KCdfc3R5bGUnKSk7XG4gICAgICAgIGlmIChzdHlsZS5sZW5ndGggPiBTSEFQRUZJTEVfRklFTERfTUFYX0xFTkdIVClcbiAgICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSAnX3N0eWxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBrZXlzLnJlZHVjZShcbiAgICAgICAgKGFjYzogb2JqZWN0LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gb2xGZWF0dXJlLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHsgZ2VvbWV0cnk6IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV3IE9sRmVhdHVyZShwcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVBZ2dyZWdhdGVkRmVhdHVyZShcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXVxuICApOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSB7XG4gICAgcmV0dXJuIG9sRmVhdHVyZXMubWFwKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgY29uc3Qga2V5cyA9IG9sRmVhdHVyZVxuICAgICAgICAuZ2V0S2V5cygpXG4gICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiAha2V5LnN0YXJ0c1dpdGgoJ18nKSk7XG4gICAgICBsZXQgY29tbWVudCA9ICcnO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IGtleXMucmVkdWNlKFxuICAgICAgICAoYWNjOiBvYmplY3QsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGtleSAmJiBrZXkgIT09ICdnZW9tZXRyeScpIHtcbiAgICAgICAgICAgIGtleSA9PT0gJ2lkJyAmJiBvbEZlYXR1cmUuZ2V0KCdkcmF3JylcbiAgICAgICAgICAgICAgPyAoY29tbWVudCArPSBrZXkgKyAnOicgKyBvbEZlYXR1cmUuZ2V0KCdkcmF3JykgKyAnICAgXFxyXFxuJylcbiAgICAgICAgICAgICAgOiAoY29tbWVudCArPSBrZXkgKyAnOicgKyBvbEZlYXR1cmUuZ2V0KGtleSkgKyAnICAgXFxyXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjY1trZXldID0gb2xGZWF0dXJlLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBnZW9tZXRyeTogb2xGZWF0dXJlLmdldEdlb21ldHJ5KClcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0ZlYXR1cmUgPSBuZXcgT2xGZWF0dXJlKHByb3BlcnRpZXMpO1xuICAgICAgbmV3RmVhdHVyZS5zZXQoJ25hbWUnLCBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICBuZXdGZWF0dXJlLnNldCgnY210JywgY29tbWVudCk7XG5cbiAgICAgIHJldHVybiBuZXdGZWF0dXJlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRBc3luYyhcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBvcHRpb25zOiBFeHBvcnRPcHRpb25zLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbkluOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbk91dDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHsgZm9ybWF0IH0gPSBvcHRpb25zO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPHZvaWQ+KSA9PiB7XG4gICAgICBjb25zdCBub3RoaW5nVG9FeHBvcnQgPSB0aGlzLm5vdGhpbmdUb0V4cG9ydChvbEZlYXR1cmVzLCBmb3JtYXQpO1xuICAgICAgaWYgKG5vdGhpbmdUb0V4cG9ydCkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXhwb3J0Tm90aGluZ1RvRXhwb3J0RXJyb3IoKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcbiAgICAgIGlmIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCkge1xuICAgICAgICBpZiAoIXRoaXMub2dyZVVybCkge1xuICAgICAgICAgIGlmIChFeHBvcnRTZXJ2aWNlLm5vT2dyZUZhbGxiYWNrcy5pbmRleE9mKGZvcm1hdCkgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoXG4gICAgICAgICAgICAgIG9sRmVhdHVyZXMsXG4gICAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgIHByb2plY3Rpb25JbixcbiAgICAgICAgICAgICAgcHJvamVjdGlvbk91dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFeHBvcnRJbnZhbGlkRmlsZUVycm9yKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHBvcnRXaXRoT2dyZShcbiAgICAgICAgICBvbEZlYXR1cmVzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgICAgIHByb2plY3Rpb25PdXRcbiAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpLFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IG9ic2VydmVyLmVycm9yKGVycm9yKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXhwb3J0VG9GaWxlKFxuICAgICAgICAgIG9sRmVhdHVyZXMsXG4gICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHByb2plY3Rpb25JbixcbiAgICAgICAgICBwcm9qZWN0aW9uT3V0XG4gICAgICAgICk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZXhwb3J0VG9GaWxlKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGZvcm1hdDogQW55RXhwb3J0Rm9ybWF0LFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbkluOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbk91dDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5mb3JtYXRGZWF0dXJlcyhcbiAgICAgIG9sRmVhdHVyZXMsXG4gICAgICBmb3JtYXQsXG4gICAgICBwcm9qZWN0aW9uSW4sXG4gICAgICBwcm9qZWN0aW9uT3V0XG4gICAgKTtcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7dGl0bGV9LiR7Zm9ybWF0LnRvTG93ZXJDYXNlKCl9YDtcbiAgICBkb3dubG9hZENvbnRlbnQoZmVhdHVyZXMsICdhdHRhY2htZW50L3BsYWluO2NoYXJzZXQ9dXRmLTgnLCBmaWxlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEZlYXR1cmVzKFxuICAgIGZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBmb3JtYXQ6IEFueUV4cG9ydEZvcm1hdCxcbiAgICBwcm9qZWN0aW9uSW4gPSAnRVBTRzo0MzI2JyxcbiAgICBwcm9qZWN0aW9uT3V0ID0gJ0VQU0c6NDMyNidcbiAgKSB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5nZXRGb3JtYXR0ZXIoZm9ybWF0KTtcbiAgICBjb25zdCBjbGVhbkZlYXR1cmVzID0gdGhpcy5jbGVhbkZlYXR1cmVzKGZlYXR1cmVzLCBmb3JtYXQsICdfZmVhdHVyZVN0b3JlJyk7XG4gICAgcmV0dXJuIGZvcm1hdHRlci53cml0ZUZlYXR1cmVzKGNsZWFuRmVhdHVyZXMsIHtcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uT3V0LFxuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb25JblxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVyKGZvcm1hdDogQW55RXhwb3J0Rm9ybWF0KSB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ0dQWCc6XG4gICAgICAgIHJldHVybiBuZXcgb2xmb3JtYXQuR1BYKCk7XG4gICAgICBjYXNlICdHTUwnOlxuICAgICAgICByZXR1cm4gbmV3IG9sZm9ybWF0LkdNTCgpO1xuICAgICAgY2FzZSAnS01MJzpcbiAgICAgICAgcmV0dXJuIG5ldyBvbGZvcm1hdC5LTUwoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgb2xmb3JtYXQuR2VvSlNPTigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEV4Y2VsKG1hcDogSWdvTWFwLCBzdG9yZTogV29ya3NwYWNlU3RvcmUsIGRhdGE6IEV4cG9ydE9wdGlvbnMpIHtcbiAgICBjb25zdCB3b3JrQm9vayA9IGF3YWl0IGNyZWF0ZUV4Y2VsV29ya0Jvb2soKTtcblxuICAgIGZvciAoY29uc3QgbGF5ZXJOYW1lIG9mIGRhdGEubGF5ZXJzKSB7XG4gICAgICBjb25zdCBsYXllciA9IG1hcC5sYXllckNvbnRyb2xsZXIuZ2V0QnlJZChsYXllck5hbWUpO1xuICAgICAgaWYgKGlzTGF5ZXJHcm91cChsYXllcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuZ2V0RmVhdHVyZXMobWFwLCBsYXllciwgZGF0YSwgc3RvcmUpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRGZWF0dXJlcyA9IGZlYXR1cmVzPy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLmZvcm1hdEZlYXR1cmVzKGZlYXR1cmVzLCAnR2VvSlNPTicpXG4gICAgICAgIDogbnVsbDtcblxuICAgICAgY29uc3QgY29sbGVjdGlvbjogRmVhdHVyZUNvbGxlY3Rpb24gPSBmZWF0dXJlc1xuICAgICAgICA/IEpTT04ucGFyc2UoZm9ybWF0dGVkRmVhdHVyZXMpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgZmVhdHVyZXM6IFtdXG4gICAgICAgICAgfTtcbiAgICAgIGNvbnN0IHJvd3MgPSBjb2xsZWN0aW9uLmZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT5cbiAgICAgICAgdGhpcy5mb3JtYXRSZWNvcmQoZmVhdHVyZS5wcm9wZXJ0aWVzKVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgYWRkRXhjZWxTaGVldFRvV29ya0Jvb2sobGF5ZXIudGl0bGUsIHJvd3MsIHdvcmtCb29rKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGVGcm9tTGF5ZXJzKGRhdGEubGF5ZXJzLCBtYXApO1xuICAgIHdyaXRlRXhjZWxGaWxlKHdvcmtCb29rLCB0aXRsZSwgeyBjb21wcmVzc2lvbjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGl0bGVGcm9tTGF5ZXJzKGxheWVyczogc3RyaW5nW10sIG1hcDogSWdvTWFwKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbGF5ZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgPyB0aGlzLmdldExheWVyVGl0bGVGcm9tSWQobGF5ZXJzWzBdLCBtYXApXG4gICAgICA6ICdpZ28nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXllclRpdGxlRnJvbUlkKGlkOiBzdHJpbmcsIG1hcDogSWdvTWFwKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXllciA9IG1hcC5sYXllckNvbnRyb2xsZXIuZ2V0QnlJZChpZCk7XG4gICAgcmV0dXJuIGxheWVyLnRpdGxlO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRSZWNvcmQoXG4gICAgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlY29yZCkucmVkdWNlKChmb3JtYXR0ZWQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgZm9ybWF0dGVkW2tleV0gPSB0aGlzLmZvcm1hdERhdGFUeXBlKHZhbHVlKTtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRhVHlwZSh2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnOiB7XG4gICAgICAgIGlmIChpc0lzb0RhdGUodmFsdWUgYXMgc3RyaW5nKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBjYXNlIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc6XG4gICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgQXJyYXk6IHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydFdpdGhPZ3JlKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIHsgZm9ybWF0LCBjc3ZTZXBhcmF0b3IgPSBudWxsIH06IEV4cG9ydE9wdGlvbnMsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uT3V0OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgZmVhdHVyZXNUZXh0ID0gbmV3IG9sZm9ybWF0Lkdlb0pTT04oKS53cml0ZUZlYXR1cmVzKG9sRmVhdHVyZXMsIHtcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uT3V0LFxuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb25JblxuICAgIH0pO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub2dyZVVybH0vY29udmVydEpzb25gO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbicsIGZlYXR1cmVzVGV4dCk7XG5cbiAgICBsZXQgb3V0cHV0TmFtZSA9XG4gICAgICBmb3JtYXQgPT09ICdTaGFwZWZpbGUnXG4gICAgICAgID8gYCR7dGl0bGV9LnppcGBcbiAgICAgICAgOiBgJHt0aXRsZX0uJHtmb3JtYXQudG9Mb3dlckNhc2UoKX1gO1xuICAgIGxldCBvZ3JlRm9ybWF0ID0gRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0c1tmb3JtYXRdO1xuXG4gICAgaWYgKGlzQ3N2RXhwb3J0KGZvcm1hdCkpIHtcbiAgICAgIG91dHB1dE5hbWUgPSBgJHt0aXRsZX0uY3N2YDtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKSB7XG4gICAgICAgIG9ncmVGb3JtYXQgPSAnQ1NWJztcbiAgICAgIH1cblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdsY28nLCBgU0VQQVJBVE9SPSR7Y3N2U2VwYXJhdG9yfWApO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2xjbycsIGBTRVBBUkFUT1I9JHtjc3ZTZXBhcmF0b3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdvdXRwdXROYW1lJywgdGhpcy5mb3JtYXRGaWxlbmFtZShvdXRwdXROYW1lKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmb3JtYXQnLCBvZ3JlRm9ybWF0KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KHVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGRvd25sb2FkQmxvYih2YWx1ZSwgb3V0cHV0TmFtZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRGaWxlbmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lXG4gICAgICAucmVwbGFjZUFsbCgnICcsICdfJylcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAucmVwbGFjZSgv4oCZL2csIFwiJ1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgbm90aGluZ1RvRXhwb3J0KFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGZvcm1hdDogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChvbEZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICdHUFgnKSB7XG4gICAgICBjb25zdCBwb2ludE9yTGluZSA9IG9sRmVhdHVyZXMuZmluZCgob2xGZWF0dXJlKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgWydQb2ludCcsICdMaW5lU3RyaW5nJywgJ011bHRpTGluZVN0cmluZyddLmluZGV4T2YoXG4gICAgICAgICAgICBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKClcbiAgICAgICAgICApID49IDBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBvaW50T3JMaW5lID09PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmVhdHVyZXNGcm9tTWFwKFxuICAgIGxheWVyOiBWZWN0b3JMYXllcixcbiAgICBvcHRpb25zOiBFeHBvcnRPcHRpb25zXG4gICk6IE9sRmVhdHVyZVtdIHtcbiAgICBjb25zdCBkYXRhU291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZS5vbDtcbiAgICBjb25zdCBleHRlbnQgPSBsYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCk7XG5cbiAgICBsZXQgZmVhdHVyZXM6IE9sRmVhdHVyZVtdID0gb3B0aW9ucy5mZWF0dXJlSW5NYXBFeHRlbnRcbiAgICAgID8gZGF0YVNvdXJjZS5nZXRGZWF0dXJlc0luRXh0ZW50KGV4dGVudClcbiAgICAgIDogZGF0YVNvdXJjZS5nZXRGZWF0dXJlcygpO1xuXG4gICAgaWYgKGxheWVyLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDbHVzdGVyRGF0YVNvdXJjZSkge1xuICAgICAgZmVhdHVyZXMgPSBmZWF0dXJlcy5mbGF0TWFwKChjbHVzdGVyKSA9PiBjbHVzdGVyLmdldCgnZmVhdHVyZXMnKSk7XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmVhdHVyZXNGcm9tV29ya3NwYWNlKFxuICAgIHdrczogV29ya3NwYWNlLFxuICAgIGxheWVyTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IEV4cG9ydE9wdGlvbnNcbiAgKTogT2xGZWF0dXJlW10ge1xuICAgIGNvbnN0IGhhc1NlbGVjdGlvbiA9IGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyTmFtZSkgIT09IC0xO1xuICAgIGNvbnN0IGlzSW5NYXBFeHRlbnQgPSBkYXRhLmZlYXR1cmVJbk1hcEV4dGVudDtcbiAgICBpZiAoaGFzU2VsZWN0aW9uICYmIGlzSW5NYXBFeHRlbnQpIHtcbiAgICAgIC8vIE9ubHkgZXhwb3J0IHNlbGVjdGVkIGZlYXR1cmUgJiYgaW50byBtYXAgZXh0ZW50XG4gICAgICByZXR1cm4gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuYWxsKClcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQgJiYgZS5zdGF0ZS5zZWxlY3RlZFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCBhcyBPbEZlYXR1cmUpO1xuICAgIH0gZWxzZSBpZiAoaGFzU2VsZWN0aW9uICYmICFpc0luTWFwRXh0ZW50KSB7XG4gICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmICAoaW50byBtYXAgZXh0ZW50IE9SIG5vdClcbiAgICAgIHJldHVybiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5hbGwoKVxuICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5zZWxlY3RlZClcbiAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sIGFzIE9sRmVhdHVyZSk7XG4gICAgfSBlbHNlIGlmIChpc0luTWFwRXh0ZW50KSB7XG4gICAgICAvLyBPbmx5IGludG8gbWFwIGV4dGVudFxuICAgICAgcmV0dXJuIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLmFsbCgpXG4gICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLmluTWFwRXh0ZW50KVxuICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wgYXMgT2xGZWF0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWxsIGZlYXR1cmVzXG4gICAgICByZXR1cm4gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuYWxsKClcbiAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sIGFzIE9sRmVhdHVyZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmVhdHVyZXMoXG4gICAgbWFwOiBJZ29NYXAsXG4gICAgbGF5ZXI6IExheWVyLFxuICAgIGRhdGE6IEV4cG9ydE9wdGlvbnMsXG4gICAgc3RvcmU6IFdvcmtzcGFjZVN0b3JlXG4gICk6IE9ic2VydmFibGU8T2xGZWF0dXJlW10+IHtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gbWFwLnZpZXdDb250cm9sbGVyLmdldE9sUHJvamVjdGlvbigpO1xuICAgIGNvbnN0IGV4dGVudCA9IGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50XG4gICAgICA/IG1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobGF5ZXIuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIFdGU0RhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybiBsYXllci5kYXRhU291cmNlXG4gICAgICAgIC5mZXRjaEZlYXR1cmVzKHtcbiAgICAgICAgICBleHRlbnQsXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICBodHRwQ2xpZW50OiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICAvLyBGaWx0ZXIgc3BhdGlhbCB1c2UgZXh0ZXJuYWwgQVBJIHRvIG1ha2UgcXVlcnkgYW5kIHVzZSBXb3Jrc3BhY2UgdG8gc3RvcmUgZGF0YVxuICAgIGVsc2UgaWYgKGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5lbmFibGVkKSB7XG4gICAgICBjb25zdCB3a3MgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllci5pZCwgc3RvcmUpO1xuICAgICAgaWYgKHdrcz8uZW50aXR5U3RvcmU/LnN0YXRlVmlldy5hbGwoKS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldEZlYXR1cmVzRnJvbVdvcmtzcGFjZSh3a3MsIGxheWVyLmlkLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIG9mKGZlYXR1cmVzKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLmdldEZlYXR1cmVzRnJvbU1hcChsYXllciwgZGF0YSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvZihbXSk7XG4gIH1cblxuICBnZXRXb3Jrc3BhY2VCeUxheWVySWQoaWQ6IHN0cmluZywgc3RvcmU6IFdvcmtzcGFjZVN0b3JlKTogV29ya3NwYWNlIHtcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXJJZCA9IHN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5maW5kKFxuICAgICAgICAod29ya3NwYWNlKSA9PlxuICAgICAgICAgICh3b3Jrc3BhY2UgYXMgV2ZzV29ya3NwYWNlIHwgRmVhdHVyZVdvcmtzcGFjZSB8IEVkaXRpb25Xb3Jrc3BhY2UpXG4gICAgICAgICAgICAubGF5ZXIuaWQgPT09IGlkXG4gICAgICApO1xuICAgIGlmICh3a3NGcm9tTGF5ZXJJZCkge1xuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBnZXRHZW9tVHlwZXMoXG4gICAgZmVhdHVyZXM6IE9sRmVhdHVyZVtdLFxuICAgIGZvcm1hdD86IEFueUV4cG9ydEZvcm1hdFxuICApOiBHZW9tZXRyeUNvbGxlY3Rpb25bXSB7XG4gICAgbGV0IGdlb21UeXBlczogR2VvbWV0cnlDb2xsZWN0aW9uW10gPSBbXTtcbiAgICBpZiAoZm9ybWF0ID09PSAnU2hhcGVmaWxlJyB8fCBmb3JtYXQgPT09ICdHUFgnKSB7XG4gICAgICBmZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmUpID0+IHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUdlb21UeXBlID0gb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50R2VvbVR5cGUgPSBnZW9tVHlwZXMuZmluZChcbiAgICAgICAgICAoZ2VvbVR5cGUpID0+IGdlb21UeXBlLnR5cGUgPT09IGZlYXR1cmVHZW9tVHlwZVxuICAgICAgICApO1xuICAgICAgICBpZiAoY3VycmVudEdlb21UeXBlKSB7XG4gICAgICAgICAgY3VycmVudEdlb21UeXBlLmZlYXR1cmVzLnB1c2gob2xGZWF0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnZW9tVHlwZXMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBmZWF0dXJlR2VvbVR5cGUsXG4gICAgICAgICAgICBmZWF0dXJlczogW29sRmVhdHVyZV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlb21UeXBlcyA9IFt7IHR5cGU6IG51bGwsIGZlYXR1cmVzOiBmZWF0dXJlcyB9XTtcbiAgICB9XG5cbiAgICBnZW9tVHlwZXMuZm9yRWFjaCgoZ2VvbVR5cGUpID0+IHtcbiAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgY29uc3QgcmFkaXVzOiBudW1iZXIgPSBmZWF0dXJlLmdldCgncmFkJyk7XG4gICAgICAgIGlmIChyYWRpdXMpIHtcbiAgICAgICAgICBjb25zdCBjZW50ZXI0MzI2OiBudW1iZXJbXSA9IFtcbiAgICAgICAgICAgIGZlYXR1cmUuZ2V0KCdsb25naXR1ZGUnKSxcbiAgICAgICAgICAgIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBjaXJjbGUgPSBjaXJjdWxhcihjZW50ZXI0MzI2LCByYWRpdXMsIDUwMCk7XG4gICAgICAgICAgY2lyY2xlLnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xuICAgICAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkoY2lyY2xlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2VvbVR5cGVzO1xuICB9XG59XG4iXX0=
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzNDLE9BQU8sRUFDTCxVQUFVLEVBRVYsVUFBVSxFQUNWLGFBQWEsRUFDYixFQUFFLEVBQ0YsR0FBRyxFQUNILFVBQVUsRUFDWCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRSxPQUFPLEVBQVMsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU8vRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMzQixNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUU3QyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUt2QyxNQUFNLE9BQU8sYUFBYTtJQW1CZDtJQUNBO0lBbkJWLE1BQU0sQ0FBQyxXQUFX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O0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsT0FBZTtRQUMxQyxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU87UUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzVELElBQUksVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7WUFDN0IsS0FBSyxDQUFDLE9BQU8sR0FBRywrQkFBK0IsVUFBVSxrQkFBa0IsYUFBYSxHQUFHLENBQUM7WUFDNUYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7d0dBOWlCVSxhQUFhOzRHQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbnRpdHlSZWNvcmQgfSBmcm9tICdAaWdvMi9jb21tb24vZW50aXR5JztcbmltcG9ydCB7IFdvcmtzcGFjZSwgV29ya3NwYWNlU3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24vd29ya3NwYWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhZGRFeGNlbFNoZWV0VG9Xb3JrQm9vayxcbiAgY3JlYXRlRXhjZWxXb3JrQm9vayxcbiAgZG93bmxvYWRCbG9iLFxuICBkb3dubG9hZENvbnRlbnQsXG4gIGlzSXNvRGF0ZSxcbiAgd3JpdGVFeGNlbEZpbGVcbn0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgb2xmb3JtYXQgZnJvbSAnb2wvZm9ybWF0JztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5cbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSAnZ2VvanNvbic7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBPYnNlcnZlcixcbiAgY2F0Y2hFcnJvcixcbiAgbGFzdFZhbHVlRnJvbSxcbiAgb2YsXG4gIHRhcCxcbiAgdGhyb3dFcnJvclxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UsIFdGU0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlJztcbmltcG9ydCB7IExheWVyLCBWZWN0b3JMYXllciwgaXNMYXllckdyb3VwIH0gZnJvbSAnLi4vLi4vbGF5ZXInO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwJztcbmltcG9ydCB7XG4gIEVkaXRpb25Xb3Jrc3BhY2UsXG4gIEZlYXR1cmVXb3Jrc3BhY2UsXG4gIFdmc1dvcmtzcGFjZVxufSBmcm9tICcuLi8uLi93b3Jrc3BhY2UnO1xuaW1wb3J0IHtcbiAgRXhwb3J0SW52YWxpZEZpbGVFcnJvcixcbiAgRXhwb3J0Tm90aGluZ1RvRXhwb3J0RXJyb3Jcbn0gZnJvbSAnLi9leHBvcnQuZXJyb3JzJztcbmltcG9ydCB7IEV4cG9ydE9wdGlvbnMsIEdlb21ldHJ5Q29sbGVjdGlvbiB9IGZyb20gJy4vZXhwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbnlFeHBvcnRGb3JtYXQsIEV4cG9ydE9ncmVGb3JtYXQgfSBmcm9tICcuL2V4cG9ydC50eXBlJztcbmltcG9ydCB7IGlzQ3N2RXhwb3J0IH0gZnJvbSAnLi9leHBvcnQudXRpbHMnO1xuXG5jb25zdCBTSEFQRUZJTEVfRklFTERfTUFYX0xFTkdIVCA9IDI1NTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0U2VydmljZSB7XG4gIHN0YXRpYyBvZ3JlRm9ybWF0czogUmVjb3JkPEV4cG9ydE9ncmVGb3JtYXQsIHN0cmluZz4gPSB7XG4gICAgR01MOiAnR01MJyxcbiAgICBHUFg6ICdHUFgnLFxuICAgIEtNTDogJ0tNTCcsXG4gICAgU2hhcGVmaWxlOiAnRVNSSSBTaGFwZWZpbGUnLFxuICAgIENTVjogJ0NTVicsXG4gICAgLyoqIEBkZXByZWNhdGVkIHVzZSBDU1YgKi9cbiAgICBDU1Zjb21tYTogJ0NTVmNvbW1hJyxcbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIENTViAqL1xuICAgIENTVnNlbWljb2xvbjogJ0NTVnNlbWljb2xvbidcbiAgfTtcblxuICBzdGF0aWMgbm9PZ3JlRmFsbGJhY2tzOiBQYXJ0aWFsPEFueUV4cG9ydEZvcm1hdFtdPiA9IFsnR01MJywgJ0dQWCcsICdLTUwnXTtcblxuICBwcml2YXRlIG9ncmVVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBhZ2dyZWdhdGVJbkNvbW1lbnQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudFxuICApIHtcbiAgICB0aGlzLm9ncmVVcmwgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC51cmwnKTtcbiAgICBjb25zdCBncHhBZ2dyZWdhdGVJbkNvbW1lbnQgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXG4gICAgICAnaW1wb3J0RXhwb3J0LmdweEFnZ3JlZ2F0ZUluQ29tbWVudCdcbiAgICApO1xuICAgIGlmIChncHhBZ2dyZWdhdGVJbkNvbW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVJbkNvbW1lbnQgPSBncHhBZ2dyZWdhdGVJbkNvbW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0KFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIG9wdGlvbnM6IEV4cG9ydE9wdGlvbnMsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uSW4gPSAnRVBTRzo0MzI2JyxcbiAgICBwcm9qZWN0aW9uT3V0ID0gJ0VQU0c6NDMyNidcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZXhwb3J0T2xGZWF0dXJlcyA9IHRoaXMuY2xlYW5GZWF0dXJlcyhcbiAgICAgIG9sRmVhdHVyZXMsXG4gICAgICBvcHRpb25zLmZvcm1hdCxcbiAgICAgICdfZmVhdHVyZVN0b3JlJ1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5leHBvcnRBc3luYyhcbiAgICAgIGV4cG9ydE9sRmVhdHVyZXMsXG4gICAgICBvcHRpb25zLFxuICAgICAgdGl0bGUsXG4gICAgICBwcm9qZWN0aW9uSW4sXG4gICAgICBwcm9qZWN0aW9uT3V0XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbkZlYXR1cmVzKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGZvcm1hdDogQW55RXhwb3J0Rm9ybWF0LFxuICAgIGV4Y2x1ZGVQcmVmaXggPSAnXydcbiAgKTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10ge1xuICAgIGlmIChmb3JtYXQgPT09ICdHUFgnICYmIHRoaXMuYWdncmVnYXRlSW5Db21tZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUFnZ3JlZ2F0ZWRGZWF0dXJlKG9sRmVhdHVyZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBvbEZlYXR1cmVzLm1hcCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICAgIGxldCBrZXlzID0gb2xGZWF0dXJlXG4gICAgICAgIC5nZXRLZXlzKClcbiAgICAgICAgLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+ICFrZXkuc3RhcnRzV2l0aChleGNsdWRlUHJlZml4KSk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdTaGFwZWZpbGUnICYmIG9sRmVhdHVyZS5nZXQoJ19zdHlsZScpKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gSlNPTi5zdHJpbmdpZnkob2xGZWF0dXJlLmdldCgnX3N0eWxlJykpO1xuICAgICAgICBpZiAoc3R5bGUubGVuZ3RoID4gU0hBUEVGSUxFX0ZJRUxEX01BWF9MRU5HSFQpXG4gICAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gJ19zdHlsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0ga2V5cy5yZWR1Y2UoXG4gICAgICAgIChhY2M6IG9iamVjdCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IG9sRmVhdHVyZS5nZXQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7IGdlb21ldHJ5OiBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIG5ldyBPbEZlYXR1cmUocHJvcGVydGllcyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQWdncmVnYXRlZEZlYXR1cmUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W11cbiAgKTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10ge1xuICAgIHJldHVybiBvbEZlYXR1cmVzLm1hcCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSBvbEZlYXR1cmVcbiAgICAgICAgLmdldEtleXMoKVxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4gIWtleS5zdGFydHNXaXRoKCdfJykpO1xuICAgICAgbGV0IGNvbW1lbnQgPSAnJztcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBrZXlzLnJlZHVjZShcbiAgICAgICAgKGFjYzogb2JqZWN0LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChrZXkgJiYga2V5ICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgICAgICBrZXkgPT09ICdpZCcgJiYgb2xGZWF0dXJlLmdldCgnZHJhdycpXG4gICAgICAgICAgICAgID8gKGNvbW1lbnQgKz0ga2V5ICsgJzonICsgb2xGZWF0dXJlLmdldCgnZHJhdycpICsgJyAgIFxcclxcbicpXG4gICAgICAgICAgICAgIDogKGNvbW1lbnQgKz0ga2V5ICsgJzonICsgb2xGZWF0dXJlLmdldChrZXkpICsgJyAgIFxcclxcbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY2Nba2V5XSA9IG9sRmVhdHVyZS5nZXQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZ2VvbWV0cnk6IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdGZWF0dXJlID0gbmV3IE9sRmVhdHVyZShwcm9wZXJ0aWVzKTtcbiAgICAgIG5ld0ZlYXR1cmUuc2V0KCduYW1lJywgb2xGZWF0dXJlLmdldElkKCkpO1xuICAgICAgbmV3RmVhdHVyZS5zZXQoJ2NtdCcsIGNvbW1lbnQpO1xuXG4gICAgICByZXR1cm4gbmV3RmVhdHVyZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0QXN5bmMoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgb3B0aW9uczogRXhwb3J0T3B0aW9ucyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHByb2plY3Rpb25Jbjogc3RyaW5nLFxuICAgIHByb2plY3Rpb25PdXQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZvcm1hdCB9ID0gb3B0aW9ucztcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjx2b2lkPikgPT4ge1xuICAgICAgY29uc3Qgbm90aGluZ1RvRXhwb3J0ID0gdGhpcy5ub3RoaW5nVG9FeHBvcnQob2xGZWF0dXJlcywgZm9ybWF0KTtcbiAgICAgIGlmIChub3RoaW5nVG9FeHBvcnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEV4cG9ydE5vdGhpbmdUb0V4cG9ydEVycm9yKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9ncmVGb3JtYXRzID0gT2JqZWN0LmtleXMoRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0cyk7XG4gICAgICBpZiAob2dyZUZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDApIHtcbiAgICAgICAgaWYgKCF0aGlzLm9ncmVVcmwpIHtcbiAgICAgICAgICBpZiAoRXhwb3J0U2VydmljZS5ub09ncmVGYWxsYmFja3MuaW5kZXhPZihmb3JtYXQpID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0VG9GaWxlKFxuICAgICAgICAgICAgICBvbEZlYXR1cmVzLFxuICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICBwcm9qZWN0aW9uSW4sXG4gICAgICAgICAgICAgIHByb2plY3Rpb25PdXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXhwb3J0SW52YWxpZEZpbGVFcnJvcigpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhwb3J0V2l0aE9ncmUoXG4gICAgICAgICAgb2xGZWF0dXJlcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHByb2plY3Rpb25JbixcbiAgICAgICAgICBwcm9qZWN0aW9uT3V0XG4gICAgICAgICk/LnN1YnNjcmliZSh7XG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoXG4gICAgICAgICAgb2xGZWF0dXJlcyxcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgICAgIHByb2plY3Rpb25PdXRcbiAgICAgICAgKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBleHBvcnRUb0ZpbGUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgZm9ybWF0OiBBbnlFeHBvcnRGb3JtYXQsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uT3V0OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmZvcm1hdEZlYXR1cmVzKFxuICAgICAgb2xGZWF0dXJlcyxcbiAgICAgIGZvcm1hdCxcbiAgICAgIHByb2plY3Rpb25JbixcbiAgICAgIHByb2plY3Rpb25PdXRcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHt0aXRsZX0uJHtmb3JtYXQudG9Mb3dlckNhc2UoKX1gO1xuICAgIGRvd25sb2FkQ29udGVudChmZWF0dXJlcywgJ2F0dGFjaG1lbnQvcGxhaW47Y2hhcnNldD11dGYtOCcsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RmVhdHVyZXMoXG4gICAgZmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGZvcm1hdDogQW55RXhwb3J0Rm9ybWF0LFxuICAgIHByb2plY3Rpb25JbiA9ICdFUFNHOjQzMjYnLFxuICAgIHByb2plY3Rpb25PdXQgPSAnRVBTRzo0MzI2J1xuICApIHtcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLmdldEZvcm1hdHRlcihmb3JtYXQpO1xuICAgIGNvbnN0IGNsZWFuRmVhdHVyZXMgPSB0aGlzLmNsZWFuRmVhdHVyZXMoZmVhdHVyZXMsIGZvcm1hdCwgJ19mZWF0dXJlU3RvcmUnKTtcbiAgICByZXR1cm4gZm9ybWF0dGVyLndyaXRlRmVhdHVyZXMoY2xlYW5GZWF0dXJlcywge1xuICAgICAgZGF0YVByb2plY3Rpb246IHByb2plY3Rpb25PdXQsXG4gICAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gICAgfSk7XG4gIH1cblxuICBnZXRGb3JtYXR0ZXIoZm9ybWF0OiBBbnlFeHBvcnRGb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnR1BYJzpcbiAgICAgICAgcmV0dXJuIG5ldyBvbGZvcm1hdC5HUFgoKTtcbiAgICAgIGNhc2UgJ0dNTCc6XG4gICAgICAgIHJldHVybiBuZXcgb2xmb3JtYXQuR01MKCk7XG4gICAgICBjYXNlICdLTUwnOlxuICAgICAgICByZXR1cm4gbmV3IG9sZm9ybWF0LktNTCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBvbGZvcm1hdC5HZW9KU09OKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhwb3J0RXhjZWwobWFwOiBJZ29NYXAsIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZSwgZGF0YTogRXhwb3J0T3B0aW9ucykge1xuICAgIGNvbnN0IHdvcmtCb29rID0gYXdhaXQgY3JlYXRlRXhjZWxXb3JrQm9vaygpO1xuXG4gICAgZm9yIChjb25zdCBsYXllck5hbWUgb2YgZGF0YS5sYXllcnMpIHtcbiAgICAgIGNvbnN0IGxheWVyID0gbWFwLmxheWVyQ29udHJvbGxlci5nZXRCeUlkKGxheWVyTmFtZSk7XG4gICAgICBpZiAoaXNMYXllckdyb3VwKGxheWVyKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5nZXRGZWF0dXJlcyhtYXAsIGxheWVyLCBkYXRhLCBzdG9yZSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlZEZlYXR1cmVzID0gZmVhdHVyZXM/Lmxlbmd0aFxuICAgICAgICA/IHRoaXMuZm9ybWF0RmVhdHVyZXMoZmVhdHVyZXMsICdHZW9KU09OJylcbiAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCBjb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbiA9IGZlYXR1cmVzXG4gICAgICAgID8gSlNPTi5wYXJzZShmb3JtYXR0ZWRGZWF0dXJlcylcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBmZWF0dXJlczogW11cbiAgICAgICAgICB9O1xuICAgICAgY29uc3Qgcm93cyA9IGNvbGxlY3Rpb24uZmVhdHVyZXMubWFwKChmZWF0dXJlKSA9PlxuICAgICAgICB0aGlzLmZvcm1hdFJlY29yZChmZWF0dXJlLnByb3BlcnRpZXMpXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBhZGRFeGNlbFNoZWV0VG9Xb3JrQm9vayhsYXllci50aXRsZSwgcm93cywgd29ya0Jvb2spO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRUaXRsZUZyb21MYXllcnMoZGF0YS5sYXllcnMsIG1hcCk7XG4gICAgd3JpdGVFeGNlbEZpbGUod29ya0Jvb2ssIHRpdGxlLCB7IGNvbXByZXNzaW9uOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUaXRsZUZyb21MYXllcnMobGF5ZXJzOiBzdHJpbmdbXSwgbWFwOiBJZ29NYXApOiBzdHJpbmcge1xuICAgIHJldHVybiBsYXllcnMubGVuZ3RoID09PSAxXG4gICAgICA/IHRoaXMuZ2V0TGF5ZXJUaXRsZUZyb21JZChsYXllcnNbMF0sIG1hcClcbiAgICAgIDogJ2lnbyc7XG4gIH1cblxuICBwcml2YXRlIGdldExheWVyVGl0bGVGcm9tSWQoaWQ6IHN0cmluZywgbWFwOiBJZ29NYXApOiBzdHJpbmcge1xuICAgIGNvbnN0IGxheWVyID0gbWFwLmxheWVyQ29udHJvbGxlci5nZXRCeUlkKGlkKTtcbiAgICByZXR1cm4gbGF5ZXIudGl0bGU7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFJlY29yZChcbiAgICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVjb3JkKS5yZWR1Y2UoKGZvcm1hdHRlZCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBmb3JtYXR0ZWRba2V5XSA9IHRoaXMuZm9ybWF0RGF0YVR5cGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGFUeXBlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc6IHtcbiAgICAgICAgaWYgKGlzSXNvRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZykudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JzpcbiAgICAgIGNhc2UgdmFsdWUgaW5zdGFuY2VvZiBBcnJheToge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0V2l0aE9ncmUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgeyBmb3JtYXQsIGNzdlNlcGFyYXRvciA9IG51bGwgfTogRXhwb3J0T3B0aW9ucyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHByb2plY3Rpb25Jbjogc3RyaW5nLFxuICAgIHByb2plY3Rpb25PdXQ6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IG9sZm9ybWF0Lkdlb0pTT04oKS53cml0ZUZlYXR1cmVzT2JqZWN0KG9sRmVhdHVyZXMsIHtcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uT3V0LFxuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb25JblxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2l6ZUVycm9yID0gdGhpcy5jaGVja09ncmVQYXlsb2FkU2l6ZShKU09OLnN0cmluZ2lmeShmZWF0dXJlcykpO1xuICAgIGlmIChzaXplRXJyb3IpIHJldHVybiBzaXplRXJyb3I7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9ncmVVcmx9L2NvbnZlcnRKc29uYDtcblxuICAgIGxldCBvdXRwdXROYW1lID0gdGl0bGU7XG4gICAgbGV0IG9ncmVGb3JtYXQgPSBFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzW2Zvcm1hdCBhcyBFeHBvcnRPZ3JlRm9ybWF0XTtcblxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgaWYgKGlzQ3N2RXhwb3J0KGZvcm1hdCkpIHtcbiAgICAgIG91dHB1dE5hbWUgPSB0aXRsZTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKSB7XG4gICAgICAgIG9ncmVGb3JtYXQgPSAnQ1NWJztcbiAgICAgIH1cblxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnbGNvJywgYFNFUEFSQVRPUj0ke2NzdlNlcGFyYXRvcn1gKTtcbiAgICB9XG5cbiAgICBwYXJhbXMgPSBwYXJhbXNcbiAgICAgIC5zZXQoJ25hbWUnLCB0aGlzLmZvcm1hdEZpbGVuYW1lKG91dHB1dE5hbWUpKVxuICAgICAgLnNldCgnZm9ybWF0Jywgb2dyZUZvcm1hdClcbiAgICAgIC5zZXQoJ2ZvcmNlVVRGOCcsICd0cnVlJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdCh1cmwsIGZlYXR1cmVzLCB7XG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgIG9ic2VydmU6ICdyZXNwb25zZSdcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlTmFtZShcbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBvdXRwdXROYW1lLFxuICAgICAgICAgICAgZm9ybWF0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBkb3dubG9hZEJsb2IocmVzcG9uc2UuYm9keSwgZmlsZW5hbWUpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWUoXG4gICAgaGVhZGVyczogSHR0cEhlYWRlcnMsXG4gICAgb3V0cHV0TmFtZTogc3RyaW5nLFxuICAgIGZvcm1hdDogQW55RXhwb3J0Rm9ybWF0XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbiAgICBjb25zdCBmaWxlbmFtZU1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uPy5tYXRjaCgvZmlsZW5hbWU9XCI/KFteXCI7XFxuXSspXCI/Lyk7XG4gICAgaWYgKGZpbGVuYW1lTWF0Y2g/LlsxXSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lTWF0Y2hbMV07XG4gICAgfVxuXG4gICAgbGV0IGV4dGVuc2lvbiA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChmb3JtYXQgPT09ICdTaGFwZWZpbGUnKSB7XG4gICAgICBleHRlbnNpb24gPSAnemlwJztcbiAgICB9XG4gICAgcmV0dXJuIGAke291dHB1dE5hbWV9LiR7ZXh0ZW5zaW9ufWA7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEZpbGVuYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWVcbiAgICAgIC5yZXBsYWNlQWxsKCcgJywgJ18nKVxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV8tXS9nLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIG5vdGhpbmdUb0V4cG9ydChcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBmb3JtYXQ6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAob2xGZWF0dXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSAnR1BYJykge1xuICAgICAgY29uc3QgcG9pbnRPckxpbmUgPSBvbEZlYXR1cmVzLmZpbmQoKG9sRmVhdHVyZSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIFsnUG9pbnQnLCAnTGluZVN0cmluZycsICdNdWx0aUxpbmVTdHJpbmcnXS5pbmRleE9mKFxuICAgICAgICAgICAgb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpXG4gICAgICAgICAgKSA+PSAwXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwb2ludE9yTGluZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldEZlYXR1cmVzRnJvbU1hcChcbiAgICBsYXllcjogVmVjdG9yTGF5ZXIsXG4gICAgb3B0aW9uczogRXhwb3J0T3B0aW9uc1xuICApOiBPbEZlYXR1cmVbXSB7XG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2Uub2w7XG4gICAgY29uc3QgZXh0ZW50ID0gbGF5ZXIubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpO1xuXG4gICAgbGV0IGZlYXR1cmVzOiBPbEZlYXR1cmVbXSA9IG9wdGlvbnMuZmVhdHVyZUluTWFwRXh0ZW50XG4gICAgICA/IGRhdGFTb3VyY2UuZ2V0RmVhdHVyZXNJbkV4dGVudChleHRlbnQpXG4gICAgICA6IGRhdGFTb3VyY2UuZ2V0RmVhdHVyZXMoKTtcblxuICAgIGlmIChsYXllci5kYXRhU291cmNlIGluc3RhbmNlb2YgQ2x1c3RlckRhdGFTb3VyY2UpIHtcbiAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXMuZmxhdE1hcCgoY2x1c3RlcikgPT4gY2x1c3Rlci5nZXQoJ2ZlYXR1cmVzJykpO1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZXM7XG4gIH1cblxuICBwcml2YXRlIGdldEZlYXR1cmVzRnJvbVdvcmtzcGFjZShcbiAgICB3a3M6IFdvcmtzcGFjZSxcbiAgICBsYXllck5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBFeHBvcnRPcHRpb25zXG4gICk6IE9sRmVhdHVyZVtdIHtcbiAgICBjb25zdCBoYXNTZWxlY3Rpb24gPSBkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllck5hbWUpICE9PSAtMTtcbiAgICBjb25zdCBpc0luTWFwRXh0ZW50ID0gZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQ7XG4gICAgaWYgKGhhc1NlbGVjdGlvbiAmJiBpc0luTWFwRXh0ZW50KSB7XG4gICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmIGludG8gbWFwIGV4dGVudFxuICAgICAgcmV0dXJuIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLmFsbCgpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLmluTWFwRXh0ZW50ICYmIGUuc3RhdGUuc2VsZWN0ZWRcbiAgICAgICAgKVxuICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wgYXMgT2xGZWF0dXJlKTtcbiAgICB9IGVsc2UgaWYgKGhhc1NlbGVjdGlvbiAmJiAhaXNJbk1hcEV4dGVudCkge1xuICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiAgKGludG8gbWFwIGV4dGVudCBPUiBub3QpXG4gICAgICByZXR1cm4gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuYWxsKClcbiAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCBhcyBPbEZlYXR1cmUpO1xuICAgIH0gZWxzZSBpZiAoaXNJbk1hcEV4dGVudCkge1xuICAgICAgLy8gT25seSBpbnRvIG1hcCBleHRlbnRcbiAgICAgIHJldHVybiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5hbGwoKVxuICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudClcbiAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sIGFzIE9sRmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFsbCBmZWF0dXJlc1xuICAgICAgcmV0dXJuIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLmFsbCgpXG4gICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCBhcyBPbEZlYXR1cmUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZlYXR1cmVzKFxuICAgIG1hcDogSWdvTWFwLFxuICAgIGxheWVyOiBMYXllcixcbiAgICBkYXRhOiBFeHBvcnRPcHRpb25zLFxuICAgIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZVxuICApOiBPYnNlcnZhYmxlPE9sRmVhdHVyZVtdPiB7XG4gICAgY29uc3QgcHJvamVjdGlvbiA9IG1hcC52aWV3Q29udHJvbGxlci5nZXRPbFByb2plY3Rpb24oKTtcbiAgICBjb25zdCBleHRlbnQgPSBkYXRhLmZlYXR1cmVJbk1hcEV4dGVudFxuICAgICAgPyBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGxheWVyLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBXRlNEYXRhU291cmNlKSB7XG4gICAgICByZXR1cm4gbGF5ZXIuZGF0YVNvdXJjZVxuICAgICAgICAuZmV0Y2hGZWF0dXJlcyh7XG4gICAgICAgICAgZXh0ZW50LFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgaHR0cENsaWVudDogdGhpcy5odHRwQ2xpZW50XG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLy8gRmlsdGVyIHNwYXRpYWwgdXNlIGV4dGVybmFsIEFQSSB0byBtYWtlIHF1ZXJ5IGFuZCB1c2UgV29ya3NwYWNlIHRvIHN0b3JlIGRhdGFcbiAgICBlbHNlIGlmIChsYXllci5vcHRpb25zLndvcmtzcGFjZT8uZW5hYmxlZCkge1xuICAgICAgY29uc3Qgd2tzID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIuaWQsIHN0b3JlKTtcbiAgICAgIGlmICh3a3M/LmVudGl0eVN0b3JlPy5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRGZWF0dXJlc0Zyb21Xb3Jrc3BhY2Uod2tzLCBsYXllci5pZCwgZGF0YSk7XG4gICAgICAgIHJldHVybiBvZihmZWF0dXJlcykucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5nZXRGZWF0dXJlc0Zyb21NYXAobGF5ZXIsIGRhdGEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG5cbiAgZ2V0V29ya3NwYWNlQnlMYXllcklkKGlkOiBzdHJpbmcsIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZSk6IFdvcmtzcGFjZSB7XG4gICAgY29uc3Qgd2tzRnJvbUxheWVySWQgPSBzdG9yZVxuICAgICAgLmFsbCgpXG4gICAgICAuZmluZChcbiAgICAgICAgKHdvcmtzcGFjZSkgPT5cbiAgICAgICAgICAod29ya3NwYWNlIGFzIFdmc1dvcmtzcGFjZSB8IEZlYXR1cmVXb3Jrc3BhY2UgfCBFZGl0aW9uV29ya3NwYWNlKVxuICAgICAgICAgICAgLmxheWVyLmlkID09PSBpZFxuICAgICAgKTtcbiAgICBpZiAod2tzRnJvbUxheWVySWQpIHtcbiAgICAgIHJldHVybiB3a3NGcm9tTGF5ZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0R2VvbVR5cGVzKFxuICAgIGZlYXR1cmVzOiBPbEZlYXR1cmVbXSxcbiAgICBmb3JtYXQ/OiBBbnlFeHBvcnRGb3JtYXRcbiAgKTogR2VvbWV0cnlDb2xsZWN0aW9uW10ge1xuICAgIGxldCBnZW9tVHlwZXM6IEdlb21ldHJ5Q29sbGVjdGlvbltdID0gW107XG4gICAgaWYgKGZvcm1hdCA9PT0gJ1NoYXBlZmlsZScgfHwgZm9ybWF0ID09PSAnR1BYJykge1xuICAgICAgZmVhdHVyZXMuZm9yRWFjaCgob2xGZWF0dXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVHZW9tVHlwZSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcbiAgICAgICAgY29uc3QgY3VycmVudEdlb21UeXBlID0gZ2VvbVR5cGVzLmZpbmQoXG4gICAgICAgICAgKGdlb21UeXBlKSA9PiBnZW9tVHlwZS50eXBlID09PSBmZWF0dXJlR2VvbVR5cGVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1cnJlbnRHZW9tVHlwZSkge1xuICAgICAgICAgIGN1cnJlbnRHZW9tVHlwZS5mZWF0dXJlcy5wdXNoKG9sRmVhdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2VvbVR5cGVzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogZmVhdHVyZUdlb21UeXBlLFxuICAgICAgICAgICAgZmVhdHVyZXM6IFtvbEZlYXR1cmVdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW9tVHlwZXMgPSBbeyB0eXBlOiBudWxsLCBmZWF0dXJlczogZmVhdHVyZXMgfV07XG4gICAgfVxuXG4gICAgZ2VvbVR5cGVzLmZvckVhY2goKGdlb21UeXBlKSA9PiB7XG4gICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xuICAgICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgICAgY29uc3QgY2VudGVyNDMyNjogbnVtYmVyW10gPSBbXG4gICAgICAgICAgICBmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksXG4gICAgICAgICAgICBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKVxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgY2lyY2xlID0gY2lyY3VsYXIoY2VudGVyNDMyNiwgcmFkaXVzLCA1MDApO1xuICAgICAgICAgIGNpcmNsZS50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcbiAgICAgICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KGNpcmNsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdlb21UeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHBheWxvYWQgZXhjZWVkcyB0aGUgT0dSRSBtYXhpbXVtIGFsbG93ZWQgc2l6ZSAoNTBNQikuXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSBHZW9KU09OIHBheWxvYWQgYXMgYSBzdHJpbmcuXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHBheWxvYWQgaXMgdG9vIGxhcmdlLCBvciB1bmRlZmluZWQgaWYgdGhlIHNpemUgaXMgYWNjZXB0YWJsZS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tPZ3JlUGF5bG9hZFNpemUocGF5bG9hZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxuZXZlcj4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IE9HUkVfTUFYX1NJWkUgPSA1MCAqIDEwMjQgKiAxMDI0OyAvLyA1ME1CXG4gICAgY29uc3QgYnl0ZUxlbmd0aCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwYXlsb2FkKS5sZW5ndGg7XG4gICAgaWYgKGJ5dGVMZW5ndGggPiBPR1JFX01BWF9TSVpFKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgZXJyb3IubmFtZSA9ICdtYXhGaWVsZHNTaXplJztcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSBgR2VvSlNPTiB0b28gbGFyZ2UgZm9yIE9HUkU6ICR7Ynl0ZUxlbmd0aH0gYnl0ZXMgKG1heCBpcyAke09HUkVfTUFYX1NJWkV9KWA7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -102,9 +102,9 @@ export function detectFileEPSG(options) {
|
|
|
102
102
|
const text = reader.result;
|
|
103
103
|
const lines = text.split('\n');
|
|
104
104
|
for (let line = 0; line <= nbLines; line++) {
|
|
105
|
-
const epsg = lines[line].match(/EPSG
|
|
105
|
+
const epsg = lines[line].match(/EPSG:{1,2}\d{1,6}/gm);
|
|
106
106
|
if (epsg !== null && epsg.length) {
|
|
107
|
-
resolve(epsg[0]);
|
|
107
|
+
resolve(epsg[0].replace(/::/g, ':'));
|
|
108
108
|
break;
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
@@ -119,4 +119,4 @@ export function detectFileEPSG(options) {
|
|
|
119
119
|
reader.readAsText(file, 'UTF-8');
|
|
120
120
|
}));
|
|
121
121
|
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlvbi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvcHJvamVjdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXhDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDakIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkIsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFDM0IsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxHQUFHLE1BQU0sR0FBRyxRQUFRLENB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QUNqRCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLE1BQU07b0JBQ1IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDckIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgfSBmcm9tICcuL3Byb2plY3Rpb24uaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogUmV0dXJuIGEgbnVtYmVyIG9mIHpvbmUgTVRNIGZvciBhIGxvbmdpdHVkZSBmb3IgcHJvdmluY2Ugb2YgUXVlYmVjIG9ubHlcbiAqIEBwYXJhbSBsb24gbnVtYmVyXG4gKiBAcmV0dXJucyB6b25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6b25lTXRtKGxvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGxvbk1pbiA9IC01NDtcbiAgY29uc3QgbG9uTWF4ID0gLTgxO1xuICBpZiAobG9uIDwgbG9uTWF4IHx8IGxvbiA+IGxvbk1pbikge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlbHRhTG9uID0gMztcbiAgICBsZXQgem9uZSA9IDI7XG4gICAgd2hpbGUgKE1hdGguYWJzKGxvbiAtIGxvbk1pbikgPiBkZWx0YUxvbikge1xuICAgICAgbG9uTWluID0gbG9uTWluIC0gZGVsdGFMb247XG4gICAgICB6b25lKys7XG4gICAgfVxuICAgIHJldHVybiB6b25lO1xuICB9XG59XG4vKipcbiAqIFJldHVybiBhIG51bWJlciBvZiB6b25lIFVUTSBmb3IgYSBsb25naXR1ZGVcbiAqIEBwYXJhbSBsb24gbnVtYmVyXG4gKiBAcmV0dXJucyB6b25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6b25lVXRtKGxvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGxvbk1pbiA9IC0xODA7XG4gIGNvbnN0IGRlbHRhTG9uID0gNjtcbiAgbGV0IHpvbmUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMobG9uIC0gbG9uTWluKSA+IGRlbHRhTG9uKSB7XG4gICAgbG9uTWluID0gbG9uTWluICsgZGVsdGFMb247XG4gICAgem9uZSsrO1xuICB9XG4gIHJldHVybiB6b25lO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIGNvbnRyYWludHMgb2YgcHJvamVjdGlvbnNcbiAqIEBwYXJhbSBwcm9qZWN0aW9uc0xpbWl0YXRpb25zOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9uc1xuICogQHJldHVybnMgcHJvamVjdGlvbnNDb250cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMoXG4gIHByb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zXG4pOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB7XG4gIGNvbnN0IG10bVpvbmUgPSBwcm9qZWN0aW9uc0xpbWl0YXRpb25zLm10bVpvbmU7XG4gIGNvbnN0IHV0bVpvbmUgPSBwcm9qZWN0aW9uc0xpbWl0YXRpb25zLnV0bVpvbmU7XG4gIGNvbnN0IHByb2plY3Rpb25zQ29uc3RyYWludHMgPSB7XG4gICAgcHJvakZyb21Db25maWc6XG4gICAgICBwcm9qZWN0aW9uc0xpbWl0YXRpb25zLnByb2pGcm9tQ29uZmlnID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICBuYWQ4MzogcHJvamVjdGlvbnNMaW1pdGF0aW9ucy5uYWQ4MyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXG4gICAgd2dzODQ6IHByb2plY3Rpb25zTGltaXRhdGlvbnMud2dzODQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgIHdlYk1lcmNhdG9yOiBwcm9qZWN0aW9uc0xpbWl0YXRpb25zLndlYk1lcmNhdG9yID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICB1dG06IHByb2plY3Rpb25zTGltaXRhdGlvbnMudXRtID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICBtdG06IHByb2plY3Rpb25zTGltaXRhdGlvbnMubXRtID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICB1dG1ab25lOiB7XG4gICAgICBtaW5ab25lOiB1dG1ab25lICYmIHV0bVpvbmUubWluWm9uZSA/IHV0bVpvbmUubWluWm9uZSA6IDE3LFxuICAgICAgbWF4Wm9uZTogdXRtWm9uZSAmJiB1dG1ab25lLm1heFpvbmUgPyB1dG1ab25lLm1heFpvbmUgOiAyMVxuICAgIH0sXG4gICAgbXRtWm9uZToge1xuICAgICAgbWluWm9uZTogbXRtWm9uZSAmJiBtdG1ab25lLm1pblpvbmUgPyBtdG1ab25lLm1pblpvbmUgOiAyLFxuICAgICAgbWF4Wm9uZTogbXRtWm9uZSAmJiBtdG1ab25lLm1heFpvbmUgPyBtdG1ab25lLm1heFpvbmUgOiAxMFxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHByb2plY3Rpb25zQ29uc3RyYWludHM7XG59XG4vKipcbiAqIE1ldGhvZCBhbGxvd2luZyB0byByZWFkIHRoZSBmaWxlIGFuZCB0cnkgdG8gZGV0ZWN0IHByb2plY3Rpb24vQ29vcmQgc3lzdGVtXG4gKiBPbmx5IGdlb2pzb24vanNvbi9nbWwgY291bGQgYmUgZGV0ZWN0ZWQgYXQgdGhpcyBtb21lbnQuXG4gKiBAcGFyYW0gb3B0aW9ucyBBIGZpbGUgYW5kIGFuIG9wdGlvbmFsIG51bWJlciBvZiBsaW5lIHRvIHJlYWQgdGhlIEVQU0cgQ29kZS4gVXNlZCBvbmx5IGZvciBHTUwgZmlsZXNcbiAqIEByZXR1cm5zIE9ic2VydmFibGUgc3RyaW5nLCBlcHNnTm90RGVmaW5lZCBpZiB0aGUgRVBTRyBpcyBub3QgZGV0ZWN0ZWQgb3IgYSBFUFNHIHN0cmluZyBleDogRVBTRzozODU3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RGaWxlRVBTRyhvcHRpb25zOiB7XG4gIGZpbGU6IEZpbGU7XG4gIG5iTGluZXM/OiBudW1iZXI7XG59KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZSA9IG9wdGlvbnMuZmlsZTtcbiAgY29uc3QgbmJMaW5lcyA9IG9wdGlvbnMubmJMaW5lcyA/PyA1MDA7XG5cbiAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgcmV0dXJuIGZyb20oXG4gICAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5nZW9qc29uJykgJiZcbiAgICAgICAgIWZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuanNvbicpICYmXG4gICAgICAgICFmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmdtbCcpXG4gICAgICApIHtcbiAgICAgICAgcmVzb2x2ZSgnZXBzZ05vdERlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5nZW9qc29uJykgfHxcbiAgICAgICAgICBmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmpzb24nKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBnZW9qc29uID0gSlNPTi5wYXJzZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgaWYgKGdlb2pzb24uY3JzPy5wcm9wZXJ0aWVzPy5uYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBlcHNnID1cbiAgICAgICAgICAgICAgZ2VvanNvbi5jcnMucHJvcGVydGllcy5uYW1lLm1hdGNoKC9FUFNHOnsxLDJ9XFxkezAsNn0vZ20pO1xuICAgICAgICAgICAgaWYgKGVwc2cgIT09IG51bGwgJiYgZXBzZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShlcHNnWzBdLnJlcGxhY2UoLzo6L2csICc6JykpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKCdlcHNnTm90RGVmaW5lZCcpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoJ2Vwc2dOb3REZWZpbmVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuZ21sJykpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgY29uc3QgbGluZXMgPSAodGV4dCBhcyBzdHJpbmcpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8PSBuYkxpbmVzOyBsaW5lKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVwc2cgPSBsaW5lc1tsaW5lXS5tYXRjaCgvRVBTRzpcXGR7MCw2fS9nbSk7XG4gICAgICAgICAgICBpZiAoZXBzZyAhPT0gbnVsbCAmJiBlcHNnLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXNvbHZlKGVwc2dbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSgnZXBzZ05vdERlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICdVVEYtOCcpO1xuICAgIH0pXG4gICk7XG59XG4iXX0=
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlvbi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvcHJvamVjdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXhDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDakIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkIsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFDM0IsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxHQUFHLE1BQU0sR0FBRyxRQUFRLENB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QUN0RCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsTUFBTTtvQkFDUixDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNyQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJy4vcHJvamVjdGlvbi5pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBSZXR1cm4gYSBudW1iZXIgb2Ygem9uZSBNVE0gZm9yIGEgbG9uZ2l0dWRlIGZvciBwcm92aW5jZSBvZiBRdWViZWMgb25seVxuICogQHBhcmFtIGxvbiBudW1iZXJcbiAqIEByZXR1cm5zIHpvbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvbmVNdG0obG9uOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgbG9uTWluID0gLTU0O1xuICBjb25zdCBsb25NYXggPSAtODE7XG4gIGlmIChsb24gPCBsb25NYXggfHwgbG9uID4gbG9uTWluKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVsdGFMb24gPSAzO1xuICAgIGxldCB6b25lID0gMjtcbiAgICB3aGlsZSAoTWF0aC5hYnMobG9uIC0gbG9uTWluKSA+IGRlbHRhTG9uKSB7XG4gICAgICBsb25NaW4gPSBsb25NaW4gLSBkZWx0YUxvbjtcbiAgICAgIHpvbmUrKztcbiAgICB9XG4gICAgcmV0dXJuIHpvbmU7XG4gIH1cbn1cbi8qKlxuICogUmV0dXJuIGEgbnVtYmVyIG9mIHpvbmUgVVRNIGZvciBhIGxvbmdpdHVkZVxuICogQHBhcmFtIGxvbiBudW1iZXJcbiAqIEByZXR1cm5zIHpvbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvbmVVdG0obG9uOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgbG9uTWluID0gLTE4MDtcbiAgY29uc3QgZGVsdGFMb24gPSA2O1xuICBsZXQgem9uZSA9IDE7XG4gIHdoaWxlIChNYXRoLmFicyhsb24gLSBsb25NaW4pID4gZGVsdGFMb24pIHtcbiAgICBsb25NaW4gPSBsb25NaW4gKyBkZWx0YUxvbjtcbiAgICB6b25lKys7XG4gIH1cbiAgcmV0dXJuIHpvbmU7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgY29udHJhaW50cyBvZiBwcm9qZWN0aW9uc1xuICogQHBhcmFtIHByb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zXG4gKiBAcmV0dXJucyBwcm9qZWN0aW9uc0NvbnRyYWludHM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyhcbiAgcHJvamVjdGlvbnNMaW1pdGF0aW9uczogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnNcbik6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcbiAgY29uc3QgbXRtWm9uZSA9IHByb2plY3Rpb25zTGltaXRhdGlvbnMubXRtWm9uZTtcbiAgY29uc3QgdXRtWm9uZSA9IHByb2plY3Rpb25zTGltaXRhdGlvbnMudXRtWm9uZTtcbiAgY29uc3QgcHJvamVjdGlvbnNDb25zdHJhaW50cyA9IHtcbiAgICBwcm9qRnJvbUNvbmZpZzpcbiAgICAgIHByb2plY3Rpb25zTGltaXRhdGlvbnMucHJvakZyb21Db25maWcgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgIG5hZDgzOiBwcm9qZWN0aW9uc0xpbWl0YXRpb25zLm5hZDgzID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICB3Z3M4NDogcHJvamVjdGlvbnNMaW1pdGF0aW9ucy53Z3M4NCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXG4gICAgd2ViTWVyY2F0b3I6IHByb2plY3Rpb25zTGltaXRhdGlvbnMud2ViTWVyY2F0b3IgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgIHV0bTogcHJvamVjdGlvbnNMaW1pdGF0aW9ucy51dG0gPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgIG10bTogcHJvamVjdGlvbnNMaW1pdGF0aW9ucy5tdG0gPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgIHV0bVpvbmU6IHtcbiAgICAgIG1pblpvbmU6IHV0bVpvbmUgJiYgdXRtWm9uZS5taW5ab25lID8gdXRtWm9uZS5taW5ab25lIDogMTcsXG4gICAgICBtYXhab25lOiB1dG1ab25lICYmIHV0bVpvbmUubWF4Wm9uZSA/IHV0bVpvbmUubWF4Wm9uZSA6IDIxXG4gICAgfSxcbiAgICBtdG1ab25lOiB7XG4gICAgICBtaW5ab25lOiBtdG1ab25lICYmIG10bVpvbmUubWluWm9uZSA/IG10bVpvbmUubWluWm9uZSA6IDIsXG4gICAgICBtYXhab25lOiBtdG1ab25lICYmIG10bVpvbmUubWF4Wm9uZSA/IG10bVpvbmUubWF4Wm9uZSA6IDEwXG4gICAgfVxuICB9O1xuICByZXR1cm4gcHJvamVjdGlvbnNDb25zdHJhaW50cztcbn1cbi8qKlxuICogTWV0aG9kIGFsbG93aW5nIHRvIHJlYWQgdGhlIGZpbGUgYW5kIHRyeSB0byBkZXRlY3QgcHJvamVjdGlvbi9Db29yZCBzeXN0ZW1cbiAqIE9ubHkgZ2VvanNvbi9qc29uL2dtbCBjb3VsZCBiZSBkZXRlY3RlZCBhdCB0aGlzIG1vbWVudC5cbiAqIEBwYXJhbSBvcHRpb25zIEEgZmlsZSBhbmQgYW4gb3B0aW9uYWwgbnVtYmVyIG9mIGxpbmUgdG8gcmVhZCB0aGUgRVBTRyBDb2RlLiBVc2VkIG9ubHkgZm9yIEdNTCBmaWxlc1xuICogQHJldHVybnMgT2JzZXJ2YWJsZSBzdHJpbmcsIGVwc2dOb3REZWZpbmVkIGlmIHRoZSBFUFNHIGlzIG5vdCBkZXRlY3RlZCBvciBhIEVQU0cgc3RyaW5nIGV4OiBFUFNHOjM4NTdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEZpbGVFUFNHKG9wdGlvbnM6IHtcbiAgZmlsZTogRmlsZTtcbiAgbmJMaW5lcz86IG51bWJlcjtcbn0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlID0gb3B0aW9ucy5maWxlO1xuICBjb25zdCBuYkxpbmVzID0gb3B0aW9ucy5uYkxpbmVzID8/IDUwMDtcblxuICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICByZXR1cm4gZnJvbShcbiAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmdlb2pzb24nKSAmJlxuICAgICAgICAhZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5qc29uJykgJiZcbiAgICAgICAgIWZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuZ21sJylcbiAgICAgICkge1xuICAgICAgICByZXNvbHZlKCdlcHNnTm90RGVmaW5lZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmdlb2pzb24nKSB8fFxuICAgICAgICAgIGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuanNvbicpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGdlb2pzb24gPSBKU09OLnBhcnNlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICBpZiAoZ2VvanNvbi5jcnM/LnByb3BlcnRpZXM/Lm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVwc2cgPVxuICAgICAgICAgICAgICBnZW9qc29uLmNycy5wcm9wZXJ0aWVzLm5hbWUubWF0Y2goL0VQU0c6ezEsMn1cXGR7MCw2fS9nbSk7XG4gICAgICAgICAgICBpZiAoZXBzZyAhPT0gbnVsbCAmJiBlcHNnLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXNvbHZlKGVwc2dbMF0ucmVwbGFjZSgvOjovZywgJzonKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoJ2Vwc2dOb3REZWZpbmVkJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgnZXBzZ05vdERlZmluZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5nbWwnKSkge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgICAgICBjb25zdCBsaW5lcyA9ICh0ZXh0IGFzIHN0cmluZykuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDw9IG5iTGluZXM7IGxpbmUrKykge1xuICAgICAgICAgICAgY29uc3QgZXBzZyA9IGxpbmVzW2xpbmVdLm1hdGNoKC9FUFNHOnsxLDJ9XFxkezEsNn0vZ20pO1xuICAgICAgICAgICAgaWYgKGVwc2cgIT09IG51bGwgJiYgZXBzZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShlcHNnWzBdLnJlcGxhY2UoLzo6L2csICc6JykpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSgnZXBzZ05vdERlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICdVVEYtOCcpO1xuICAgIH0pXG4gICk7XG59XG4iXX0=
|
package/fesm2022/igo2-geo.mjs
CHANGED
|
@@ -15477,9 +15477,9 @@ function detectFileEPSG(options) {
|
|
|
15477
15477
|
const text = reader.result;
|
|
15478
15478
|
const lines = text.split('\n');
|
|
15479
15479
|
for (let line = 0; line <= nbLines; line++) {
|
|
15480
|
-
const epsg = lines[line].match(/EPSG
|
|
15480
|
+
const epsg = lines[line].match(/EPSG:{1,2}\d{1,6}/gm);
|
|
15481
15481
|
if (epsg !== null && epsg.length) {
|
|
15482
|
-
resolve(epsg[0]);
|
|
15482
|
+
resolve(epsg[0].replace(/::/g, ':'));
|
|
15483
15483
|
break;
|
|
15484
15484
|
}
|
|
15485
15485
|
else {
|
|
@@ -29941,9 +29941,9 @@ class ExportService {
|
|
|
29941
29941
|
config;
|
|
29942
29942
|
httpClient;
|
|
29943
29943
|
static ogreFormats = {
|
|
29944
|
-
GML: '
|
|
29945
|
-
GPX: '
|
|
29946
|
-
KML: '
|
|
29944
|
+
GML: 'GML',
|
|
29945
|
+
GPX: 'GPX',
|
|
29946
|
+
KML: 'KML',
|
|
29947
29947
|
Shapefile: 'ESRI Shapefile',
|
|
29948
29948
|
CSV: 'CSV',
|
|
29949
29949
|
/** @deprecated use CSV */
|
|
@@ -30030,7 +30030,7 @@ class ExportService {
|
|
|
30030
30030
|
}
|
|
30031
30031
|
return;
|
|
30032
30032
|
}
|
|
30033
|
-
this.exportWithOgre(olFeatures, options, title, projectionIn, projectionOut)
|
|
30033
|
+
this.exportWithOgre(olFeatures, options, title, projectionIn, projectionOut)?.subscribe({
|
|
30034
30034
|
complete: () => observer.complete(),
|
|
30035
30035
|
error: (error) => observer.error(error)
|
|
30036
30036
|
});
|
|
@@ -30120,43 +30120,63 @@ class ExportService {
|
|
|
30120
30120
|
}
|
|
30121
30121
|
}
|
|
30122
30122
|
exportWithOgre(olFeatures, { format, csvSeparator = null }, title, projectionIn, projectionOut) {
|
|
30123
|
-
|
|
30123
|
+
if (!format) {
|
|
30124
|
+
return;
|
|
30125
|
+
}
|
|
30126
|
+
const features = new olformat.GeoJSON().writeFeaturesObject(olFeatures, {
|
|
30124
30127
|
dataProjection: projectionOut,
|
|
30125
30128
|
featureProjection: projectionIn
|
|
30126
30129
|
});
|
|
30130
|
+
const sizeError = this.checkOgrePayloadSize(JSON.stringify(features));
|
|
30131
|
+
if (sizeError)
|
|
30132
|
+
return sizeError;
|
|
30127
30133
|
const url = `${this.ogreUrl}/convertJson`;
|
|
30128
|
-
|
|
30129
|
-
formData.append('json', featuresText);
|
|
30130
|
-
let outputName = format === 'Shapefile'
|
|
30131
|
-
? `${title}.zip`
|
|
30132
|
-
: `${title}.${format.toLowerCase()}`;
|
|
30134
|
+
let outputName = title;
|
|
30133
30135
|
let ogreFormat = ExportService.ogreFormats[format];
|
|
30136
|
+
let params = new HttpParams();
|
|
30134
30137
|
if (isCsvExport(format)) {
|
|
30135
|
-
outputName =
|
|
30138
|
+
outputName = title;
|
|
30136
30139
|
if (format === 'CSVcomma' || format === 'CSVsemicolon') {
|
|
30137
30140
|
ogreFormat = 'CSV';
|
|
30138
30141
|
}
|
|
30139
|
-
|
|
30140
|
-
if (format === 'CSVsemicolon') {
|
|
30141
|
-
formData.append('lco', `SEPARATOR=${csvSeparator}`);
|
|
30142
|
-
}
|
|
30142
|
+
params = params.append('lco', `SEPARATOR=${csvSeparator}`);
|
|
30143
30143
|
}
|
|
30144
|
-
|
|
30145
|
-
|
|
30144
|
+
params = params
|
|
30145
|
+
.set('name', this.formatFilename(outputName))
|
|
30146
|
+
.set('format', ogreFormat)
|
|
30147
|
+
.set('forceUTF8', 'true');
|
|
30146
30148
|
return this.httpClient
|
|
30147
|
-
.post(url,
|
|
30148
|
-
|
|
30149
|
+
.post(url, features, {
|
|
30150
|
+
params,
|
|
30151
|
+
responseType: 'blob',
|
|
30152
|
+
observe: 'response'
|
|
30149
30153
|
})
|
|
30150
|
-
.pipe(tap$1((
|
|
30151
|
-
|
|
30154
|
+
.pipe(tap$1((response) => {
|
|
30155
|
+
if (!response.body) {
|
|
30156
|
+
return;
|
|
30157
|
+
}
|
|
30158
|
+
const filename = this.getFileName(response.headers, outputName, format);
|
|
30159
|
+
downloadBlob(response.body, filename);
|
|
30152
30160
|
}));
|
|
30153
30161
|
}
|
|
30162
|
+
getFileName(headers, outputName, format) {
|
|
30163
|
+
const contentDisposition = headers.get('content-disposition');
|
|
30164
|
+
const filenameMatch = contentDisposition?.match(/filename="?([^";\n]+)"?/);
|
|
30165
|
+
if (filenameMatch?.[1]) {
|
|
30166
|
+
return filenameMatch[1];
|
|
30167
|
+
}
|
|
30168
|
+
let extension = format.toLowerCase();
|
|
30169
|
+
if (format === 'Shapefile') {
|
|
30170
|
+
extension = 'zip';
|
|
30171
|
+
}
|
|
30172
|
+
return `${outputName}.${extension}`;
|
|
30173
|
+
}
|
|
30154
30174
|
formatFilename(name) {
|
|
30155
30175
|
return name
|
|
30156
30176
|
.replaceAll(' ', '_')
|
|
30157
30177
|
.normalize('NFD')
|
|
30158
30178
|
.replace(/[\u0300-\u036f]/g, '')
|
|
30159
|
-
.replace(
|
|
30179
|
+
.replace(/[^a-zA-Z0-9_-]/g, '');
|
|
30160
30180
|
}
|
|
30161
30181
|
nothingToExport(olFeatures, format) {
|
|
30162
30182
|
if (olFeatures.length === 0) {
|
|
@@ -30289,6 +30309,22 @@ class ExportService {
|
|
|
30289
30309
|
});
|
|
30290
30310
|
return geomTypes;
|
|
30291
30311
|
}
|
|
30312
|
+
/**
|
|
30313
|
+
* Checks if the given payload exceeds the OGRE maximum allowed size (50MB).
|
|
30314
|
+
* @param payload The GeoJSON payload as a string.
|
|
30315
|
+
* @returns An Observable that throws an error if the payload is too large, or undefined if the size is acceptable.
|
|
30316
|
+
*/
|
|
30317
|
+
checkOgrePayloadSize(payload) {
|
|
30318
|
+
const OGRE_MAX_SIZE = 50 * 1024 * 1024; // 50MB
|
|
30319
|
+
const byteLength = new TextEncoder().encode(payload).length;
|
|
30320
|
+
if (byteLength > OGRE_MAX_SIZE) {
|
|
30321
|
+
const error = new Error();
|
|
30322
|
+
error.name = 'maxFieldsSize';
|
|
30323
|
+
error.message = `GeoJSON too large for OGRE: ${byteLength} bytes (max is ${OGRE_MAX_SIZE})`;
|
|
30324
|
+
return throwError(() => error);
|
|
30325
|
+
}
|
|
30326
|
+
return undefined;
|
|
30327
|
+
}
|
|
30292
30328
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportService, deps: [{ token: i1$2.ConfigService }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
30293
30329
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportService, providedIn: 'root' });
|
|
30294
30330
|
}
|
|
@@ -31160,10 +31196,10 @@ class ImportExportComponent {
|
|
|
31160
31196
|
}
|
|
31161
31197
|
if (!isCSV || !data.combineLayers) {
|
|
31162
31198
|
geomTypes.forEach((geomType) => {
|
|
31163
|
-
|
|
31164
|
-
fileName
|
|
31165
|
-
|
|
31166
|
-
this.handleExport(geomType.features, data,
|
|
31199
|
+
const formattedFilename = geomType.type
|
|
31200
|
+
? `${fileName}_${geomType.type}`
|
|
31201
|
+
: fileName;
|
|
31202
|
+
this.handleExport(geomType.features, data, formattedFilename);
|
|
31167
31203
|
});
|
|
31168
31204
|
}
|
|
31169
31205
|
this.loading$.next(false);
|