@jax-data-science/sci-image-visualizer 0.7.0 → 0.8.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.
- package/esm2022/lib/contracts/display-types.mjs +1 -1
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +1 -1
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +73 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +418 -29
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +35 -1
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +8 -1
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +12 -1
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +2 -1
- package/esm2022/lib/routing-visualizer.service.mjs +5 -1
- package/esm2022/lib/spatial/spatial-tiles.mjs +144 -1
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +198 -9
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +878 -30
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/lib/contracts/display-types.d.ts +4 -2
- package/lib/contracts/plot-type-contribution.contract.d.ts +9 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +12 -1
- package/lib/contracts/spatial-dataset.contract.d.ts +30 -0
- package/lib/contracts/visualizer.contract.d.ts +7 -1
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +20 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +76 -1
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +7 -0
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +3 -1
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +2 -1
- package/lib/spatial/spatial-tiles.d.ts +38 -1
- package/lib/spatial-controls/spatial-controls.component.d.ts +54 -0
- package/package.json +1 -1
|
@@ -231,6 +231,12 @@ export class SpatialDataHttpService {
|
|
|
231
231
|
+ `?genes=${genes}&quality=${query.quality ?? 'high'}${box}`;
|
|
232
232
|
return this.cachedTile(path, () => this.getBinary(path).then(decodeTranscriptTile));
|
|
233
233
|
}
|
|
234
|
+
getTranscriptGeneBins(level, tx, ty, genes) {
|
|
235
|
+
const manifest = this.requireManifest();
|
|
236
|
+
const path = `spatial/${encodeURIComponent(manifest.id)}/gene-bins/${level}/${tx}/${ty}`
|
|
237
|
+
+ `?genes=${genes.map(encodeURIComponent).join(',')}`;
|
|
238
|
+
return this.cachedTile(path, () => this.getBinary(path).then(decodeTranscriptTile));
|
|
239
|
+
}
|
|
234
240
|
getTranscriptBins(level, tx, ty) {
|
|
235
241
|
const manifest = this.requireManifest();
|
|
236
242
|
if (!manifest.transcriptBins) {
|
|
@@ -293,6 +299,11 @@ export class SpatialDataHttpService {
|
|
|
293
299
|
}
|
|
294
300
|
return { column, matched: body.matched };
|
|
295
301
|
}
|
|
302
|
+
getMarkerGenes(column, perGroup = 5) {
|
|
303
|
+
const manifest = this.requireManifest();
|
|
304
|
+
// No per-request timeout: the first computation is a pass over the whole matrix.
|
|
305
|
+
return firstValueFrom(this.http.get(`${this.baseUrl}spatial/${encodeURIComponent(manifest.id)}/markers/${encodeURIComponent(column)}?n=${perGroup}`));
|
|
306
|
+
}
|
|
296
307
|
getTranscriptCounts(genes) {
|
|
297
308
|
const manifest = this.requireManifest();
|
|
298
309
|
return this.getJson(`spatial/${encodeURIComponent(manifest.id)}/transcript-counts?genes=${genes.map(encodeURIComponent).join(',')}`);
|
|
@@ -419,4 +430,4 @@ export class SpatialDataHttpService {
|
|
|
419
430
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: SpatialDataHttpService, decorators: [{
|
|
420
431
|
type: Injectable
|
|
421
432
|
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
422
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1kYXRhLWh0dHAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL3NwYXRpYWwtZGF0YS1odHRwL3NwYXRpYWwtZGF0YS1odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6QyxPQUFPLEVBV0wsY0FBYyxHQUNmLE1BQU0sMENBQTBDLENBQUM7QUFDbEQsT0FBTyxFQUdMLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksRUFBVTtRQUNwQixLQUFLLENBQUMsMkJBQTJCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQVNELE1BQU0sT0FBTyxzQkFBc0I7YUFvQlQsZ0JBQVcsR0FBRyxFQUFFLEFBQUwsQ0FBTTthQVVqQixxQkFBZ0IsR0FBRyxHQUFHLEFBQU4sQ0FBTztJQUsvQyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBbENw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QUFTLENBQUMsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQzs4R0EvYVUsc0JBQXNCO2tIQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRpbWVvdXQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNwYXRpYWxEYXRhUG9ydCwgVHJhbnNjcmlwdFRpbGVRdWVyeSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQge1xuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbERlbnNpdHlSYXN0ZXIsXG4gIFNwYXRpYWxFbWJlZGRpbmcsXG4gIFNwYXRpYWxQb2x5Z29uVGlsZSxcbiAgU3BhdGlhbFBvbHlnb25zLFxuICBDYXRlZ29yaWNhbENvbHVtbk1ldGEsXG4gIFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzLFxuICBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnksXG4gIFNwYXRpYWxUcmFuc2NyaXB0VGlsZSxcbiAgZmluZENvbHVtbk1ldGEsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgU3BhdGlhbERhdGFzZXRTdW1tYXJ5LFxuICBTcGF0aWFsTWFuaWZlc3QsXG4gIGFzc2VydE1hbmlmZXN0VmVyc2lvbixcbiAgZGF0YXNldEZyb21NYW5pZmVzdCxcbiAgZGVjb2RlQ29sdW1uLFxuICBkZWNvZGVDb29yZHMsXG4gIGRlY29kZURlbnNpdHksXG4gIGRlY29kZUVtYmVkZGluZyxcbiAgZGVjb2RlRmVhdHVyZVZlY3RvcixcbiAgZGVjb2RlUG9seWdvblRpbGUsXG4gIGRlY29kZVBvbHlnb25zLFxuICBkZWNvZGVSYWRpdXMsXG4gIGRlY29kZVRyYW5zY3JpcHRUaWxlLFxufSBmcm9tICcuL3NwYXRpYWwtd2lyZSc7XG5cbi8qKlxuICogUmVmZXJlbmNlIHtAbGluayBTcGF0aWFsRGF0YVBvcnR9IGFkYXB0ZXIgZm9yIHRoZSB3aXJlIGZvcm1hdCB0aGUgYnVuZGxlZFxuICogZXhhbXBsZSBzZXJ2ZXIgc3BlYWtzIChzZWUgYHNwYXRpYWwtd2lyZS50c2AgYW5kXG4gKiBgZXhhbXBsZXMvdGlsZS1zZXJ2ZXIvbGliL3NwYXRpYWwubWpzYCkuXG4gKlxuICogT1BUSU9OQUwgQU5EIFVOQk9VTkQgQlkgREVGQVVMVCDigJQgdGhpcyBzZXJ2aWNlIGlzIGBASW5qZWN0YWJsZSgpYCB3aXRob3V0XG4gKiBgcHJvdmlkZWRJbmAsIHNvIG5vdGhpbmcgZ2V0cyBpdCB1bmxlc3MgYSBob3N0IGV4cGxpY2l0bHkgcHJvdmlkZXMgaXQ6XG4gKlxuICogYGBgdHNcbiAqIHByb3ZpZGVyczogW1xuICogICBTcGF0aWFsRGF0YUh0dHBTZXJ2aWNlLFxuICogICB7IHByb3ZpZGU6IFNQQVRJQUxfREFUQV9QT1JULCB1c2VFeGlzdGluZzogU3BhdGlhbERhdGFIdHRwU2VydmljZSB9LFxuICogXVxuICogYGBgXG4gKlxuICogVGhhdCBtaXJyb3JzIGBDZWxscG9zZVNlZ21lbnRlclNlcnZpY2VgOiBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIHRoZVxuICogbGlicmFyeSBzaGlwcyBmb3IgY29udmVuaWVuY2UsIG5vdCBhIGRlZmF1bHQgdGhlIHBvcnQgaW52ZXJzaW9uIGlzIHF1aWV0bHlcbiAqIGdpdmluZyB1cCBvbi4gQSBob3N0IHdpdGggaXRzIG93biBiYWNrZW5kIGltcGxlbWVudHMgYFNwYXRpYWxEYXRhUG9ydGBcbiAqIGRpcmVjdGx5IGFuZCBuZXZlciB0b3VjaGVzIHRoaXMgY2xhc3MuXG4gKlxuICogUmVxdWVzdHMgZ28gdGhyb3VnaCBBbmd1bGFyJ3MgYEh0dHBDbGllbnRgIChub3QgYGZldGNoYCkgc28gdGhlIGhvc3Qnc1xuICogaW50ZXJjZXB0b3JzIOKAlCBhdXRoIGhlYWRlcnMgYWJvdmUgYWxsIOKAlCBhcHBseSwgbWF0Y2hpbmcgYHRpbGUtY2xpZW50LnRzYC5cbiAqL1xuLyoqXG4gKiBBIGRhdGFzZXQgc2VsZWN0aW9uIHRoYXQgYSBuZXdlciBzZWxlY3Rpb24gKG9yIGEgYGNsZWFyYCkgb3ZlcnRvb2suXG4gKlxuICogVGhyb3duIHJhdGhlciB0aGFuIHJlc29sdmVkIHNvIGEgY2FsbGVyIGNhbm5vdCBtaXN0YWtlIGl0IGZvciBcInRoaXMgZGF0YXNldCBpc1xuICogbm93IGxvYWRlZFwiOiBub3RoaW5nIHdhcyBwdWJsaXNoZWQsIG9uIHB1cnBvc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXBlcnNlZGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgW3NwYXRpYWxdIHNlbGVjdGlvbiBvZiBcIiR7aWR9XCIgd2FzIHN1cGVyc2VkZWQgYnkgYSBuZXdlciBvbmVgKTtcbiAgICB0aGlzLm5hbWUgPSAnU3VwZXJzZWRlZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQgdGhlIExSVSBjYW4gaG9sZC4gT25lIGFsaWFzIHJhdGhlciB0aGFuIGEgdW5pb24gcmVwZWF0ZWQgYXQgZWFjaCB1c2UsIHNvIGFkZGluZyBhIHBheWxvYWRcbiAqIGtpbmQgaXMgYSBzaW5nbGUgZWRpdCBpbnN0ZWFkIG9mIGZvdXIgdGhhdCBjYW4gZHJpZnQgYXBhcnQuXG4gKi9cbnR5cGUgQ2FjaGVkUGF5bG9hZCA9IFNwYXRpYWxDb2x1bW4gfCBGbG9hdDMyQXJyYXkgfCBTcGF0aWFsRW1iZWRkaW5nIHwgU3BhdGlhbERlbnNpdHlSYXN0ZXI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTcGF0aWFsRGF0YUh0dHBTZXJ2aWNlIGltcGxlbWVudHMgU3BhdGlhbERhdGFQb3J0IHtcbiAgLyoqIFNlcnZlciByb290LCBub3JtYWxpc2VkIHRvIGVuZCB3aXRoIGV4YWN0bHkgb25lIGAvYC4gKi9cbiAgcHJpdmF0ZSBiYXNlVXJsID0gJyc7XG4gIC8qKiBQZXItcmVxdWVzdCBjZWlsaW5nLiBWZWN0b3JzIGFyZSBzbWFsbDsgYSBodW5nIHJlcXVlc3Qgc2hvdWxkIG5vdCB3ZWRnZVxuICAgKiAgdGhlIHBpY2tlci4gKi9cbiAgcHJpdmF0ZSB0aW1lb3V0TXMgPSAzMF8wMDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhc2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BhdGlhbERhdGFzZXQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBtYW5pZmVzdDogU3BhdGlhbE1hbmlmZXN0IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBCdW1wZWQgYnkgZXZlcnkgYHNlbGVjdERhdGFzZXRgIGFuZCBldmVyeSBgY2xlYXJgLCBzbyBhIHNlbGVjdGlvbiB0aGF0XG4gICAqICBmaW5pc2hlcyBhZnRlciBhIG5ld2VyIGludGVudCBjYW4gdGVsbCBhbmQgZHJvcCB3aGF0IGl0IGZldGNoZWQuICovXG4gIHByaXZhdGUgc2VsZWN0VG9rZW4gPSAwO1xuXG4gIC8qKlxuICAgKiBMb2FkZWQgdmVjdG9ycywga2V5ZWQgYGNvbHVtbjo8bmFtZT5gIC8gYGZlYXR1cmU6PG5hbWU+YC4gQm91bmRlZCBMUlU6XG4gICAqIGNvbG91cmluZyBieSBjbHVzdGVyIOKGkiBieSBhIGdlbmUg4oaSIGJhY2sgYnkgY2x1c3RlciBtdXN0IG5vdCByZWZldGNoLCBidXQgYW5cbiAgICogYWZ0ZXJub29uIG9mIGJyb3dzaW5nIGdlbmVzIG11c3Qgbm90IGdyb3cgd2l0aG91dCBsaW1pdCBlaXRoZXIgKG9uZSB2ZWN0b3JcbiAgICogaXMgYDTCt05gIGJ5dGVzIOKAlCAyIE1CIGF0IDUwMGsgY2VsbHMpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRQYXlsb2FkPigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDQUNIRV9MSU1JVCA9IDMyO1xuXG4gIC8qKiBJbi1mbGlnaHQgcmVxdWVzdHMsIHNvIGRvdWJsZS1jbGlja2luZyBhIGdlbmUgaXNzdWVzIG9uZSBmZXRjaC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPENhY2hlZFBheWxvYWQ+PigpO1xuXG4gIC8qKlxuICAgKiBUaWxlcyBnZXQgdGhlaXIgb3duLCBsYXJnZXIgY2FjaGU6IHBhbm5pbmcgcmV2aXNpdHMgdGhlbSBjb25zdGFudGx5LCBhbmQgb25lIHNjcmVlblxuICAgKiBvZiBhIHpvb21lZC1vdXQgc2VjdGlvbiBpcyBkb3plbnMgb2YgdGhlbSDigJQgZmFyIHBhc3QgdGhlIHZlY3RvciBjYWNoZSdzIGxpbWl0LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0aWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxTcGF0aWFsUG9seWdvblRpbGUgfCBTcGF0aWFsVHJhbnNjcmlwdFRpbGU+PigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUSUxFX0NBQ0hFX0xJTUlUID0gMzg0O1xuXG4gIHByaXZhdGUgdm9sdW1lUHJvbWlzZTogUHJvbWlzZTxVaW50OEFycmF5PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBvbHlnb25zUHJvbWlzZTogUHJvbWlzZTxTcGF0aWFsUG9seWdvbnM+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gIC8vIOKUgOKUgCBjb25maWd1cmF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBQb2ludCB0aGUgYWRhcHRlciBhdCBhIHNlcnZlci4gQ2xlYXJzIGFueSBsb2FkZWQgZGF0YXNldC4gKi9cbiAgY29uZmlndXJlKG9wdGlvbnM6IHsgYmFzZVVybDogc3RyaW5nOyB0aW1lb3V0TXM/OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnN0IHJhdyA9IG9wdGlvbnMuYmFzZVVybCA/PyAnJztcbiAgICB0aGlzLmJhc2VVcmwgPSByYXcuZW5kc1dpdGgoJy8nKSA/IHJhdyA6IGAke3Jhd30vYDtcbiAgICBpZiAob3B0aW9ucy50aW1lb3V0TXMgIT09IHVuZGVmaW5lZCkgdGhpcy50aW1lb3V0TXMgPSBvcHRpb25zLnRpbWVvdXRNcztcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKiogRGF0YXNldHMgdGhpcyBzZXJ2ZXIgb2ZmZXJzLCBmb3IgYSBob3N0LXNpZGUgcGlja2VyLiAqL1xuICBsaXN0RGF0YXNldHMoKTogUHJvbWlzZTxTcGF0aWFsRGF0YXNldFN1bW1hcnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEpzb248eyBkYXRhc2V0czogU3BhdGlhbERhdGFzZXRTdW1tYXJ5W10gfT4oJ3NwYXRpYWwvZGF0YXNldHMnKVxuICAgICAgLnRoZW4oKHIpID0+IHIuZGF0YXNldHMgPz8gW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uZSBkYXRhc2V0J3MgbWFuaWZlc3QsIFdJVEhPVVQgc2VsZWN0aW5nIGl0LiBMZXRzIGEgaG9zdCBpbnNwZWN0IHdoYXQgYVxuICAgKiBzZXJ2ZXIgb2ZmZXJzIOKAlCBjb2x1bW4gYW5kIGZlYXR1cmUgbWV0YWRhdGEsIGFuZCB3aGljaCBpbWFnZSBhIGRhdGFzZXRcbiAgICogcmVnaXN0ZXJzIG9udG8g4oCUIHdoaWxlIGJ1aWxkaW5nIGEgcGlja2VyLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gbG9hZCBlYWNoXG4gICAqIGRhdGFzZXQgdG8gZmluZCBvdXQuXG4gICAqL1xuICByZWFkTWFuaWZlc3QoaWQ6IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbE1hbmlmZXN0PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SnNvbjxTcGF0aWFsTWFuaWZlc3Q+KGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX0vbWFuaWZlc3RgKVxuICAgICAgLnRoZW4oKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIGFzc2VydE1hbmlmZXN0VmVyc2lvbihtYW5pZmVzdCk7XG4gICAgICAgIHJldHVybiBtYW5pZmVzdDtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBkYXRhc2V0IGFuZCBwdWJsaXNoIGl0IG9uIHtAbGluayBnZXREYXRhc2V0JH0uIEZldGNoZXMgdGhlIG1hbmlmZXN0LFxuICAgKiB0aGVuIHRoZSB2ZWN0b3JzIHRoYXQgYXJlIGFsd2F5cyBuZWVkZWQgKGNvb3JkaW5hdGVzLCBhbmQgaWRzL3JhZGl1cyB3aGVuXG4gICAqIHRoZSBtYW5pZmVzdCBzYXlzIHRoZXkgZXhpc3QpIOKAlCBub3RoaW5nIGVsc2UuXG4gICAqL1xuICBhc3luYyBzZWxlY3REYXRhc2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFNwYXRpYWxEYXRhc2V0PiB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIC8vIFNlbGVjdGlvbnMgYXJlIFNFUVVFTkNFRDogdGhpcyBpcyBmb3VyIGF3YWl0cyBkZWVwLCBzbyBhIHNsb3dlciBlYXJsaWVyXG4gICAgLy8gY2FsbCB3b3VsZCBvdGhlcndpc2UgYXNzaWduIGB0aGlzLm1hbmlmZXN0YCBvciBwdWJsaXNoIGl0cyBkYXRhc2V0IGFmdGVyIGFcbiAgICAvLyBsYXRlciBvbmUg4oCUIGxlYXZpbmcgdGhlIG1hbmlmZXN0IGFuZCB0aGUgb2JzZXJ2YXRpb25zIGZyb20gdHdvIGRpZmZlcmVudFxuICAgIC8vIGRhdGFzZXRzLCB3aGljaCBpcyB3b3JzZSB0aGFuIGVpdGhlciBiZWluZyBsYXRlLlxuICAgIGNvbnN0IG1pbmUgPSArK3RoaXMuc2VsZWN0VG9rZW47XG4gICAgY29uc3Qgc3VwZXJzZWRlZCA9ICgpID0+IG1pbmUgIT09IHRoaXMuc2VsZWN0VG9rZW47XG4gICAgY29uc3QgcGF0aCA9IGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX1gO1xuXG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEpzb248U3BhdGlhbE1hbmlmZXN0PihgJHtwYXRofS9tYW5pZmVzdGApO1xuICAgIGFzc2VydE1hbmlmZXN0VmVyc2lvbihtYW5pZmVzdCk7XG4gICAgaWYgKHN1cGVyc2VkZWQoKSkgdGhyb3cgbmV3IFN1cGVyc2VkZWRFcnJvcihpZCk7XG4gICAgdGhpcy5tYW5pZmVzdCA9IG1hbmlmZXN0O1xuXG4gICAgY29uc3QgY29vcmRzQnVmID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYCR7cGF0aH0vY29vcmRzYCk7XG4gICAgaWYgKHN1cGVyc2VkZWQoKSkgdGhyb3cgbmV3IFN1cGVyc2VkZWRFcnJvcihpZCk7XG4gICAgY29uc3QgY29vcmRzID0gZGVjb2RlQ29vcmRzKGNvb3Jkc0J1ZiwgbWFuaWZlc3QuY291bnQsICEhbWFuaWZlc3QuaGFzWik7XG5cbiAgICBjb25zdCBpZHMgPSBtYW5pZmVzdC5oYXNJZHNcbiAgICAgID8gKGF3YWl0IHRoaXMuZ2V0SnNvbjx7IGlkczogc3RyaW5nW10gfT4oYCR7cGF0aH0vaWRzYCkpLmlkc1xuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmFkaXVzID0gbWFuaWZlc3QucmFkaXVzPy5tb2RlID09PSAncGVyLW9ic2VydmF0aW9uJ1xuICAgICAgPyBkZWNvZGVSYWRpdXMoYXdhaXQgdGhpcy5nZXRCaW5hcnkoYCR7cGF0aH0vcmFkaXVzYCksIG1hbmlmZXN0LmNvdW50KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN1cGVyc2VkZWQoKSkgdGhyb3cgbmV3IFN1cGVyc2VkZWRFcnJvcihpZCk7XG5cbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldEZyb21NYW5pZmVzdChtYW5pZmVzdCwgY29vcmRzLCB7IGlkcywgcmFkaXVzIH0pO1xuICAgIHRoaXMuZGF0YXNldCQubmV4dChkYXRhc2V0KTtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBsb2FkZWQgZGF0YXNldCBhbmQgZXZlcnkgY2FjaGVkIHZlY3Rvci4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgLy8gQSBjbGVhciBpcyBpdHNlbGYgdGhlIG5ld2VzdCBpbnRlbnQsIHNvIGl0IHN1cGVyc2VkZXMgYW55IHNlbGVjdGlvbiBzdGlsbFxuICAgIC8vIGluIGZsaWdodCByYXRoZXIgdGhhbiBsZXR0aW5nIG9uZSBsYW5kIGFmdGVyd2FyZHMuXG4gICAgdGhpcy5zZWxlY3RUb2tlbisrO1xuICAgIHRoaXMubWFuaWZlc3QgPSBudWxsO1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLmluRmxpZ2h0LmNsZWFyKCk7XG4gICAgdGhpcy50aWxlQ2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnN1bW1hcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMucG9seWdvbnNQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLnZvbHVtZVByb21pc2UgPSBudWxsO1xuICAgIGlmICh0aGlzLmRhdGFzZXQkLnZhbHVlICE9PSBudWxsKSB0aGlzLmRhdGFzZXQkLm5leHQobnVsbCk7XG4gIH1cblxuICAvLyDilIDilIAgU3BhdGlhbERhdGFQb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldERhdGFzZXQkKCk6IE9ic2VydmFibGU8U3BhdGlhbERhdGFzZXQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXNldCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRDb2x1bW4obmFtZTogc3RyaW5nKTogUHJvbWlzZTxTcGF0aWFsQ29sdW1uPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmRhdGFzZXQkLnZhbHVlITtcbiAgICBjb25zdCBtZXRhID0gZmluZENvbHVtbk1ldGEoZGF0YXNldCwgbmFtZSk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICAvLyBSZWplY3QgcmF0aGVyIHRoYW4gcmVzb2x2ZSBlbXB0eTogYSB0eXBvIG11c3Qgc3VyZmFjZSBhcyBhbiBlcnJvciwgbm90XG4gICAgICAvLyBhcyBhIHBsb3QgdGhhdCBzaWxlbnRseSByZW5kZXJzIGV2ZXJ5IHBvaW50IGFzIFwibm8gZGF0YVwiLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcbiAgICAgICAgYFtzcGF0aWFsXSB1bmtub3duIGNvbHVtbiBcIiR7bmFtZX1cIi4gQXZhaWxhYmxlOiAke2RhdGFzZXQuY29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZldGNoQ2FjaGVkKFxuICAgICAgYGNvbHVtbjoke25hbWV9YCxcbiAgICAgICgpID0+IHRoaXMuZ2V0QmluYXJ5KGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vY29sdW1uLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfWApXG4gICAgICAgIC50aGVuKChidWYpID0+IGRlY29kZUNvbHVtbihidWYsIG1ldGEsIG1hbmlmZXN0LmNvdW50KSksXG4gICAgKSBhcyBQcm9taXNlPFNwYXRpYWxDb2x1bW4+O1xuICB9XG5cbiAgZ2V0RW1iZWRkaW5nKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbEVtYmVkZGluZz4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBjb25zdCBtZXRhID0gbWFuaWZlc3QuZW1iZWRkaW5ncz8uZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtzcGF0aWFsXSB1bmtub3duIGVtYmVkZGluZyBcIiR7bmFtZX1cImApKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWQoXG4gICAgICBgZW1iZWRkaW5nOiR7bmFtZX1gLFxuICAgICAgKCkgPT4gdGhpcy5nZXRCaW5hcnkoXG4gICAgICAgIGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vZW1iZWRkaW5nLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfWAsXG4gICAgICApLnRoZW4oKGJ1ZikgPT4gZGVjb2RlRW1iZWRkaW5nKGJ1ZiwgbWV0YSwgbWFuaWZlc3QuY291bnQpKSxcbiAgICApIGFzIFByb21pc2U8U3BhdGlhbEVtYmVkZGluZz47XG4gIH1cblxuICBnZXRGZWF0dXJlVmVjdG9yKG5hbWU6IHN0cmluZyk6IFByb21pc2U8RmxvYXQzMkFycmF5PiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGNvbnN0IG5hbWVzID0gbWFuaWZlc3QuZmVhdHVyZXM/Lm5hbWVzO1xuICAgIGlmIChuYW1lcyAmJiAhbmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtzcGF0aWFsXSB1bmtub3duIGZlYXR1cmUgXCIke25hbWV9XCJgKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZldGNoQ2FjaGVkKFxuICAgICAgYGZlYXR1cmU6JHtuYW1lfWAsXG4gICAgICAoKSA9PiB0aGlzLmdldEJpbmFyeShgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2ZlYXR1cmUvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9YClcbiAgICAgICAgLnRoZW4oKGJ1ZikgPT4gZGVjb2RlRmVhdHVyZVZlY3RvcihidWYsIG1hbmlmZXN0LmNvdW50KSksXG4gICAgKSBhcyBQcm9taXNlPEZsb2F0MzJBcnJheT47XG4gIH1cblxuICBhc3luYyBzZWFyY2hGZWF0dXJlcyhxdWVyeTogc3RyaW5nLCBsaW1pdCA9IDUwKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICAvLyBBIGRhdGFzZXQgdGhhdCBpbmxpbmVkIGl0cyBuYW1lcyAodGFyZ2V0ZWQgcGFuZWwpIGlzIGZpbHRlcmVkIGxvY2FsbHkg4oCUXG4gICAgLy8gbm8gcm91bmQtdHJpcCBmb3IgYSBrZXlzdHJva2UuXG4gICAgY29uc3QgbmFtZXMgPSBtYW5pZmVzdC5mZWF0dXJlcz8ubmFtZXM7XG4gICAgaWYgKG5hbWVzKSB7XG4gICAgICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBuYW1lcy5maWx0ZXIoKG4pID0+IG4udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSkuc2xpY2UoMCwgbGltaXQpO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2ZlYXR1cmVzYFxuICAgICAgKyBgP3E9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfSZsaW1pdD0ke2xpbWl0fWA7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldEpzb248eyBuYW1lczogc3RyaW5nW10gfT4odXJsKSkubmFtZXMgPz8gW107XG4gIH1cblxuICBnZXRQb2x5Z29ucygpOiBQcm9taXNlPFNwYXRpYWxQb2x5Z29ucz4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBpZiAoIW1hbmlmZXN0LnBvbHlnb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdbc3BhdGlhbF0gdGhpcyBkYXRhc2V0IGhhcyBubyBwb2x5Z29uIGdlb21ldHJ5JykpO1xuICAgIH1cbiAgICAvLyBHZW9tZXRyeSBpcyBvbmUgbGFyZ2UgYmxvYiByYXRoZXIgdGhhbiBhIHBlci1uYW1lIHZlY3Rvciwgc28gaXQgZ2V0cyBpdHNcbiAgICAvLyBvd24gc2luZ2xlLWZsaWdodCBzbG90IGluc3RlYWQgb2YgYSBjYWNoZSBlbnRyeS5cbiAgICB0aGlzLnBvbHlnb25zUHJvbWlzZSA/Pz0gdGhpc1xuICAgICAgLmdldEJpbmFyeShgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L3BvbHlnb25zYClcbiAgICAgIC50aGVuKGRlY29kZVBvbHlnb25zKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHsgdGhpcy5wb2x5Z29uc1Byb21pc2UgPSBudWxsOyB0aHJvdyBlcnI7IH0pO1xuICAgIHJldHVybiB0aGlzLnBvbHlnb25zUHJvbWlzZTtcbiAgfVxuXG4gIGdldFBvbHlnb25UaWxlKHNldDogc3RyaW5nLCBsZXZlbDogbnVtYmVyLCBneDogbnVtYmVyLCBneTogbnVtYmVyKTogUHJvbWlzZTxTcGF0aWFsUG9seWdvblRpbGU+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgaWYgKCFtYW5pZmVzdC5wb2x5Z29uVGlsZXMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1tzcGF0aWFsXSB0aGlzIGRhdGFzZXQgaGFzIG5vIHRpbGVkIHBvbHlnb25zJykpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS9wb2x5Z29uLXRpbGUvYFxuICAgICAgKyBgJHtlbmNvZGVVUklDb21wb25lbnQoc2V0KX0vJHtsZXZlbH0vJHtneH0vJHtneX1gO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZFRpbGUocGF0aCwgKCkgPT4gdGhpcy5nZXRCaW5hcnkocGF0aCkudGhlbihkZWNvZGVQb2x5Z29uVGlsZSkpIGFzXG4gICAgICBQcm9taXNlPFNwYXRpYWxQb2x5Z29uVGlsZT47XG4gIH1cblxuICBnZXRUcmFuc2NyaXB0VGlsZShcbiAgICBsZXZlbDogbnVtYmVyLCBneDogbnVtYmVyLCBneTogbnVtYmVyLCBxdWVyeTogVHJhbnNjcmlwdFRpbGVRdWVyeSxcbiAgKTogUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdFRpbGU+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgaWYgKCFtYW5pZmVzdC50cmFuc2NyaXB0VGlsZXMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1tzcGF0aWFsXSB0aGlzIGRhdGFzZXQgaGFzIG5vIHRpbGVkIHRyYW5zY3JpcHRzJykpO1xuICAgIH1cbiAgICBjb25zdCBnZW5lcyA9IHF1ZXJ5LmdlbmVzLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oJywnKTtcbiAgICBjb25zdCBib3ggPSBxdWVyeS5ib3ggPyBgJmJveD0ke3F1ZXJ5LmJveC5qb2luKCcsJyl9YCA6ICcnO1xuICAgIGNvbnN0IHBhdGggPSBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L3RyYW5zY3JpcHQtdGlsZS8ke2xldmVsfS8ke2d4fS8ke2d5fWBcbiAgICAgICsgYD9nZW5lcz0ke2dlbmVzfSZxdWFsaXR5PSR7cXVlcnkucXVhbGl0eSA/PyAnaGlnaCd9JHtib3h9YDtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUaWxlKHBhdGgsICgpID0+IHRoaXMuZ2V0QmluYXJ5KHBhdGgpLnRoZW4oZGVjb2RlVHJhbnNjcmlwdFRpbGUpKSBhc1xuICAgICAgUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdFRpbGU+O1xuICB9XG5cbiAgZ2V0VHJhbnNjcmlwdEJpbnMobGV2ZWw6IG51bWJlciwgdHg6IG51bWJlciwgdHk6IG51bWJlcik6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRUaWxlPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGlmICghbWFuaWZlc3QudHJhbnNjcmlwdEJpbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1tzcGF0aWFsXSB0aGlzIGRhdGFzZXQgaGFzIG5vIHRyYW5zY3JpcHQgcHlyYW1pZCcpKTtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vdHJhbnNjcmlwdC1iaW5zLyR7bGV2ZWx9LyR7dHh9LyR7dHl9YDtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUaWxlKHBhdGgsICgpID0+IHRoaXMuZ2V0QmluYXJ5KHBhdGgpLnRoZW4oZGVjb2RlVHJhbnNjcmlwdFRpbGUpKSBhc1xuICAgICAgUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdFRpbGU+O1xuICB9XG5cbiAgLyoqIFNtYWxsIEpTT04gYW5zd2Vycywga2V5ZWQgYnkgVVJMIOKAlCBob3ZlcmluZyBiYWNrIGFuZCBmb3J0aCBtdXN0IG5vdCByZWZldGNoLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN1bW1hcnlDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFNwYXRpYWxUcmFuc2NyaXB0U3VtbWFyeT4+KCk7XG5cbiAgZ2V0VHJhbnNjcmlwdFN1bW1hcnkocXVlcnk6IHtcbiAgICBib3g/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTsgZ2VuZXM/OiBzdHJpbmdbXTsgY2VsbHM/OiBudW1iZXJbXTtcbiAgfSk6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRTdW1tYXJ5PiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGNvbnN0IHBhcmFtczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocXVlcnkuYm94KSBwYXJhbXMucHVzaChgYm94PSR7cXVlcnkuYm94Lm1hcCgodikgPT4gK3YudG9GaXhlZCgzKSkuam9pbignLCcpfWApO1xuICAgIGlmIChxdWVyeS5nZW5lcz8ubGVuZ3RoKSBwYXJhbXMucHVzaChgZ2VuZXM9JHtxdWVyeS5nZW5lcy5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJyl9YCk7XG4gICAgaWYgKHF1ZXJ5LmNlbGxzPy5sZW5ndGgpIHBhcmFtcy5wdXNoKGBjZWxscz0ke3F1ZXJ5LmNlbGxzLmpvaW4oJywnKX1gKTtcbiAgICBjb25zdCB1cmwgPSBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L3RyYW5zY3JpcHQtc3VtbWFyeT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICBsZXQgaGl0ID0gdGhpcy5zdW1tYXJ5Q2FjaGUuZ2V0KHVybCk7XG4gICAgaWYgKCFoaXQpIHtcbiAgICAgIGhpdCA9IHRoaXMuZ2V0SnNvbjxTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnk+KHVybCk7XG4gICAgICBoaXQuY2F0Y2goKCkgPT4gdGhpcy5zdW1tYXJ5Q2FjaGUuZGVsZXRlKHVybCkpO1xuICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGUuc2V0KHVybCwgaGl0KTtcbiAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZS5zaXplID4gMjU2KSB0aGlzLnN1bW1hcnlDYWNoZS5kZWxldGUodGhpcy5zdW1tYXJ5Q2FjaGUua2V5cygpLm5leHQoKS52YWx1ZSEpO1xuICAgIH1cbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgZ2V0RGVuc2l0eShnZW5lczogc3RyaW5nW10sIGJpblNpemU/OiBudW1iZXIpOiBQcm9taXNlPFNwYXRpYWxEZW5zaXR5UmFzdGVyPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGlmICghbWFuaWZlc3QuZGVuc2l0eSkgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignW3NwYXRpYWxdIHRoaXMgZGF0YXNldCBoYXMgbm8gZGVuc2l0eSByYXN0ZXInKSk7XG4gICAgY29uc3QgbGlzdCA9IFsuLi5nZW5lc107XG4gICAgY29uc3QgYmluID0gYmluU2l6ZSA/IGAmYmluPSR7YmluU2l6ZX1gIDogJyc7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWQoXG4gICAgICBgZGVuc2l0eToke2xpc3Quam9pbignLCcpfToke2JpblNpemUgPz8gJyd9YCxcbiAgICAgICgpID0+IHRoaXMuZ2V0QmluYXJ5KFxuICAgICAgICBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2RlbnNpdHk/Z2VuZXM9JHtsaXN0Lm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oJywnKX0ke2Jpbn1gLFxuICAgICAgKS50aGVuKChidWYpID0+IGRlY29kZURlbnNpdHkoYnVmLCBsaXN0KSksXG4gICAgKSBhcyBQcm9taXNlPFNwYXRpYWxEZW5zaXR5UmFzdGVyPjtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdyb3VwcyhsYWJlbDogc3RyaW5nLCB0YWJsZTogc3RyaW5nKTogUHJvbWlzZTx7IGNvbHVtbjogQ2F0ZWdvcmljYWxDb2x1bW5NZXRhOyBtYXRjaGVkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9c3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2dyb3Vwcz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsKX1gO1xuICAgIC8vIEh0dHBDbGllbnQsIG5vdCBmZXRjaDogYSBob3N0J3MgaW50ZXJjZXB0b3JzIChpdHMgYXV0aCBoZWFkZXIpIG11c3QgYXBwbHkgdG8gdGhlXG4gICAgLy8gdXBsb2FkIGFzIHRoZXkgZG8gdG8gZXZlcnkgcmVhZCwgb3IgYSBwcm90ZWN0ZWQgc2VydmVyIHJlZnVzZXMgaXQuXG4gICAgbGV0IGJvZHk6IHsgY29sdW1uOiBDYXRlZ29yaWNhbENvbHVtbk1ldGE7IG1hdGNoZWQ6IG51bWJlciB9O1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PHsgY29sdW1uOiBDYXRlZ29yaWNhbENvbHVtbk1ldGE7IG1hdGNoZWQ6IG51bWJlciB9Pih1cmwsIHRhYmxlLCB7XG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvY3N2JyB9LFxuICAgICAgICB9KS5waXBlKHRpbWVvdXQodGhpcy50aW1lb3V0TXMpKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlID0gZXJyIGFzIEh0dHBFcnJvclJlc3BvbnNlO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGU/LmVycm9yPy5lcnJvciA/PyBgW3NwYXRpYWxdIGltcG9ydCBmYWlsZWQgKEhUVFAgJHtlPy5zdGF0dXMgPz8gJz8nfSlgKTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gYm9keS5jb2x1bW47XG4gICAgLy8gVGhlIG5ldyBjb2x1bW4gam9pbnMgdGhlIGRhdGFzZXQ6IHJlLWVtaXQgc28gZXZlcnkgcGFuZWwgc2VlcyBpdC5cbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5kYXRhc2V0JC52YWx1ZTtcbiAgICBpZiAoY3VycmVudCAmJiB0aGlzLm1hbmlmZXN0Py5pZCA9PT0gbWFuaWZlc3QuaWQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBjdXJyZW50LmNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLm5hbWUgIT09IGNvbHVtbi5uYW1lKS5jb25jYXQoY29sdW1uKTtcbiAgICAgIHRoaXMubWFuaWZlc3QgPSB7IC4uLnRoaXMubWFuaWZlc3QsIGNvbHVtbnMgfTtcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGBjb2x1bW46JHtjb2x1bW4ubmFtZX1gKTtcbiAgICAgIHRoaXMuZGF0YXNldCQubmV4dCh7IC4uLmN1cnJlbnQsIGNvbHVtbnMgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IGNvbHVtbiwgbWF0Y2hlZDogYm9keS5tYXRjaGVkIH07XG4gIH1cblxuICBnZXRUcmFuc2NyaXB0Q291bnRzKGdlbmVzOiBzdHJpbmdbXSk6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRDb3VudHM+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SnNvbjxTcGF0aWFsVHJhbnNjcmlwdENvdW50cz4oXG4gICAgICBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L3RyYW5zY3JpcHQtY291bnRzP2dlbmVzPSR7Z2VuZXMubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbignLCcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBMUlUgb3ZlciB0aWxlIHByb21pc2VzLCBzbyBjb25jdXJyZW50IGFza3Mgc2hhcmUgb25lIHJlcXVlc3QgYW5kIGEgZmFpbHVyZSBpcyBub3Qga2VwdC4gKi9cbiAgcHJpdmF0ZSBjYWNoZWRUaWxlPFQgZXh0ZW5kcyBTcGF0aWFsUG9seWdvblRpbGUgfCBTcGF0aWFsVHJhbnNjcmlwdFRpbGU+KFxuICAgIGtleTogc3RyaW5nLCBsb2FkOiAoKSA9PiBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBoaXQgPSB0aGlzLnRpbGVDYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICB0aGlzLnRpbGVDYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgIHRoaXMudGlsZUNhY2hlLnNldChrZXksIGhpdCk7XG4gICAgICByZXR1cm4gaGl0IGFzIFByb21pc2U8VD47XG4gICAgfVxuICAgIGNvbnN0IG1pbmUgPSB0aGlzLnNlbGVjdFRva2VuO1xuICAgIGNvbnN0IHByb21pc2UgPSBsb2FkKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKHRoaXMudGlsZUNhY2hlLmdldChrZXkpID09PSBwcm9taXNlKSB0aGlzLnRpbGVDYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgICBpZiAobWluZSA9PT0gdGhpcy5zZWxlY3RUb2tlbikge1xuICAgICAgdGhpcy50aWxlQ2FjaGUuc2V0KGtleSwgcHJvbWlzZSk7XG4gICAgICB3aGlsZSAodGhpcy50aWxlQ2FjaGUuc2l6ZSA+IFNwYXRpYWxEYXRhSHR0cFNlcnZpY2UuVElMRV9DQUNIRV9MSU1JVCkge1xuICAgICAgICB0aGlzLnRpbGVDYWNoZS5kZWxldGUodGhpcy50aWxlQ2FjaGUua2V5cygpLm5leHQoKS52YWx1ZSEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHZvbHVtZSdzIHZveGVscywgc2luZ2xlLWZsaWdodGVkIGxpa2UgdGhlIHBvbHlnb25zLlxuICAgKlxuICAgKiBWYWxpZGF0ZWQgYWdhaW5zdCB0aGUgbWFuaWZlc3QncyBkZWNsYXJlZCBkaW1lbnNpb25zIGJlZm9yZSBpdCBpcyBoYW5kZWRcbiAgICogYmFjazogYSBzaG9ydCBvciBsb25nIGJ1ZmZlciByZWFkIGFzIGEgM0QgdGV4dHVyZSBkb2VzIG5vdCBmYWlsLCBpdCBzaGVhcnNcbiAgICogdGhlIGFuYXRvbXkgaW50byBkaWFnb25hbCBzdHJlYWtzLCBhbmQgdGhhdCBpcyBmYXIgaGFyZGVyIHRvIHJlY29nbmlzZSBhcyBhXG4gICAqIHRyYW5zcG9ydCBwcm9ibGVtIHRoYW4gYW4gZXJyb3IgaXMuXG4gICAqL1xuICBnZXRWb2x1bWUoKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGNvbnN0IG1ldGEgPSBtYW5pZmVzdC52b2x1bWU7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdbc3BhdGlhbF0gdGhpcyBkYXRhc2V0IGhhcyBubyByZWZlcmVuY2Ugdm9sdW1lJykpO1xuICAgIH1cbiAgICB0aGlzLnZvbHVtZVByb21pc2UgPz89IHRoaXNcbiAgICAgIC5nZXRCaW5hcnkoYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS92b2x1bWVgKVxuICAgICAgLnRoZW4oKGJ1ZikgPT4ge1xuICAgICAgICBjb25zdCB3YW50ID0gbWV0YS53aWR0aCAqIG1ldGEuaGVpZ2h0ICogbWV0YS5kZXB0aDtcbiAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoICE9PSB3YW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFtzcGF0aWFsXSB2b2x1bWUgaXMgJHtidWYuYnl0ZUxlbmd0aH0gYnl0ZXMsIGV4cGVjdGVkICR7d2FudH0gYFxuICAgICAgICAgICAgKyBgKCR7bWV0YS53aWR0aH14JHttZXRhLmhlaWdodH14JHttZXRhLmRlcHRofSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHsgdGhpcy52b2x1bWVQcm9taXNlID0gbnVsbDsgdGhyb3cgZXJyOyB9KTtcbiAgICByZXR1cm4gdGhpcy52b2x1bWVQcm9taXNlO1xuICB9XG5cbiAgLy8g4pSA4pSAIGludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHJlcXVpcmVNYW5pZmVzdCgpOiBTcGF0aWFsTWFuaWZlc3Qge1xuICAgIGlmICghdGhpcy5tYW5pZmVzdCB8fCAhdGhpcy5kYXRhc2V0JC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbc3BhdGlhbF0gbm8gZGF0YXNldCBzZWxlY3RlZCDigJQgY2FsbCBzZWxlY3REYXRhc2V0KCkgZmlyc3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFuaWZlc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGUgKyBzaW5nbGUtZmxpZ2h0IGFyb3VuZCBhIHZlY3RvciBmZXRjaC5cbiAgICpcbiAgICogS2V5cyBhcmUgTE9HSUNBTCDigJQgYGZlYXR1cmU6R0FQREhgLCBub3QgYDxkYXRhc2V0Pi9mZWF0dXJlOkdBUERIYCDigJQgYmVjYXVzZSBgY2xlYXIoKWBcbiAgICogZW1wdGllcyB0aGUgbWFwcyBvbiBldmVyeSBzd2l0Y2gsIHNvIHR3byBkYXRhc2V0cyBuZXZlciBob2xkIGVudHJpZXMgYXQgb25jZS4gV2hhdFxuICAgKiB0aGF0IGRvZXMgbm90IGNvdmVyIGlzIGEgcmVxdWVzdCBzdGlsbCBpbiB0aGUgYWlyIHdoZW4gdGhlIHN3aXRjaCBoYXBwZW5zOiBgY2xlYXIoKWBcbiAgICogY2Fubm90IGNhbmNlbCBhbiBIVFRQIGNhbGwsIHNvIGEgdmVjdG9yIGZldGNoZWQgZm9yIGRhdGFzZXQgQSBjYW4gcmVzb2x2ZSBhZnRlciBCIGhhc1xuICAgKiBiZWVuIHNlbGVjdGVkIGFuZCB3cml0ZSBpdHNlbGYgaW50byBCJ3MgY2FjaGUgdW5kZXIgYSBrZXkgQiB3b3VsZCByZWFkLiBCb3RoIGRhdGFzZXRzXG4gICAqIGhhdmluZyBhIGdlbmUgb2YgdGhhdCBuYW1lIGlzIHRoZSBjb21tb24gY2FzZSwgbm90IHRoZSB1bmx1Y2t5IG9uZSwgYW5kIHRoZSByZXN1bHQgaXNcbiAgICogYSBwbG90IG9mIEEncyBleHByZXNzaW9uIG92ZXIgQidzIGNlbGxzIOKAlCB3aGljaCBsb29rcyBsaWtlIGRhdGEsIG5vdCBsaWtlIGEgZmF1bHQuXG4gICAqXG4gICAqIFNvIHRoZSBnZW5lcmF0aW9uIGlzIGNoZWNrZWQgYWZ0ZXIgdGhlIGF3YWl0LCBhbmQgdGhlIGluLWZsaWdodCBzbG90IGlzIGNsZWFyZWQgb25seVxuICAgKiB3aGVuIHRoZSBwcm9taXNlIHN0aWxsIHNpdHRpbmcgaW4gaXQgaXMgdGhpcyBvbmU6IGEgbGF0ZSBhcnJpdmFsIG11c3Qgbm90IGV2aWN0IHRoZVxuICAgKiBlbnRyeSBhIG5ld2VyIHJlcXVlc3QgZm9yIHRoZSBzYW1lIGtleSBpcyBhbHJlYWR5IHNoYXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGZldGNoQ2FjaGVkKGtleTogc3RyaW5nLCBsb2FkOiAoKSA9PiBQcm9taXNlPENhY2hlZFBheWxvYWQ+KTogUHJvbWlzZTxDYWNoZWRQYXlsb2FkPiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICAvLyBSZS1pbnNlcnQgdG8gbWFyayBtb3N0LXJlY2VudGx5LXVzZWQgKE1hcCBwcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyKS5cbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChrZXksIGhpdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhpdCk7XG4gICAgfVxuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLmluRmxpZ2h0LmdldChrZXkpO1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm4gcGVuZGluZztcblxuICAgIGNvbnN0IG1pbmUgPSB0aGlzLnNlbGVjdFRva2VuO1xuICAgIGNvbnN0IHByb21pc2U6IFByb21pc2U8Q2FjaGVkUGF5bG9hZD4gPSBsb2FkKClcbiAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyBTdGlsbCByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRoYXQgYXNrZWQ6IGl0IG1heSB3ZWxsIGJlIGEgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgICAgLy8gaXRzZWxmIGJlaW5nIHRvcm4gZG93biwgYW5kIHJlamVjdGluZyBoZXJlIHdvdWxkIHN1cmZhY2UgYSBzd2l0Y2ggYXMgYW4gZXJyb3IuXG4gICAgICAgIC8vIFdoYXQgbXVzdCBub3QgaGFwcGVuIGlzIHRoZSB2YWx1ZSBiZWluZyBrZXB0IGZvciB3aG9ldmVyIGNvbWVzIG5leHQuXG4gICAgICAgIGlmIChtaW5lID09PSB0aGlzLnNlbGVjdFRva2VuKSB7XG4gICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5ldmljdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmluRmxpZ2h0LmdldChrZXkpID09PSBwcm9taXNlKSB0aGlzLmluRmxpZ2h0LmRlbGV0ZShrZXkpO1xuICAgICAgfSk7XG4gICAgdGhpcy5pbkZsaWdodC5zZXQoa2V5LCBwcm9taXNlKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuY2FjaGUuc2l6ZSA+IFNwYXRpYWxEYXRhSHR0cFNlcnZpY2UuQ0FDSEVfTElNSVQpIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMuY2FjaGUua2V5cygpLm5leHQoKS52YWx1ZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUob2xkZXN0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEpzb248VD4ocGF0aDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5odHRwLmdldDxUPihgJHt0aGlzLmJhc2VVcmx9JHtwYXRofWApLnBpcGUodGltZW91dCh0aGlzLnRpbWVvdXRNcykpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEJpbmFyeShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLmJhc2VVcmx9JHtwYXRofWAsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG4gICAgICAgIC5waXBlKHRpbWVvdXQodGhpcy50aW1lb3V0TXMpKSxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1kYXRhLWh0dHAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL3NwYXRpYWwtZGF0YS1odHRwL3NwYXRpYWwtZGF0YS1odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6QyxPQUFPLEVBV0wsY0FBYyxHQUNmLE1BQU0sMENBQTBDLENBQUM7QUFDbEQsT0FBTyxFQUdMLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksRUFBVTtRQUNwQixLQUFLLENBQUMsMkJBQTJCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQVNELE1BQU0sT0FBTyxzQkFBc0I7YUFvQlQsZ0JBQVcsR0FBRyxFQUFFLEFBQUwsQ0FBTTthQVVqQixxQkFBZ0IsR0FBRyxHQUFHLEFBQU4sQ0FBTztJQUsvQyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBbENw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QUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUs7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBMkIsQ0FBQztZQUNwRSxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE1BQU07WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFTyxPQUFPLENBQUksSUFBWTtRQUM3QixPQUFPLGNBQWMsQ0FDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBWTtRQUM1QixPQUFPLGNBQWMsQ0FDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ2pDLENBQUM7SUFDSixDQUFDOzhHQS9iVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU3BhdGlhbERhdGFQb3J0LCBUcmFuc2NyaXB0VGlsZVF1ZXJ5IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB7XG4gIFNwYXRpYWxDb2x1bW4sXG4gIFNwYXRpYWxEYXRhc2V0LFxuICBTcGF0aWFsRGVuc2l0eVJhc3RlcixcbiAgU3BhdGlhbEVtYmVkZGluZyxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvbnMsXG4gIENhdGVnb3JpY2FsQ29sdW1uTWV0YSxcbiAgU3BhdGlhbE1hcmtlckdlbmVzLCBTcGF0aWFsVHJhbnNjcmlwdENvdW50cyxcbiAgU3BhdGlhbFRyYW5zY3JpcHRTdW1tYXJ5LFxuICBTcGF0aWFsVHJhbnNjcmlwdFRpbGUsXG4gIGZpbmRDb2x1bW5NZXRhLFxufSBmcm9tICcuLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIFNwYXRpYWxEYXRhc2V0U3VtbWFyeSxcbiAgU3BhdGlhbE1hbmlmZXN0LFxuICBhc3NlcnRNYW5pZmVzdFZlcnNpb24sXG4gIGRhdGFzZXRGcm9tTWFuaWZlc3QsXG4gIGRlY29kZUNvbHVtbixcbiAgZGVjb2RlQ29vcmRzLFxuICBkZWNvZGVEZW5zaXR5LFxuICBkZWNvZGVFbWJlZGRpbmcsXG4gIGRlY29kZUZlYXR1cmVWZWN0b3IsXG4gIGRlY29kZVBvbHlnb25UaWxlLFxuICBkZWNvZGVQb2x5Z29ucyxcbiAgZGVjb2RlUmFkaXVzLFxuICBkZWNvZGVUcmFuc2NyaXB0VGlsZSxcbn0gZnJvbSAnLi9zcGF0aWFsLXdpcmUnO1xuXG4vKipcbiAqIFJlZmVyZW5jZSB7QGxpbmsgU3BhdGlhbERhdGFQb3J0fSBhZGFwdGVyIGZvciB0aGUgd2lyZSBmb3JtYXQgdGhlIGJ1bmRsZWRcbiAqIGV4YW1wbGUgc2VydmVyIHNwZWFrcyAoc2VlIGBzcGF0aWFsLXdpcmUudHNgIGFuZFxuICogYGV4YW1wbGVzL3RpbGUtc2VydmVyL2xpYi9zcGF0aWFsLm1qc2ApLlxuICpcbiAqIE9QVElPTkFMIEFORCBVTkJPVU5EIEJZIERFRkFVTFQg4oCUIHRoaXMgc2VydmljZSBpcyBgQEluamVjdGFibGUoKWAgd2l0aG91dFxuICogYHByb3ZpZGVkSW5gLCBzbyBub3RoaW5nIGdldHMgaXQgdW5sZXNzIGEgaG9zdCBleHBsaWNpdGx5IHByb3ZpZGVzIGl0OlxuICpcbiAqIGBgYHRzXG4gKiBwcm92aWRlcnM6IFtcbiAqICAgU3BhdGlhbERhdGFIdHRwU2VydmljZSxcbiAqICAgeyBwcm92aWRlOiBTUEFUSUFMX0RBVEFfUE9SVCwgdXNlRXhpc3Rpbmc6IFNwYXRpYWxEYXRhSHR0cFNlcnZpY2UgfSxcbiAqIF1cbiAqIGBgYFxuICpcbiAqIFRoYXQgbWlycm9ycyBgQ2VsbHBvc2VTZWdtZW50ZXJTZXJ2aWNlYDogYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiB0aGVcbiAqIGxpYnJhcnkgc2hpcHMgZm9yIGNvbnZlbmllbmNlLCBub3QgYSBkZWZhdWx0IHRoZSBwb3J0IGludmVyc2lvbiBpcyBxdWlldGx5XG4gKiBnaXZpbmcgdXAgb24uIEEgaG9zdCB3aXRoIGl0cyBvd24gYmFja2VuZCBpbXBsZW1lbnRzIGBTcGF0aWFsRGF0YVBvcnRgXG4gKiBkaXJlY3RseSBhbmQgbmV2ZXIgdG91Y2hlcyB0aGlzIGNsYXNzLlxuICpcbiAqIFJlcXVlc3RzIGdvIHRocm91Z2ggQW5ndWxhcidzIGBIdHRwQ2xpZW50YCAobm90IGBmZXRjaGApIHNvIHRoZSBob3N0J3NcbiAqIGludGVyY2VwdG9ycyDigJQgYXV0aCBoZWFkZXJzIGFib3ZlIGFsbCDigJQgYXBwbHksIG1hdGNoaW5nIGB0aWxlLWNsaWVudC50c2AuXG4gKi9cbi8qKlxuICogQSBkYXRhc2V0IHNlbGVjdGlvbiB0aGF0IGEgbmV3ZXIgc2VsZWN0aW9uIChvciBhIGBjbGVhcmApIG92ZXJ0b29rLlxuICpcbiAqIFRocm93biByYXRoZXIgdGhhbiByZXNvbHZlZCBzbyBhIGNhbGxlciBjYW5ub3QgbWlzdGFrZSBpdCBmb3IgXCJ0aGlzIGRhdGFzZXQgaXNcbiAqIG5vdyBsb2FkZWRcIjogbm90aGluZyB3YXMgcHVibGlzaGVkLCBvbiBwdXJwb3NlLlxuICovXG5leHBvcnQgY2xhc3MgU3VwZXJzZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFtzcGF0aWFsXSBzZWxlY3Rpb24gb2YgXCIke2lkfVwiIHdhcyBzdXBlcnNlZGVkIGJ5IGEgbmV3ZXIgb25lYCk7XG4gICAgdGhpcy5uYW1lID0gJ1N1cGVyc2VkZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IHRoZSBMUlUgY2FuIGhvbGQuIE9uZSBhbGlhcyByYXRoZXIgdGhhbiBhIHVuaW9uIHJlcGVhdGVkIGF0IGVhY2ggdXNlLCBzbyBhZGRpbmcgYSBwYXlsb2FkXG4gKiBraW5kIGlzIGEgc2luZ2xlIGVkaXQgaW5zdGVhZCBvZiBmb3VyIHRoYXQgY2FuIGRyaWZ0IGFwYXJ0LlxuICovXG50eXBlIENhY2hlZFBheWxvYWQgPSBTcGF0aWFsQ29sdW1uIHwgRmxvYXQzMkFycmF5IHwgU3BhdGlhbEVtYmVkZGluZyB8IFNwYXRpYWxEZW5zaXR5UmFzdGVyO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3BhdGlhbERhdGFIdHRwU2VydmljZSBpbXBsZW1lbnRzIFNwYXRpYWxEYXRhUG9ydCB7XG4gIC8qKiBTZXJ2ZXIgcm9vdCwgbm9ybWFsaXNlZCB0byBlbmQgd2l0aCBleGFjdGx5IG9uZSBgL2AuICovXG4gIHByaXZhdGUgYmFzZVVybCA9ICcnO1xuICAvKiogUGVyLXJlcXVlc3QgY2VpbGluZy4gVmVjdG9ycyBhcmUgc21hbGw7IGEgaHVuZyByZXF1ZXN0IHNob3VsZCBub3Qgd2VkZ2VcbiAgICogIHRoZSBwaWNrZXIuICovXG4gIHByaXZhdGUgdGltZW91dE1zID0gMzBfMDAwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YXNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwYXRpYWxEYXRhc2V0IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgbWFuaWZlc3Q6IFNwYXRpYWxNYW5pZmVzdCB8IG51bGwgPSBudWxsO1xuICAvKiogQnVtcGVkIGJ5IGV2ZXJ5IGBzZWxlY3REYXRhc2V0YCBhbmQgZXZlcnkgYGNsZWFyYCwgc28gYSBzZWxlY3Rpb24gdGhhdFxuICAgKiAgZmluaXNoZXMgYWZ0ZXIgYSBuZXdlciBpbnRlbnQgY2FuIHRlbGwgYW5kIGRyb3Agd2hhdCBpdCBmZXRjaGVkLiAqL1xuICBwcml2YXRlIHNlbGVjdFRva2VuID0gMDtcblxuICAvKipcbiAgICogTG9hZGVkIHZlY3RvcnMsIGtleWVkIGBjb2x1bW46PG5hbWU+YCAvIGBmZWF0dXJlOjxuYW1lPmAuIEJvdW5kZWQgTFJVOlxuICAgKiBjb2xvdXJpbmcgYnkgY2x1c3RlciDihpIgYnkgYSBnZW5lIOKGkiBiYWNrIGJ5IGNsdXN0ZXIgbXVzdCBub3QgcmVmZXRjaCwgYnV0IGFuXG4gICAqIGFmdGVybm9vbiBvZiBicm93c2luZyBnZW5lcyBtdXN0IG5vdCBncm93IHdpdGhvdXQgbGltaXQgZWl0aGVyIChvbmUgdmVjdG9yXG4gICAqIGlzIGA0wrdOYCBieXRlcyDigJQgMiBNQiBhdCA1MDBrIGNlbGxzKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfTElNSVQgPSAzMjtcblxuICAvKiogSW4tZmxpZ2h0IHJlcXVlc3RzLCBzbyBkb3VibGUtY2xpY2tpbmcgYSBnZW5lIGlzc3VlcyBvbmUgZmV0Y2guICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxDYWNoZWRQYXlsb2FkPj4oKTtcblxuICAvKipcbiAgICogVGlsZXMgZ2V0IHRoZWlyIG93biwgbGFyZ2VyIGNhY2hlOiBwYW5uaW5nIHJldmlzaXRzIHRoZW0gY29uc3RhbnRseSwgYW5kIG9uZSBzY3JlZW5cbiAgICogb2YgYSB6b29tZWQtb3V0IHNlY3Rpb24gaXMgZG96ZW5zIG9mIHRoZW0g4oCUIGZhciBwYXN0IHRoZSB2ZWN0b3IgY2FjaGUncyBsaW1pdC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGlsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8U3BhdGlhbFBvbHlnb25UaWxlIHwgU3BhdGlhbFRyYW5zY3JpcHRUaWxlPj4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVElMRV9DQUNIRV9MSU1JVCA9IDM4NDtcblxuICBwcml2YXRlIHZvbHVtZVByb21pc2U6IFByb21pc2U8VWludDhBcnJheT4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwb2x5Z29uc1Byb21pc2U6IFByb21pc2U8U3BhdGlhbFBvbHlnb25zPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cblxuICAvLyDilIDilIAgY29uZmlndXJhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUG9pbnQgdGhlIGFkYXB0ZXIgYXQgYSBzZXJ2ZXIuIENsZWFycyBhbnkgbG9hZGVkIGRhdGFzZXQuICovXG4gIGNvbmZpZ3VyZShvcHRpb25zOiB7IGJhc2VVcmw6IHN0cmluZzsgdGltZW91dE1zPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zdCByYXcgPSBvcHRpb25zLmJhc2VVcmwgPz8gJyc7XG4gICAgdGhpcy5iYXNlVXJsID0gcmF3LmVuZHNXaXRoKCcvJykgPyByYXcgOiBgJHtyYXd9L2A7XG4gICAgaWYgKG9wdGlvbnMudGltZW91dE1zICE9PSB1bmRlZmluZWQpIHRoaXMudGltZW91dE1zID0gb3B0aW9ucy50aW1lb3V0TXM7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqIERhdGFzZXRzIHRoaXMgc2VydmVyIG9mZmVycywgZm9yIGEgaG9zdC1zaWRlIHBpY2tlci4gKi9cbiAgbGlzdERhdGFzZXRzKCk6IFByb21pc2U8U3BhdGlhbERhdGFzZXRTdW1tYXJ5W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRKc29uPHsgZGF0YXNldHM6IFNwYXRpYWxEYXRhc2V0U3VtbWFyeVtdIH0+KCdzcGF0aWFsL2RhdGFzZXRzJylcbiAgICAgIC50aGVuKChyKSA9PiByLmRhdGFzZXRzID8/IFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmUgZGF0YXNldCdzIG1hbmlmZXN0LCBXSVRIT1VUIHNlbGVjdGluZyBpdC4gTGV0cyBhIGhvc3QgaW5zcGVjdCB3aGF0IGFcbiAgICogc2VydmVyIG9mZmVycyDigJQgY29sdW1uIGFuZCBmZWF0dXJlIG1ldGFkYXRhLCBhbmQgd2hpY2ggaW1hZ2UgYSBkYXRhc2V0XG4gICAqIHJlZ2lzdGVycyBvbnRvIOKAlCB3aGlsZSBidWlsZGluZyBhIHBpY2tlciwgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIGxvYWQgZWFjaFxuICAgKiBkYXRhc2V0IHRvIGZpbmQgb3V0LlxuICAgKi9cbiAgcmVhZE1hbmlmZXN0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFNwYXRpYWxNYW5pZmVzdD4ge1xuICAgIHJldHVybiB0aGlzLmdldEpzb248U3BhdGlhbE1hbmlmZXN0Pihgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9L21hbmlmZXN0YClcbiAgICAgIC50aGVuKChtYW5pZmVzdCkgPT4ge1xuICAgICAgICBhc3NlcnRNYW5pZmVzdFZlcnNpb24obWFuaWZlc3QpO1xuICAgICAgICByZXR1cm4gbWFuaWZlc3Q7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgZGF0YXNldCBhbmQgcHVibGlzaCBpdCBvbiB7QGxpbmsgZ2V0RGF0YXNldCR9LiBGZXRjaGVzIHRoZSBtYW5pZmVzdCxcbiAgICogdGhlbiB0aGUgdmVjdG9ycyB0aGF0IGFyZSBhbHdheXMgbmVlZGVkIChjb29yZGluYXRlcywgYW5kIGlkcy9yYWRpdXMgd2hlblxuICAgKiB0aGUgbWFuaWZlc3Qgc2F5cyB0aGV5IGV4aXN0KSDigJQgbm90aGluZyBlbHNlLlxuICAgKi9cbiAgYXN5bmMgc2VsZWN0RGF0YXNldChpZDogc3RyaW5nKTogUHJvbWlzZTxTcGF0aWFsRGF0YXNldD4ge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICAvLyBTZWxlY3Rpb25zIGFyZSBTRVFVRU5DRUQ6IHRoaXMgaXMgZm91ciBhd2FpdHMgZGVlcCwgc28gYSBzbG93ZXIgZWFybGllclxuICAgIC8vIGNhbGwgd291bGQgb3RoZXJ3aXNlIGFzc2lnbiBgdGhpcy5tYW5pZmVzdGAgb3IgcHVibGlzaCBpdHMgZGF0YXNldCBhZnRlciBhXG4gICAgLy8gbGF0ZXIgb25lIOKAlCBsZWF2aW5nIHRoZSBtYW5pZmVzdCBhbmQgdGhlIG9ic2VydmF0aW9ucyBmcm9tIHR3byBkaWZmZXJlbnRcbiAgICAvLyBkYXRhc2V0cywgd2hpY2ggaXMgd29yc2UgdGhhbiBlaXRoZXIgYmVpbmcgbGF0ZS5cbiAgICBjb25zdCBtaW5lID0gKyt0aGlzLnNlbGVjdFRva2VuO1xuICAgIGNvbnN0IHN1cGVyc2VkZWQgPSAoKSA9PiBtaW5lICE9PSB0aGlzLnNlbGVjdFRva2VuO1xuICAgIGNvbnN0IHBhdGggPSBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YDtcblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRKc29uPFNwYXRpYWxNYW5pZmVzdD4oYCR7cGF0aH0vbWFuaWZlc3RgKTtcbiAgICBhc3NlcnRNYW5pZmVzdFZlcnNpb24obWFuaWZlc3QpO1xuICAgIGlmIChzdXBlcnNlZGVkKCkpIHRocm93IG5ldyBTdXBlcnNlZGVkRXJyb3IoaWQpO1xuICAgIHRoaXMubWFuaWZlc3QgPSBtYW5pZmVzdDtcblxuICAgIGNvbnN0IGNvb3Jkc0J1ZiA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5KGAke3BhdGh9L2Nvb3Jkc2ApO1xuICAgIGlmIChzdXBlcnNlZGVkKCkpIHRocm93IG5ldyBTdXBlcnNlZGVkRXJyb3IoaWQpO1xuICAgIGNvbnN0IGNvb3JkcyA9IGRlY29kZUNvb3Jkcyhjb29yZHNCdWYsIG1hbmlmZXN0LmNvdW50LCAhIW1hbmlmZXN0Lmhhc1opO1xuXG4gICAgY29uc3QgaWRzID0gbWFuaWZlc3QuaGFzSWRzXG4gICAgICA/IChhd2FpdCB0aGlzLmdldEpzb248eyBpZHM6IHN0cmluZ1tdIH0+KGAke3BhdGh9L2lkc2ApKS5pZHNcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJhZGl1cyA9IG1hbmlmZXN0LnJhZGl1cz8ubW9kZSA9PT0gJ3Blci1vYnNlcnZhdGlvbidcbiAgICAgID8gZGVjb2RlUmFkaXVzKGF3YWl0IHRoaXMuZ2V0QmluYXJ5KGAke3BhdGh9L3JhZGl1c2ApLCBtYW5pZmVzdC5jb3VudClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdXBlcnNlZGVkKCkpIHRocm93IG5ldyBTdXBlcnNlZGVkRXJyb3IoaWQpO1xuXG4gICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRGcm9tTWFuaWZlc3QobWFuaWZlc3QsIGNvb3JkcywgeyBpZHMsIHJhZGl1cyB9KTtcbiAgICB0aGlzLmRhdGFzZXQkLm5leHQoZGF0YXNldCk7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICAvKiogRHJvcCB0aGUgbG9hZGVkIGRhdGFzZXQgYW5kIGV2ZXJ5IGNhY2hlZCB2ZWN0b3IuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIC8vIEEgY2xlYXIgaXMgaXRzZWxmIHRoZSBuZXdlc3QgaW50ZW50LCBzbyBpdCBzdXBlcnNlZGVzIGFueSBzZWxlY3Rpb24gc3RpbGxcbiAgICAvLyBpbiBmbGlnaHQgcmF0aGVyIHRoYW4gbGV0dGluZyBvbmUgbGFuZCBhZnRlcndhcmRzLlxuICAgIHRoaXMuc2VsZWN0VG9rZW4rKztcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5pbkZsaWdodC5jbGVhcigpO1xuICAgIHRoaXMudGlsZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5zdW1tYXJ5Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnBvbHlnb25zUHJvbWlzZSA9IG51bGw7XG4gICAgdGhpcy52b2x1bWVQcm9taXNlID0gbnVsbDtcbiAgICBpZiAodGhpcy5kYXRhc2V0JC52YWx1ZSAhPT0gbnVsbCkgdGhpcy5kYXRhc2V0JC5uZXh0KG51bGwpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNwYXRpYWxEYXRhUG9ydCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBnZXREYXRhc2V0JCgpOiBPYnNlcnZhYmxlPFNwYXRpYWxEYXRhc2V0IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFzZXQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0Q29sdW1uKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbENvbHVtbj4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhc2V0JC52YWx1ZSE7XG4gICAgY29uc3QgbWV0YSA9IGZpbmRDb2x1bW5NZXRhKGRhdGFzZXQsIG5hbWUpO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgLy8gUmVqZWN0IHJhdGhlciB0aGFuIHJlc29sdmUgZW1wdHk6IGEgdHlwbyBtdXN0IHN1cmZhY2UgYXMgYW4gZXJyb3IsIG5vdFxuICAgICAgLy8gYXMgYSBwbG90IHRoYXQgc2lsZW50bHkgcmVuZGVycyBldmVyeSBwb2ludCBhcyBcIm5vIGRhdGFcIi5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXG4gICAgICAgIGBbc3BhdGlhbF0gdW5rbm93biBjb2x1bW4gXCIke25hbWV9XCIuIEF2YWlsYWJsZTogJHtkYXRhc2V0LmNvbHVtbnMubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyl9YCxcbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mZXRjaENhY2hlZChcbiAgICAgIGBjb2x1bW46JHtuYW1lfWAsXG4gICAgICAoKSA9PiB0aGlzLmdldEJpbmFyeShgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2NvbHVtbi8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKVxuICAgICAgICAudGhlbigoYnVmKSA9PiBkZWNvZGVDb2x1bW4oYnVmLCBtZXRhLCBtYW5pZmVzdC5jb3VudCkpLFxuICAgICkgYXMgUHJvbWlzZTxTcGF0aWFsQ29sdW1uPjtcbiAgfVxuXG4gIGdldEVtYmVkZGluZyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFNwYXRpYWxFbWJlZGRpbmc+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgY29uc3QgbWV0YSA9IG1hbmlmZXN0LmVtYmVkZGluZ3M/LmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBbc3BhdGlhbF0gdW5rbm93biBlbWJlZGRpbmcgXCIke25hbWV9XCJgKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZldGNoQ2FjaGVkKFxuICAgICAgYGVtYmVkZGluZzoke25hbWV9YCxcbiAgICAgICgpID0+IHRoaXMuZ2V0QmluYXJ5KFxuICAgICAgICBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2VtYmVkZGluZy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gLFxuICAgICAgKS50aGVuKChidWYpID0+IGRlY29kZUVtYmVkZGluZyhidWYsIG1ldGEsIG1hbmlmZXN0LmNvdW50KSksXG4gICAgKSBhcyBQcm9taXNlPFNwYXRpYWxFbWJlZGRpbmc+O1xuICB9XG5cbiAgZ2V0RmVhdHVyZVZlY3RvcihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZsb2F0MzJBcnJheT4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBjb25zdCBuYW1lcyA9IG1hbmlmZXN0LmZlYXR1cmVzPy5uYW1lcztcbiAgICBpZiAobmFtZXMgJiYgIW5hbWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBbc3BhdGlhbF0gdW5rbm93biBmZWF0dXJlIFwiJHtuYW1lfVwiYCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mZXRjaENhY2hlZChcbiAgICAgIGBmZWF0dXJlOiR7bmFtZX1gLFxuICAgICAgKCkgPT4gdGhpcy5nZXRCaW5hcnkoYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS9mZWF0dXJlLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfWApXG4gICAgICAgIC50aGVuKChidWYpID0+IGRlY29kZUZlYXR1cmVWZWN0b3IoYnVmLCBtYW5pZmVzdC5jb3VudCkpLFxuICAgICkgYXMgUHJvbWlzZTxGbG9hdDMyQXJyYXk+O1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoRmVhdHVyZXMocXVlcnk6IHN0cmluZywgbGltaXQgPSA1MCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgLy8gQSBkYXRhc2V0IHRoYXQgaW5saW5lZCBpdHMgbmFtZXMgKHRhcmdldGVkIHBhbmVsKSBpcyBmaWx0ZXJlZCBsb2NhbGx5IOKAlFxuICAgIC8vIG5vIHJvdW5kLXRyaXAgZm9yIGEga2V5c3Ryb2tlLlxuICAgIGNvbnN0IG5hbWVzID0gbWFuaWZlc3QuZmVhdHVyZXM/Lm5hbWVzO1xuICAgIGlmIChuYW1lcykge1xuICAgICAgY29uc3QgcSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbmFtZXMuZmlsdGVyKChuKSA9PiBuLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkpLnNsaWNlKDAsIGxpbWl0KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS9mZWF0dXJlc2BcbiAgICAgICsgYD9xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KX0mbGltaXQ9JHtsaW1pdH1gO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRKc29uPHsgbmFtZXM6IHN0cmluZ1tdIH0+KHVybCkpLm5hbWVzID8/IFtdO1xuICB9XG5cbiAgZ2V0UG9seWdvbnMoKTogUHJvbWlzZTxTcGF0aWFsUG9seWdvbnM+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgaWYgKCFtYW5pZmVzdC5wb2x5Z29ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignW3NwYXRpYWxdIHRoaXMgZGF0YXNldCBoYXMgbm8gcG9seWdvbiBnZW9tZXRyeScpKTtcbiAgICB9XG4gICAgLy8gR2VvbWV0cnkgaXMgb25lIGxhcmdlIGJsb2IgcmF0aGVyIHRoYW4gYSBwZXItbmFtZSB2ZWN0b3IsIHNvIGl0IGdldHMgaXRzXG4gICAgLy8gb3duIHNpbmdsZS1mbGlnaHQgc2xvdCBpbnN0ZWFkIG9mIGEgY2FjaGUgZW50cnkuXG4gICAgdGhpcy5wb2x5Z29uc1Byb21pc2UgPz89IHRoaXNcbiAgICAgIC5nZXRCaW5hcnkoYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS9wb2x5Z29uc2ApXG4gICAgICAudGhlbihkZWNvZGVQb2x5Z29ucylcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7IHRoaXMucG9seWdvbnNQcm9taXNlID0gbnVsbDsgdGhyb3cgZXJyOyB9KTtcbiAgICByZXR1cm4gdGhpcy5wb2x5Z29uc1Byb21pc2U7XG4gIH1cblxuICBnZXRQb2x5Z29uVGlsZShzZXQ6IHN0cmluZywgbGV2ZWw6IG51bWJlciwgZ3g6IG51bWJlciwgZ3k6IG51bWJlcik6IFByb21pc2U8U3BhdGlhbFBvbHlnb25UaWxlPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGlmICghbWFuaWZlc3QucG9seWdvblRpbGVzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdbc3BhdGlhbF0gdGhpcyBkYXRhc2V0IGhhcyBubyB0aWxlZCBwb2x5Z29ucycpKTtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vcG9seWdvbi10aWxlL2BcbiAgICAgICsgYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldCl9LyR7bGV2ZWx9LyR7Z3h9LyR7Z3l9YDtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUaWxlKHBhdGgsICgpID0+IHRoaXMuZ2V0QmluYXJ5KHBhdGgpLnRoZW4oZGVjb2RlUG9seWdvblRpbGUpKSBhc1xuICAgICAgUHJvbWlzZTxTcGF0aWFsUG9seWdvblRpbGU+O1xuICB9XG5cbiAgZ2V0VHJhbnNjcmlwdFRpbGUoXG4gICAgbGV2ZWw6IG51bWJlciwgZ3g6IG51bWJlciwgZ3k6IG51bWJlciwgcXVlcnk6IFRyYW5zY3JpcHRUaWxlUXVlcnksXG4gICk6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRUaWxlPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGlmICghbWFuaWZlc3QudHJhbnNjcmlwdFRpbGVzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdbc3BhdGlhbF0gdGhpcyBkYXRhc2V0IGhhcyBubyB0aWxlZCB0cmFuc2NyaXB0cycpKTtcbiAgICB9XG4gICAgY29uc3QgZ2VuZXMgPSBxdWVyeS5nZW5lcy5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJyk7XG4gICAgY29uc3QgYm94ID0gcXVlcnkuYm94ID8gYCZib3g9JHtxdWVyeS5ib3guam9pbignLCcpfWAgOiAnJztcbiAgICBjb25zdCBwYXRoID0gYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS90cmFuc2NyaXB0LXRpbGUvJHtsZXZlbH0vJHtneH0vJHtneX1gXG4gICAgICArIGA/Z2VuZXM9JHtnZW5lc30mcXVhbGl0eT0ke3F1ZXJ5LnF1YWxpdHkgPz8gJ2hpZ2gnfSR7Ym94fWA7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkVGlsZShwYXRoLCAoKSA9PiB0aGlzLmdldEJpbmFyeShwYXRoKS50aGVuKGRlY29kZVRyYW5zY3JpcHRUaWxlKSkgYXNcbiAgICAgIFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRUaWxlPjtcbiAgfVxuXG4gIGdldFRyYW5zY3JpcHRHZW5lQmlucyhsZXZlbDogbnVtYmVyLCB0eDogbnVtYmVyLCB0eTogbnVtYmVyLCBnZW5lczogc3RyaW5nW10pOiBQcm9taXNlPFNwYXRpYWxUcmFuc2NyaXB0VGlsZT4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBjb25zdCBwYXRoID0gYHNwYXRpYWwvJHtlbmNvZGVVUklDb21wb25lbnQobWFuaWZlc3QuaWQpfS9nZW5lLWJpbnMvJHtsZXZlbH0vJHt0eH0vJHt0eX1gXG4gICAgICArIGA/Z2VuZXM9JHtnZW5lcy5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJyl9YDtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUaWxlKHBhdGgsICgpID0+IHRoaXMuZ2V0QmluYXJ5KHBhdGgpLnRoZW4oZGVjb2RlVHJhbnNjcmlwdFRpbGUpKSBhc1xuICAgICAgUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdFRpbGU+O1xuICB9XG5cbiAgZ2V0VHJhbnNjcmlwdEJpbnMobGV2ZWw6IG51bWJlciwgdHg6IG51bWJlciwgdHk6IG51bWJlcik6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRUaWxlPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGlmICghbWFuaWZlc3QudHJhbnNjcmlwdEJpbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1tzcGF0aWFsXSB0aGlzIGRhdGFzZXQgaGFzIG5vIHRyYW5zY3JpcHQgcHlyYW1pZCcpKTtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vdHJhbnNjcmlwdC1iaW5zLyR7bGV2ZWx9LyR7dHh9LyR7dHl9YDtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUaWxlKHBhdGgsICgpID0+IHRoaXMuZ2V0QmluYXJ5KHBhdGgpLnRoZW4oZGVjb2RlVHJhbnNjcmlwdFRpbGUpKSBhc1xuICAgICAgUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdFRpbGU+O1xuICB9XG5cbiAgLyoqIFNtYWxsIEpTT04gYW5zd2Vycywga2V5ZWQgYnkgVVJMIOKAlCBob3ZlcmluZyBiYWNrIGFuZCBmb3J0aCBtdXN0IG5vdCByZWZldGNoLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN1bW1hcnlDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFNwYXRpYWxUcmFuc2NyaXB0U3VtbWFyeT4+KCk7XG5cbiAgZ2V0VHJhbnNjcmlwdFN1bW1hcnkocXVlcnk6IHtcbiAgICBib3g/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTsgZ2VuZXM/OiBzdHJpbmdbXTsgY2VsbHM/OiBudW1iZXJbXTtcbiAgfSk6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRTdW1tYXJ5PiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGNvbnN0IHBhcmFtczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocXVlcnkuYm94KSBwYXJhbXMucHVzaChgYm94PSR7cXVlcnkuYm94Lm1hcCgodikgPT4gK3YudG9GaXhlZCgzKSkuam9pbignLCcpfWApO1xuICAgIGlmIChxdWVyeS5nZW5lcz8ubGVuZ3RoKSBwYXJhbXMucHVzaChgZ2VuZXM9JHtxdWVyeS5nZW5lcy5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJyl9YCk7XG4gICAgaWYgKHF1ZXJ5LmNlbGxzPy5sZW5ndGgpIHBhcmFtcy5wdXNoKGBjZWxscz0ke3F1ZXJ5LmNlbGxzLmpvaW4oJywnKX1gKTtcbiAgICBjb25zdCB1cmwgPSBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L3RyYW5zY3JpcHQtc3VtbWFyeT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICBsZXQgaGl0ID0gdGhpcy5zdW1tYXJ5Q2FjaGUuZ2V0KHVybCk7XG4gICAgaWYgKCFoaXQpIHtcbiAgICAgIGhpdCA9IHRoaXMuZ2V0SnNvbjxTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnk+KHVybCk7XG4gICAgICBoaXQuY2F0Y2goKCkgPT4gdGhpcy5zdW1tYXJ5Q2FjaGUuZGVsZXRlKHVybCkpO1xuICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGUuc2V0KHVybCwgaGl0KTtcbiAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZS5zaXplID4gMjU2KSB0aGlzLnN1bW1hcnlDYWNoZS5kZWxldGUodGhpcy5zdW1tYXJ5Q2FjaGUua2V5cygpLm5leHQoKS52YWx1ZSEpO1xuICAgIH1cbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgZ2V0RGVuc2l0eShnZW5lczogc3RyaW5nW10sIGJpblNpemU/OiBudW1iZXIpOiBQcm9taXNlPFNwYXRpYWxEZW5zaXR5UmFzdGVyPiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB0aGlzLnJlcXVpcmVNYW5pZmVzdCgpO1xuICAgIGlmICghbWFuaWZlc3QuZGVuc2l0eSkgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignW3NwYXRpYWxdIHRoaXMgZGF0YXNldCBoYXMgbm8gZGVuc2l0eSByYXN0ZXInKSk7XG4gICAgY29uc3QgbGlzdCA9IFsuLi5nZW5lc107XG4gICAgY29uc3QgYmluID0gYmluU2l6ZSA/IGAmYmluPSR7YmluU2l6ZX1gIDogJyc7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWQoXG4gICAgICBgZGVuc2l0eToke2xpc3Quam9pbignLCcpfToke2JpblNpemUgPz8gJyd9YCxcbiAgICAgICgpID0+IHRoaXMuZ2V0QmluYXJ5KFxuICAgICAgICBgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2RlbnNpdHk/Z2VuZXM9JHtsaXN0Lm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oJywnKX0ke2Jpbn1gLFxuICAgICAgKS50aGVuKChidWYpID0+IGRlY29kZURlbnNpdHkoYnVmLCBsaXN0KSksXG4gICAgKSBhcyBQcm9taXNlPFNwYXRpYWxEZW5zaXR5UmFzdGVyPjtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdyb3VwcyhsYWJlbDogc3RyaW5nLCB0YWJsZTogc3RyaW5nKTogUHJvbWlzZTx7IGNvbHVtbjogQ2F0ZWdvcmljYWxDb2x1bW5NZXRhOyBtYXRjaGVkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9c3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L2dyb3Vwcz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsKX1gO1xuICAgIC8vIEh0dHBDbGllbnQsIG5vdCBmZXRjaDogYSBob3N0J3MgaW50ZXJjZXB0b3JzIChpdHMgYXV0aCBoZWFkZXIpIG11c3QgYXBwbHkgdG8gdGhlXG4gICAgLy8gdXBsb2FkIGFzIHRoZXkgZG8gdG8gZXZlcnkgcmVhZCwgb3IgYSBwcm90ZWN0ZWQgc2VydmVyIHJlZnVzZXMgaXQuXG4gICAgbGV0IGJvZHk6IHsgY29sdW1uOiBDYXRlZ29yaWNhbENvbHVtbk1ldGE7IG1hdGNoZWQ6IG51bWJlciB9O1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PHsgY29sdW1uOiBDYXRlZ29yaWNhbENvbHVtbk1ldGE7IG1hdGNoZWQ6IG51bWJlciB9Pih1cmwsIHRhYmxlLCB7XG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvY3N2JyB9LFxuICAgICAgICB9KS5waXBlKHRpbWVvdXQodGhpcy50aW1lb3V0TXMpKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlID0gZXJyIGFzIEh0dHBFcnJvclJlc3BvbnNlO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGU/LmVycm9yPy5lcnJvciA/PyBgW3NwYXRpYWxdIGltcG9ydCBmYWlsZWQgKEhUVFAgJHtlPy5zdGF0dXMgPz8gJz8nfSlgKTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gYm9keS5jb2x1bW47XG4gICAgLy8gVGhlIG5ldyBjb2x1bW4gam9pbnMgdGhlIGRhdGFzZXQ6IHJlLWVtaXQgc28gZXZlcnkgcGFuZWwgc2VlcyBpdC5cbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5kYXRhc2V0JC52YWx1ZTtcbiAgICBpZiAoY3VycmVudCAmJiB0aGlzLm1hbmlmZXN0Py5pZCA9PT0gbWFuaWZlc3QuaWQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBjdXJyZW50LmNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLm5hbWUgIT09IGNvbHVtbi5uYW1lKS5jb25jYXQoY29sdW1uKTtcbiAgICAgIHRoaXMubWFuaWZlc3QgPSB7IC4uLnRoaXMubWFuaWZlc3QsIGNvbHVtbnMgfTtcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGBjb2x1bW46JHtjb2x1bW4ubmFtZX1gKTtcbiAgICAgIHRoaXMuZGF0YXNldCQubmV4dCh7IC4uLmN1cnJlbnQsIGNvbHVtbnMgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IGNvbHVtbiwgbWF0Y2hlZDogYm9keS5tYXRjaGVkIH07XG4gIH1cblxuICBnZXRNYXJrZXJHZW5lcyhjb2x1bW46IHN0cmluZywgcGVyR3JvdXAgPSA1KTogUHJvbWlzZTxTcGF0aWFsTWFya2VyR2VuZXM+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgLy8gTm8gcGVyLXJlcXVlc3QgdGltZW91dDogdGhlIGZpcnN0IGNvbXB1dGF0aW9uIGlzIGEgcGFzcyBvdmVyIHRoZSB3aG9sZSBtYXRyaXguXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8U3BhdGlhbE1hcmtlckdlbmVzPihcbiAgICAgIGAke3RoaXMuYmFzZVVybH1zcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vbWFya2Vycy8ke2VuY29kZVVSSUNvbXBvbmVudChjb2x1bW4pfT9uPSR7cGVyR3JvdXB9YCxcbiAgICApKTtcbiAgfVxuXG4gIGdldFRyYW5zY3JpcHRDb3VudHMoZ2VuZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdENvdW50cz4ge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5yZXF1aXJlTWFuaWZlc3QoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRKc29uPFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzPihcbiAgICAgIGBzcGF0aWFsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1hbmlmZXN0LmlkKX0vdHJhbnNjcmlwdC1jb3VudHM/Z2VuZXM9JHtnZW5lcy5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJyl9YCxcbiAgICApO1xuICB9XG5cbiAgLyoqIExSVSBvdmVyIHRpbGUgcHJvbWlzZXMsIHNvIGNvbmN1cnJlbnQgYXNrcyBzaGFyZSBvbmUgcmVxdWVzdCBhbmQgYSBmYWlsdXJlIGlzIG5vdCBrZXB0LiAqL1xuICBwcml2YXRlIGNhY2hlZFRpbGU8VCBleHRlbmRzIFNwYXRpYWxQb2x5Z29uVGlsZSB8IFNwYXRpYWxUcmFuc2NyaXB0VGlsZT4oXG4gICAga2V5OiBzdHJpbmcsIGxvYWQ6ICgpID0+IFByb21pc2U8VD4sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGhpdCA9IHRoaXMudGlsZUNhY2hlLmdldChrZXkpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHRoaXMudGlsZUNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy50aWxlQ2FjaGUuc2V0KGtleSwgaGl0KTtcbiAgICAgIHJldHVybiBoaXQgYXMgUHJvbWlzZTxUPjtcbiAgICB9XG4gICAgY29uc3QgbWluZSA9IHRoaXMuc2VsZWN0VG9rZW47XG4gICAgY29uc3QgcHJvbWlzZSA9IGxvYWQoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAodGhpcy50aWxlQ2FjaGUuZ2V0KGtleSkgPT09IHByb21pc2UpIHRoaXMudGlsZUNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICAgIGlmIChtaW5lID09PSB0aGlzLnNlbGVjdFRva2VuKSB7XG4gICAgICB0aGlzLnRpbGVDYWNoZS5zZXQoa2V5LCBwcm9taXNlKTtcbiAgICAgIHdoaWxlICh0aGlzLnRpbGVDYWNoZS5zaXplID4gU3BhdGlhbERhdGFIdHRwU2VydmljZS5USUxFX0NBQ0hFX0xJTUlUKSB7XG4gICAgICAgIHRoaXMudGlsZUNhY2hlLmRlbGV0ZSh0aGlzLnRpbGVDYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlISk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2Ugdm9sdW1lJ3Mgdm94ZWxzLCBzaW5nbGUtZmxpZ2h0ZWQgbGlrZSB0aGUgcG9seWdvbnMuXG4gICAqXG4gICAqIFZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBtYW5pZmVzdCdzIGRlY2xhcmVkIGRpbWVuc2lvbnMgYmVmb3JlIGl0IGlzIGhhbmRlZFxuICAgKiBiYWNrOiBhIHNob3J0IG9yIGxvbmcgYnVmZmVyIHJlYWQgYXMgYSAzRCB0ZXh0dXJlIGRvZXMgbm90IGZhaWwsIGl0IHNoZWFyc1xuICAgKiB0aGUgYW5hdG9teSBpbnRvIGRpYWdvbmFsIHN0cmVha3MsIGFuZCB0aGF0IGlzIGZhciBoYXJkZXIgdG8gcmVjb2duaXNlIGFzIGFcbiAgICogdHJhbnNwb3J0IHByb2JsZW0gdGhhbiBhbiBlcnJvciBpcy5cbiAgICovXG4gIGdldFZvbHVtZSgpOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMucmVxdWlyZU1hbmlmZXN0KCk7XG4gICAgY29uc3QgbWV0YSA9IG1hbmlmZXN0LnZvbHVtZTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1tzcGF0aWFsXSB0aGlzIGRhdGFzZXQgaGFzIG5vIHJlZmVyZW5jZSB2b2x1bWUnKSk7XG4gICAgfVxuICAgIHRoaXMudm9sdW1lUHJvbWlzZSA/Pz0gdGhpc1xuICAgICAgLmdldEJpbmFyeShgc3BhdGlhbC8ke2VuY29kZVVSSUNvbXBvbmVudChtYW5pZmVzdC5pZCl9L3ZvbHVtZWApXG4gICAgICAudGhlbigoYnVmKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbnQgPSBtZXRhLndpZHRoICogbWV0YS5oZWlnaHQgKiBtZXRhLmRlcHRoO1xuICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGggIT09IHdhbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW3NwYXRpYWxdIHZvbHVtZSBpcyAke2J1Zi5ieXRlTGVuZ3RofSBieXRlcywgZXhwZWN0ZWQgJHt3YW50fSBgXG4gICAgICAgICAgICArIGAoJHttZXRhLndpZHRofXgke21ldGEuaGVpZ2h0fXgke21ldGEuZGVwdGh9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4geyB0aGlzLnZvbHVtZVByb21pc2UgPSBudWxsOyB0aHJvdyBlcnI7IH0pO1xuICAgIHJldHVybiB0aGlzLnZvbHVtZVByb21pc2U7XG4gIH1cblxuICAvLyDilIDilIAgaW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgcmVxdWlyZU1hbmlmZXN0KCk6IFNwYXRpYWxNYW5pZmVzdCB7XG4gICAgaWYgKCF0aGlzLm1hbmlmZXN0IHx8ICF0aGlzLmRhdGFzZXQkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcGF0aWFsXSBubyBkYXRhc2V0IHNlbGVjdGVkIOKAlCBjYWxsIHNlbGVjdERhdGFzZXQoKSBmaXJzdCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYW5pZmVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSArIHNpbmdsZS1mbGlnaHQgYXJvdW5kIGEgdmVjdG9yIGZldGNoLlxuICAgKlxuICAgKiBLZXlzIGFyZSBMT0dJQ0FMIOKAlCBgZmVhdHVyZTpHQVBESGAsIG5vdCBgPGRhdGFzZXQ+L2ZlYXR1cmU6R0FQREhgIOKAlCBiZWNhdXNlIGBjbGVhcigpYFxuICAgKiBlbXB0aWVzIHRoZSBtYXBzIG9uIGV2ZXJ5IHN3aXRjaCwgc28gdHdvIGRhdGFzZXRzIG5ldmVyIGhvbGQgZW50cmllcyBhdCBvbmNlLiBXaGF0XG4gICAqIHRoYXQgZG9lcyBub3QgY292ZXIgaXMgYSByZXF1ZXN0IHN0aWxsIGluIHRoZSBhaXIgd2hlbiB0aGUgc3dpdGNoIGhhcHBlbnM6IGBjbGVhcigpYFxuICAgKiBjYW5ub3QgY2FuY2VsIGFuIEhUVFAgY2FsbCwgc28gYSB2ZWN0b3IgZmV0Y2hlZCBmb3IgZGF0YXNldCBBIGNhbiByZXNvbHZlIGFmdGVyIEIgaGFzXG4gICAqIGJlZW4gc2VsZWN0ZWQgYW5kIHdyaXRlIGl0c2VsZiBpbnRvIEIncyBjYWNoZSB1bmRlciBhIGtleSBCIHdvdWxkIHJlYWQuIEJvdGggZGF0YXNldHNcbiAgICogaGF2aW5nIGEgZ2VuZSBvZiB0aGF0IG5hbWUgaXMgdGhlIGNvbW1vbiBjYXNlLCBub3QgdGhlIHVubHVja3kgb25lLCBhbmQgdGhlIHJlc3VsdCBpc1xuICAgKiBhIHBsb3Qgb2YgQSdzIGV4cHJlc3Npb24gb3ZlciBCJ3MgY2VsbHMg4oCUIHdoaWNoIGxvb2tzIGxpa2UgZGF0YSwgbm90IGxpa2UgYSBmYXVsdC5cbiAgICpcbiAgICogU28gdGhlIGdlbmVyYXRpb24gaXMgY2hlY2tlZCBhZnRlciB0aGUgYXdhaXQsIGFuZCB0aGUgaW4tZmxpZ2h0IHNsb3QgaXMgY2xlYXJlZCBvbmx5XG4gICAqIHdoZW4gdGhlIHByb21pc2Ugc3RpbGwgc2l0dGluZyBpbiBpdCBpcyB0aGlzIG9uZTogYSBsYXRlIGFycml2YWwgbXVzdCBub3QgZXZpY3QgdGhlXG4gICAqIGVudHJ5IGEgbmV3ZXIgcmVxdWVzdCBmb3IgdGhlIHNhbWUga2V5IGlzIGFscmVhZHkgc2hhcmluZy5cbiAgICovXG4gIHByaXZhdGUgZmV0Y2hDYWNoZWQoa2V5OiBzdHJpbmcsIGxvYWQ6ICgpID0+IFByb21pc2U8Q2FjaGVkUGF5bG9hZD4pOiBQcm9taXNlPENhY2hlZFBheWxvYWQ+IHtcbiAgICBjb25zdCBoaXQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIC8vIFJlLWluc2VydCB0byBtYXJrIG1vc3QtcmVjZW50bHktdXNlZCAoTWFwIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIpLlxuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgaGl0KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGl0KTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuaW5GbGlnaHQuZ2V0KGtleSk7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuXG4gICAgY29uc3QgbWluZSA9IHRoaXMuc2VsZWN0VG9rZW47XG4gICAgY29uc3QgcHJvbWlzZTogUHJvbWlzZTxDYWNoZWRQYXlsb2FkPiA9IGxvYWQoKVxuICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFN0aWxsIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdGhhdCBhc2tlZDogaXQgbWF5IHdlbGwgYmUgYSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgICAvLyBpdHNlbGYgYmVpbmcgdG9ybiBkb3duLCBhbmQgcmVqZWN0aW5nIGhlcmUgd291bGQgc3VyZmFjZSBhIHN3aXRjaCBhcyBhbiBlcnJvci5cbiAgICAgICAgLy8gV2hhdCBtdXN0IG5vdCBoYXBwZW4gaXMgdGhlIHZhbHVlIGJlaW5nIGtlcHQgZm9yIHdob2V2ZXIgY29tZXMgbmV4dC5cbiAgICAgICAgaWYgKG1pbmUgPT09IHRoaXMuc2VsZWN0VG9rZW4pIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmV2aWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5GbGlnaHQuZ2V0KGtleSkgPT09IHByb21pc2UpIHRoaXMuaW5GbGlnaHQuZGVsZXRlKGtleSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmluRmxpZ2h0LnNldChrZXksIHByb21pc2UpO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgcHJpdmF0ZSBldmljdCgpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5jYWNoZS5zaXplID4gU3BhdGlhbERhdGFIdHRwU2VydmljZS5DQUNIRV9MSU1JVCkge1xuICAgICAgY29uc3Qgb2xkZXN0ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvbGRlc3QgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShvbGRlc3QpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SnNvbjxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCkucGlwZSh0aW1lb3V0KHRoaXMudGltZW91dE1zKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmluYXJ5KHBhdGg6IHN0cmluZyk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbiAgICAgICAgLnBpcGUodGltZW91dCh0aGlzLnRpbWVvdXRNcykpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -248,7 +248,8 @@ export function datasetFromManifest(manifest, coords, extras = {}) {
|
|
|
248
248
|
...(manifest.transcriptTiles ? { transcriptTiles: manifest.transcriptTiles } : {}),
|
|
249
249
|
...(manifest.density ? { density: manifest.density } : {}),
|
|
250
250
|
...(manifest.transcriptBins ? { transcriptBins: manifest.transcriptBins } : {}),
|
|
251
|
+
...(manifest.transcriptGeneBins ? { transcriptGeneBins: manifest.transcriptGeneBins } : {}),
|
|
251
252
|
...(manifest.transcriptBinsStatus ? { transcriptBinsStatus: manifest.transcriptBinsStatus } : {}),
|
|
252
253
|
};
|
|
253
254
|
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC13aXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvc3BhdGlhbC1kYXRhLWh0dHAvc3BhdGlhbC13aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxXQUFXLEdBbUJaLE1BQU0sMENBQTBDLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSCxxRkFBcUY7QUFDckYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBc0N0QyxvQ0FBb0M7QUFDcEMsTUFBTSxVQUFVLGNBQWM7SUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUU7WUFDdkUsdUVBQXVFLENBQ3hFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxTQUFTLGdCQUFnQixDQUFDLEdBQWdCLEVBQUUsUUFBZ0IsRUFBRSxJQUFZO0lBQ3hFLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsSUFBSSxjQUFjLFFBQVEsZUFBZSxHQUFHLENBQUMsVUFBVSxJQUFJO1lBQ3hFLG1EQUFtRCxDQUNwRCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQXlC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ZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLEdBQUcsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENhdGVnb3JpY2FsQ29sdW1uTWV0YSxcbiAgQ29udGludW91c0NvbHVtbk1ldGEsXG4gIE5PX0NBVEVHT1JZLFxuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsQ29sdW1uTWV0YSxcbiAgU3BhdGlhbERhdGFzZXQsXG4gIFNwYXRpYWxEZW5zaXR5TWV0YSxcbiAgU3BhdGlhbERlbnNpdHlSYXN0ZXIsXG4gIFNwYXRpYWxFbWJlZGRpbmcsXG4gIFNwYXRpYWxFbWJlZGRpbmdNZXRhLFxuICBTcGF0aWFsRmVhdHVyZU1ldGEsXG4gIFNwYXRpYWxJbWFnZVJlZixcbiAgU3BhdGlhbE9ic2VydmF0aW9ucyxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvblRpbGVzTWV0YSxcbiAgU3BhdGlhbFBvbHlnb25zLFxuICBTcGF0aWFsVHJhbnNjcmlwdEJpbnNNZXRhLFxuICBTcGF0aWFsVHJhbnNjcmlwdEJpbnNTdGF0dXMsXG4gIFNwYXRpYWxUcmFuc2NyaXB0VGlsZSxcbiAgU3BhdGlhbFRyYW5zY3JpcHRUaWxlc01ldGEsXG4gIFNwYXRpYWxWb2x1bWVNZXRhLFxufSBmcm9tICcuLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcblxuLyoqXG4gKiBUaGUgd2lyZSBmb3JtYXQgdGhlIGJ1bmRsZWQgZXhhbXBsZSBzZXJ2ZXIgc3BlYWtzLCBhbmQgaXRzIGRlY29kZXJzLlxuICpcbiAqIFB1cmUgYnkgZGVzaWduIOKAlCBubyBBbmd1bGFyLCBubyBSeEpTLCBubyBIVFRQIOKAlCBzbyB0aGUgZm9ybWF0IGlzIHRlc3RhYmxlIG9uXG4gKiBpdHMgb3duIGFuZCByZXVzYWJsZSBieSBhbnkgdHJhbnNwb3J0IChgU3BhdGlhbERhdGFIdHRwU2VydmljZWAgaXMgb25lKS5cbiAqIE1pcnJvcnMgdGhlIHNwbGl0IGluIGBwbG90bHktdHJhY2UtYnVpbGRlcnMudHNgOiB0aGUgc2hhcGUgbGl2ZXMgaW4gYSBwdXJlXG4gKiBtb2R1bGUsIHRoZSBzZXJ2aWNlIGp1c3QgbW92ZXMgYnl0ZXMuXG4gKlxuICogV0hZIEJJTkFSWVxuICogLS0tLS0tLS0tLVxuICogVmVjdG9ycyBhcmUgb25lIGBGbG9hdDMyQXJyYXlgL2BVaW50MTZBcnJheWAgcGVyIHJlcXVlc3QsIGRlbGl2ZXJlZCBhcyByYXdcbiAqIGxpdHRsZS1lbmRpYW4gYnl0ZXMuIEpTT04gd291bGQgY29zdCB+OOKAkzEyw5cgdGhlIHNpemUgYW5kIGEgcGFyc2UgdGhhdFxuICogYWxsb2NhdGVzIG9uZSBKUyBudW1iZXIgcGVyIHZhbHVlOyBhIHR5cGVkLWFycmF5IHZpZXcgb3ZlciB0aGUgcmVzcG9uc2VcbiAqIGJ1ZmZlciBpcyB6ZXJvLWNvcHkgYW5kIHVwbG9hZHMgdG8gdGhlIEdQVSBkaXJlY3RseS5cbiAqXG4gKiBFTkRJQU5ORVNTXG4gKiAtLS0tLS0tLS0tXG4gKiBMaXR0bGUtZW5kaWFuLCBhc3NlcnRlZCBhdCBkZWNvZGUuIEV2ZXJ5IHBsYXRmb3JtIGEgYnJvd3NlciBydW5zIG9uIHRvZGF5IGlzXG4gKiBsaXR0bGUtZW5kaWFuLCBzbyBhIGBEYXRhVmlld2AgYnl0ZS1ieS1ieXRlIHJlYWQgd291bGQgY29zdCByZWFsIHRpbWUgZm9yIGFcbiAqIGNhc2UgdGhhdCBkb2VzIG5vdCBvY2N1ciDigJQgYnV0IGZhaWxpbmcgbG91ZGx5IGJlYXRzIHJlbmRlcmluZyB0cmFuc3Bvc2VkXG4gKiBnYXJiYWdlIGlmIGl0IGV2ZXIgZG9lcy5cbiAqXG4gKiBFTkRQT0lOVFMgKGJhc2UgPSB0aGUgc2VydmVyIHJvb3QpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBgYGBcbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC9kYXRhc2V0cyAgICAgICAgICAgICAgLT4geyBkYXRhc2V0czogW3sgaWQsIG5hbWUsIGNvdW50IH1dIH1cbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L21hbmlmZXN0ICAgICAgICAgLT4gU3BhdGlhbE1hbmlmZXN0XG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9jb29yZHMgICAgICAgICAgIC0+IGYzMltOXSB4LCBmMzJbTl0geSwgZjMyW05dIHo/XG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9yYWRpdXMgICAgICAgICAgIC0+IGYzMltOXSAgICAgICAgICAgKHBlci1vYnNlcnZhdGlvbiByYWRpdXMgb25seSlcbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L2lkcyAgICAgICAgICAgICAgLT4geyBpZHM6IHN0cmluZ1tdIH0gKGhhc0lkcyBvbmx5KVxuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vY29sdW1uL3tuYW1lfSAgICAtPiB1MTZbTl0gY29kZXMgfCBmMzJbTl0gdmFsdWVzXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9mZWF0dXJlL3tuYW1lfSAgIC0+IGYzMltOXVxuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vZmVhdHVyZXM/cT0mbGltaXQ9IC0+IHsgbmFtZXM6IHN0cmluZ1tdIH1cbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L3BvbHlnb25zICAgICAgICAgLT4gdTMyIGNvdW50LCB1MzJbY291bnQrMV0gb2Zmc2V0cywgZjMyWzIqcmluZ3NdIGNvb3Jkc1xuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vcG9seWdvbi10aWxlL3tzZXR9L3tsZXZlbH0ve2d4fS97Z3l9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IHUzMiBjb3VudCwgdTMyW2NvdW50XSBvYnMsIHUzMltjb3VudCsxXSBvZmZzZXRzLCBmMzIgY29vcmRzXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS90cmFuc2NyaXB0LXRpbGUve2xldmVsfS97Z3h9L3tneX0/Z2VuZXM9QSxCJnF1YWxpdHk9aGlnaHxhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gc2VlIGRlY29kZVRyYW5zY3JpcHRUaWxlXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9kZW5zaXR5P2dlbmVzPUEsQiAtPiBmMzJbcm93cypjb2xzXVxuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vdHJhbnNjcmlwdC1iaW5zL3tsZXZlbH0ve3R4fS97dHl9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IHRyYW5zY3JpcHQtdGlsZSBsYXlvdXQsIG9uZSBlbnRyeSBwZXIgYmluXG4gKiBgYGBcbiAqXG4gKiBUaGUgdGhyZWUgdGlsZWQgcm91dGVzIGFyZSBvcHRpb25hbCBhbmQgYWR2ZXJ0aXNlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIChgcG9seWdvblRpbGVzYCwgYHRyYW5zY3JpcHRUaWxlc2AsIGBkZW5zaXR5YCk7IGEgc2VydmVyIHdpdGhvdXQgdGhlbSBuZXZlclxuICogc2VlcyB0aGVtIHJlcXVlc3RlZC5cbiAqL1xuXG4vKiogQnVtcGVkIHdoZW4gdGhlIGxheW91dCBjaGFuZ2VzIGluY29tcGF0aWJseTsgdGhlIGNsaWVudCByZWZ1c2VzIGFueXRoaW5nIGVsc2UuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9XSVJFX1ZFUlNJT04gPSAxO1xuXG4vKiogUGVyLW9ic2VydmF0aW9uIG1hcmtlciByYWRpdXM6IG9uZSBzaGFyZWQgdmFsdWUsIG9yIGEgc2VydmVkIGYzMiB2ZWN0b3IuICovXG5leHBvcnQgdHlwZSBTcGF0aWFsUmFkaXVzU3BlYyA9XG4gIHwgeyBtb2RlOiAndW5pZm9ybSc7IHZhbHVlOiBudW1iZXIgfVxuICB8IHsgbW9kZTogJ3Blci1vYnNlcnZhdGlvbicgfTtcblxuLyoqIGBHRVQgL3NwYXRpYWwve2lkfS9tYW5pZmVzdGAg4oCUIGV2ZXJ5dGhpbmcgY2hlYXAgZW5vdWdoIHRvIHNlbmQgdXAgZnJvbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxNYW5pZmVzdCB7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogTiDigJQgb2JzZXJ2YXRpb24gY291bnQ7IGV2ZXJ5IHNlcnZlZCB2ZWN0b3IgaGFzIGV4YWN0bHkgdGhpcyBsZW5ndGguICovXG4gIGNvdW50OiBudW1iZXI7XG4gIGhhc1o/OiBib29sZWFuO1xuICBoYXNJZHM/OiBib29sZWFuO1xuICByYWRpdXM/OiBTcGF0aWFsUmFkaXVzU3BlYztcbiAgY29sdW1uczogU3BhdGlhbENvbHVtbk1ldGFbXTtcbiAgZmVhdHVyZXM/OiBTcGF0aWFsRmVhdHVyZU1ldGE7XG4gIHBvbHlnb25zPzogeyBjb3VudDogbnVtYmVyIH07XG4gIGltYWdlUmVmPzogU3BhdGlhbEltYWdlUmVmO1xuICB2b2x1bWU/OiBTcGF0aWFsVm9sdW1lTWV0YTtcbiAgZW1iZWRkaW5ncz86IFNwYXRpYWxFbWJlZGRpbmdNZXRhW107XG4gIG1pY3JvbnNQZXJVbml0PzogbnVtYmVyO1xuICBwb2x5Z29uVGlsZXM/OiBTcGF0aWFsUG9seWdvblRpbGVzTWV0YTtcbiAgdHJhbnNjcmlwdFRpbGVzPzogU3BhdGlhbFRyYW5zY3JpcHRUaWxlc01ldGE7XG4gIGRlbnNpdHk/OiBTcGF0aWFsRGVuc2l0eU1ldGE7XG4gIHRyYW5zY3JpcHRCaW5zPzogU3BhdGlhbFRyYW5zY3JpcHRCaW5zTWV0YTtcbiAgdHJhbnNjcmlwdEJpbnNTdGF0dXM/OiBTcGF0aWFsVHJhbnNjcmlwdEJpbnNTdGF0dXM7XG59XG5cbi8qKiBgR0VUIC9zcGF0aWFsL2RhdGFzZXRzYCAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsRGF0YXNldFN1bW1hcnkge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKiBUcnVlIG9uIGEgbGl0dGxlLWVuZGlhbiBob3N0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCk6IGJvb2xlYW4ge1xuICBjb25zdCBwcm9iZSA9IG5ldyBVaW50MTZBcnJheShbMV0pO1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocHJvYmUuYnVmZmVyKVswXSA9PT0gMTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0TGl0dGxlRW5kaWFuKCk6IHZvaWQge1xuICBpZiAoIWlzTGl0dGxlRW5kaWFuKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnW3NwYXRpYWxdIHdpcmUgZm9ybWF0IGlzIGxpdHRsZS1lbmRpYW47IHRoaXMgcGxhdGZvcm0gaXMgYmlnLWVuZGlhbi4gJyArXG4gICAgICAnU2VydmUgSlNPTiB2ZWN0b3JzLCBvciBieXRlLXN3YXAgaW4gYSBjdXN0b20gU3BhdGlhbERhdGFQb3J0IGFkYXB0ZXIuJyxcbiAgICApO1xuICB9XG59XG5cbi8qKiBHdWFyZCBhIGRlY29kZSBhZ2FpbnN0IGEgdHJ1bmNhdGVkIG9yIG92ZXJzaXplZCByZXNwb25zZS4gKi9cbmZ1bmN0aW9uIGFzc2VydEJ5dGVMZW5ndGgoYnVmOiBBcnJheUJ1ZmZlciwgZXhwZWN0ZWQ6IG51bWJlciwgd2hhdDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChidWYuYnl0ZUxlbmd0aCAhPT0gZXhwZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW3NwYXRpYWxdICR7d2hhdH06IGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ5dGVzLCBnb3QgJHtidWYuYnl0ZUxlbmd0aH0uIGAgK1xuICAgICAgJ01hbmlmZXN0IGNvdW50IGFuZCBzZXJ2ZWQgdmVjdG9yIGxlbmd0aCBkaXNhZ3JlZS4nLFxuICAgICk7XG4gIH1cbn1cblxuLyoqIFJlamVjdCBhIG1hbmlmZXN0IHRoaXMgY2xpZW50IGNhbm5vdCByZWFkLCB3aXRoIGEgbWVzc2FnZSBuYW1pbmcgdGhlIGZpeC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRNYW5pZmVzdFZlcnNpb24obWFuaWZlc3Q6IFNwYXRpYWxNYW5pZmVzdCk6IHZvaWQge1xuICBpZiAobWFuaWZlc3QudmVyc2lvbiAhPT0gU1BBVElBTF9XSVJFX1ZFUlNJT04pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW3NwYXRpYWxdIHVuc3VwcG9ydGVkIHdpcmUgdmVyc2lvbiAke21hbmlmZXN0LnZlcnNpb259IGAgK1xuICAgICAgYCh0aGlzIGNsaWVudCBzcGVha3MgJHtTUEFUSUFMX1dJUkVfVkVSU0lPTn0pLiBVcGRhdGUgdGhlIHNlcnZlciBvciB0aGUgbGlicmFyeS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBgR0VUIC9jb29yZHNgIOKGkiB4L3koL3opLiBPbmUgcmVxdWVzdCByYXRoZXIgdGhhbiB0d28gb3IgdGhyZWU6IHRoZSB2ZWN0b3JzXG4gKiBhcmUgYWx3YXlzIGZldGNoZWQgdG9nZXRoZXIsIGFuZCBhIHNpbmdsZSByZXNwb25zZSBrZWVwcyB0aGVtIGNvbnNpc3RlbnQgaWZcbiAqIHRoZSBkYXRhc2V0IGNoYW5nZXMgdW5kZXJuZWF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUNvb3JkcyhcbiAgYnVmOiBBcnJheUJ1ZmZlciwgY291bnQ6IG51bWJlciwgaGFzWiA9IGZhbHNlLFxuKTogUGljazxTcGF0aWFsT2JzZXJ2YXRpb25zLCAneCcgfCAneScgfCAneic+IHtcbiAgYXNzZXJ0TGl0dGxlRW5kaWFuKCk7XG4gIGNvbnN0IGF4ZXMgPSBoYXNaID8gMyA6IDI7XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCBjb3VudCAqIGF4ZXMgKiA0LCAnY29vcmRzJyk7XG4gIGNvbnN0IHggPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgMCwgY291bnQpO1xuICBjb25zdCB5ID0gbmV3IEZsb2F0MzJBcnJheShidWYsIGNvdW50ICogNCwgY291bnQpO1xuICBjb25zdCB6ID0gaGFzWiA/IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb3VudCAqIDgsIGNvdW50KSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHsgeCwgeSwgeiB9O1xufVxuXG4vKiogYEdFVCAvcmFkaXVzYCDihpIgcGVyLW9ic2VydmF0aW9uIHJhZGlpIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVSYWRpdXMoYnVmOiBBcnJheUJ1ZmZlciwgY291bnQ6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgY291bnQgKiA0LCAncmFkaXVzJyk7XG4gIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgMCwgY291bnQpO1xufVxuXG4vKiogYEdFVCAvZmVhdHVyZS97bmFtZX1gIOKGkiBvbmUgZ2VuZSdzIGV4cHJlc3Npb24gdmVjdG9yLiAqL1xuLyoqXG4gKiBgR0VUIC9zcGF0aWFsL3tpZH0vZW1iZWRkaW5nL3tuYW1lfWAg4oCUIG9uZSBwbGFuZSBwZXIgZGltZW5zaW9uLCBzYW1lIGxheW91dCBhcyBjb29yZHMuXG4gKlxuICogU3RydWN0IG9mIGFycmF5cywgbm90IGludGVybGVhdmVkOiBldmVyeSBkaW1lbnNpb24gaXMgY29udGlndW91cywgc28gYW4gYXhpcyBjYW4gYmUgaGFuZGVkIHRvXG4gKiB0aGUgcmVuZGVyZXIgYXMgYSB2aWV3IHdpdGggbm8gY29weSBhbmQgbm8gc3RyaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRW1iZWRkaW5nKFxuICBidWY6IEFycmF5QnVmZmVyLCBtZXRhOiBTcGF0aWFsRW1iZWRkaW5nTWV0YSwgY291bnQ6IG51bWJlcixcbik6IFNwYXRpYWxFbWJlZGRpbmcge1xuICBhc3NlcnRMaXR0bGVFbmRpYW4oKTtcbiAgYXNzZXJ0Qnl0ZUxlbmd0aChidWYsIGNvdW50ICogbWV0YS5kaW1zICogNCwgYGVtYmVkZGluZyBcIiR7bWV0YS5uYW1lfVwiYCk7XG4gIHJldHVybiB7XG4gICAgbWV0YSxcbiAgICB4OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgMCwgY291bnQpLFxuICAgIHk6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb3VudCAqIDQsIGNvdW50KSxcbiAgICAuLi4obWV0YS5kaW1zID09PSAzID8geyB6OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgY291bnQgKiA4LCBjb3VudCkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZlYXR1cmVWZWN0b3IoYnVmOiBBcnJheUJ1ZmZlciwgY291bnQ6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgY291bnQgKiA0LCAnZmVhdHVyZSB2ZWN0b3InKTtcbiAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmLCAwLCBjb3VudCk7XG59XG5cbi8qKlxuICogYEdFVCAvY29sdW1uL3tuYW1lfWAg4oaSIGEgbG9hZGVkIGNvbHVtbiwgdHlwZWQgYnkgaXRzIGRlc2NyaXB0b3I6IGB1MTZgIGNvZGVzXG4gKiBmb3IgYSBjYXRlZ29yaWNhbCwgYGYzMmAgdmFsdWVzIGZvciBhIGNvbnRpbnVvdXMuIENvZGVzIG91dHNpZGUgdGhlIGNhdGVnb3J5XG4gKiBsaXN0IGFyZSBub3JtYWxpc2VkIHRvIHtAbGluayBOT19DQVRFR09SWX0gc28gYSByZW5kZXJlciBjYW4gdHJ1c3QgdGhlXG4gKiBpbnZhcmlhbnQgaW5zdGVhZCBvZiBib3VuZHMtY2hlY2tpbmcgZXZlcnkgcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVDb2x1bW4oXG4gIGJ1ZjogQXJyYXlCdWZmZXIsIG1ldGE6IFNwYXRpYWxDb2x1bW5NZXRhLCBjb3VudDogbnVtYmVyLFxuKTogU3BhdGlhbENvbHVtbiB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBpZiAobWV0YS5raW5kID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgYXNzZXJ0Qnl0ZUxlbmd0aChidWYsIGNvdW50ICogMiwgYGNvbHVtbiBcIiR7bWV0YS5uYW1lfVwiYCk7XG4gICAgY29uc3QgY29kZXMgPSBuZXcgVWludDE2QXJyYXkoYnVmLCAwLCBjb3VudCk7XG4gICAgY29uc3QgbiA9IChtZXRhIGFzIENhdGVnb3JpY2FsQ29sdW1uTWV0YSkuY2F0ZWdvcmllcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNvZGVzW2ldID49IG4pIGNvZGVzW2ldID0gTk9fQ0FURUdPUlk7XG4gICAgfVxuICAgIHJldHVybiB7IG1ldGE6IG1ldGEgYXMgQ2F0ZWdvcmljYWxDb2x1bW5NZXRhLCBjb2RlcyB9O1xuICB9XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCBjb3VudCAqIDQsIGBjb2x1bW4gXCIke21ldGEubmFtZX1cImApO1xuICByZXR1cm4geyBtZXRhOiBtZXRhIGFzIENvbnRpbnVvdXNDb2x1bW5NZXRhLCB2YWx1ZXM6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCAwLCBjb3VudCkgfTtcbn1cblxuLyoqXG4gKiBgR0VUIC9wb2x5Z29uc2Ag4oaSIGJvdW5kYXJ5IHJpbmdzLiBMYXlvdXQgaXNcbiAqIGBbdTMyIGNvdW50XVt1MzIgb2Zmc2V0cyDDlyAoY291bnQrMSldW2YzMiBjb29yZHMgw5cgMsK3b2Zmc2V0c1tjb3VudF1dYDsgZXZlcnlcbiAqIGZpZWxkIGlzIDQtYnl0ZSB3aWRlIHNvIGVhY2ggdHlwZWQtYXJyYXkgdmlldyBzdGF5cyBhbGlnbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUG9seWdvbnMoYnVmOiBBcnJheUJ1ZmZlcik6IFNwYXRpYWxQb2x5Z29ucyB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBpZiAoYnVmLmJ5dGVMZW5ndGggPCA4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbc3BhdGlhbF0gcG9seWdvbnM6IHJlc3BvbnNlIHRvbyBzaG9ydCBmb3IgYSBoZWFkZXInKTtcbiAgfVxuICBjb25zdCBjb3VudCA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDEpWzBdO1xuICBjb25zdCBvZmZzZXRzID0gbmV3IFVpbnQzMkFycmF5KGJ1ZiwgNCwgY291bnQgKyAxKTtcbiAgY29uc3QgdmVydGV4Q291bnQgPSBvZmZzZXRzW2NvdW50XTtcbiAgY29uc3QgY29vcmRzQnl0ZU9mZnNldCA9IDQgKyAoY291bnQgKyAxKSAqIDQ7XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCBjb29yZHNCeXRlT2Zmc2V0ICsgdmVydGV4Q291bnQgKiAyICogNCwgJ3BvbHlnb25zJyk7XG4gIGNvbnN0IGNvb3JkcyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb29yZHNCeXRlT2Zmc2V0LCB2ZXJ0ZXhDb3VudCAqIDIpO1xuICByZXR1cm4geyBjb29yZHMsIG9mZnNldHMsIGNvdW50IH07XG59XG5cbi8qKlxuICogYEdFVCAvcG9seWdvbi10aWxlLy4uLmAg4oaSIG9uZSB0aWxlIG9mIHJpbmdzIHdpdGggdGhlaXIgb3duaW5nIG9ic2VydmF0aW9ucy4gTGF5b3V0XG4gKiBgW3UzMiBjb3VudF1bdTMyIG9icyDDlyBjb3VudF1bdTMyIG9mZnNldHMgw5cgKGNvdW50KzEpXVtmMzIgY29vcmRzIMOXIDLCt29mZnNldHNbY291bnRdXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQb2x5Z29uVGlsZShidWY6IEFycmF5QnVmZmVyKTogU3BhdGlhbFBvbHlnb25UaWxlIHtcbiAgYXNzZXJ0TGl0dGxlRW5kaWFuKCk7XG4gIGlmIChidWYuYnl0ZUxlbmd0aCA8IDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcGF0aWFsXSBwb2x5Z29uIHRpbGU6IHJlc3BvbnNlIHRvbyBzaG9ydCBmb3IgYSBoZWFkZXInKTtcbiAgfVxuICBjb25zdCBjb3VudCA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDEpWzBdO1xuICBjb25zdCBvYnNlcnZhdGlvbiA9IG5ldyBVaW50MzJBcnJheShidWYsIDQsIGNvdW50KTtcbiAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBVaW50MzJBcnJheShidWYsIDQgKyBjb3VudCAqIDQsIGNvdW50ICsgMSk7XG4gIGNvbnN0IHZlcnRleENvdW50ID0gb2Zmc2V0c1tjb3VudF07XG4gIGNvbnN0IGNvb3Jkc0J5dGVPZmZzZXQgPSA0ICsgY291bnQgKiA0ICsgKGNvdW50ICsgMSkgKiA0O1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgY29vcmRzQnl0ZU9mZnNldCArIHZlcnRleENvdW50ICogOCwgJ3BvbHlnb24gdGlsZScpO1xuICByZXR1cm4ge1xuICAgIGNvdW50LCBvYnNlcnZhdGlvbiwgb2Zmc2V0cyxcbiAgICBjb29yZHM6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb29yZHNCeXRlT2Zmc2V0LCB2ZXJ0ZXhDb3VudCAqIDIpLFxuICB9O1xufVxuXG4vKipcbiAqIGBHRVQgL3RyYW5zY3JpcHQtdGlsZS8uLi5gIOKGkiB0cmFuc2NyaXB0cyBvciBhZ2dyZWdhdGVzLiBMYXlvdXQsIDQtYnl0ZSBhbGlnbmVkOlxuICogYFt1MzIgbl1bdTMyIGZsYWdzXVtmMzIgeMK3bl1bZjMyIHnCt25dW2YzMiB6wrduXVt1MzIgd2VpZ2h0wrduXVt1MzIgb2JzwrduXVt1MTYgZ2VuZcK3biwgcGFkZGVkXWA7XG4gKiBmbGFncyBiaXQgMCBtYXJrcyBhbiBhZ2dyZWdhdGVkIGxldmVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVHJhbnNjcmlwdFRpbGUoYnVmOiBBcnJheUJ1ZmZlcik6IFNwYXRpYWxUcmFuc2NyaXB0VGlsZSB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBpZiAoYnVmLmJ5dGVMZW5ndGggPCA4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbc3BhdGlhbF0gdHJhbnNjcmlwdCB0aWxlOiByZXNwb25zZSB0b28gc2hvcnQgZm9yIGEgaGVhZGVyJyk7XG4gIH1cbiAgY29uc3QgW24sIGZsYWdzXSA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDIpO1xuICBjb25zdCBnZW5lUGFkID0gTWF0aC5jZWlsKChuICogMikgLyA0KSAqIDQ7XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCA4ICsgbiAqIDIwICsgZ2VuZVBhZCwgJ3RyYW5zY3JpcHQgdGlsZScpO1xuICByZXR1cm4ge1xuICAgIGNvdW50OiBuLFxuICAgIGFnZ3JlZ2F0ZWQ6IChmbGFncyAmIDEpID09PSAxLFxuICAgIHg6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCA4LCBuKSxcbiAgICB5OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgOCArIG4gKiA0LCBuKSxcbiAgICB6OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgOCArIG4gKiA4LCBuKSxcbiAgICB3ZWlnaHQ6IG5ldyBVaW50MzJBcnJheShidWYsIDggKyBuICogMTIsIG4pLFxuICAgIG9ic2VydmF0aW9uOiBuZXcgVWludDMyQXJyYXkoYnVmLCA4ICsgbiAqIDE2LCBuKSxcbiAgICBnZW5lOiBuZXcgVWludDE2QXJyYXkoYnVmLCA4ICsgbiAqIDIwLCBuKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgR0VUIC9kZW5zaXR5P2dlbmVzPSZiaW49YCDihpIgdGhlIHN1bW1lZCByYXN0ZXIuIExheW91dFxuICogYFt1MzIgcm93c11bdTMyIGNvbHNdW2YzMiBjZWxsV11bZjMyIGNlbGxIXVtmMzIgb3JpZ2luWF1bZjMyIG9yaWdpblldW2YzMiByb3dzwrdjb2xzXWA6XG4gKiB0aGUgZ2VvbWV0cnkgdHJhdmVscyB3aXRoIHRoZSB2YWx1ZXMgYmVjYXVzZSByZS1iaW5uaW5nIGNoYW5nZXMgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVEZW5zaXR5KGJ1ZjogQXJyYXlCdWZmZXIsIGdlbmVzOiBzdHJpbmdbXSk6IFNwYXRpYWxEZW5zaXR5UmFzdGVyIHtcbiAgYXNzZXJ0TGl0dGxlRW5kaWFuKCk7XG4gIGlmIChidWYuYnl0ZUxlbmd0aCA8IDI0KSB0aHJvdyBuZXcgRXJyb3IoJ1tzcGF0aWFsXSBkZW5zaXR5OiByZXNwb25zZSB0b28gc2hvcnQgZm9yIGEgaGVhZGVyJyk7XG4gIGNvbnN0IFtyb3dzLCBjb2xzXSA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDIpO1xuICBjb25zdCBbY3csIGNoLCBveCwgb3ldID0gbmV3IEZsb2F0MzJBcnJheShidWYsIDgsIDQpO1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgMjQgKyByb3dzICogY29scyAqIDQsICdkZW5zaXR5Jyk7XG4gIGNvbnN0IG1ldGE6IFNwYXRpYWxEZW5zaXR5TWV0YSA9IHsgcm93cywgY29scywgZ3JpZFNpemU6IFtjdywgY2hdLCBvcmlnaW46IFtveCwgb3ldIH07XG4gIHJldHVybiB7IG1ldGEsIGdlbmVzLCB2YWx1ZXM6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCAyNCwgcm93cyAqIGNvbHMpIH07XG59XG5cbi8qKlxuICogRm9sZCBhIG1hbmlmZXN0IHBsdXMgaXRzIGZldGNoZWQgY29vcmRpbmF0ZS9pZC9yYWRpdXMgdmVjdG9ycyBpbnRvIHRoZVxuICogbGlicmFyeS1mYWNpbmcge0BsaW5rIFNwYXRpYWxEYXRhc2V0fS4gQ29sdW1uIGFuZCBmZWF0dXJlICp2YWx1ZXMqIGFyZSBub3RcbiAqIHBhcnQgb2YgdGhpcyDigJQgdGhleSBzdGF5IGxhenkgYmVoaW5kIHRoZSBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YXNldEZyb21NYW5pZmVzdChcbiAgbWFuaWZlc3Q6IFNwYXRpYWxNYW5pZmVzdCxcbiAgY29vcmRzOiBQaWNrPFNwYXRpYWxPYnNlcnZhdGlvbnMsICd4JyB8ICd5JyB8ICd6Jz4sXG4gIGV4dHJhczogeyBpZHM/OiBzdHJpbmdbXTsgcmFkaXVzPzogRmxvYXQzMkFycmF5IH0gPSB7fSxcbik6IFNwYXRpYWxEYXRhc2V0IHtcbiAgYXNzZXJ0TWFuaWZlc3RWZXJzaW9uKG1hbmlmZXN0KTtcbiAgY29uc3QgcmFkaXVzID0gbWFuaWZlc3QucmFkaXVzPy5tb2RlID09PSAndW5pZm9ybSdcbiAgICA/IG1hbmlmZXN0LnJhZGl1cy52YWx1ZVxuICAgIDogZXh0cmFzLnJhZGl1cztcbiAgY29uc3Qgb2JzZXJ2YXRpb25zOiBTcGF0aWFsT2JzZXJ2YXRpb25zID0ge1xuICAgIGNvdW50OiBtYW5pZmVzdC5jb3VudCxcbiAgICB4OiBjb29yZHMueCxcbiAgICB5OiBjb29yZHMueSxcbiAgICAuLi4oY29vcmRzLnogPyB7IHo6IGNvb3Jkcy56IH0gOiB7fSksXG4gICAgLi4uKGV4dHJhcy5pZHMgPyB7IGlkczogZXh0cmFzLmlkcyB9IDoge30pLFxuICAgIC4uLihyYWRpdXMgIT09IHVuZGVmaW5lZCA/IHsgcmFkaXVzIH0gOiB7fSksXG4gIH07XG4gIHJldHVybiB7XG4gICAgaWQ6IG1hbmlmZXN0LmlkLFxuICAgIG5hbWU6IG1hbmlmZXN0Lm5hbWUsXG4gICAgb2JzZXJ2YXRpb25zLFxuICAgIGNvbHVtbnM6IG1hbmlmZXN0LmNvbHVtbnMgPz8gW10sXG4gICAgLi4uKG1hbmlmZXN0LmZlYXR1cmVzID8geyBmZWF0dXJlczogbWFuaWZlc3QuZmVhdHVyZXMgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QucG9seWdvbnMgPyB7IHBvbHlnb25zOiBtYW5pZmVzdC5wb2x5Z29ucyB9IDoge30pLFxuICAgIC4uLihtYW5pZmVzdC5pbWFnZVJlZiA/IHsgaW1hZ2VSZWY6IG1hbmlmZXN0LmltYWdlUmVmIH0gOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0LnZvbHVtZSA/IHsgdm9sdW1lOiBtYW5pZmVzdC52b2x1bWUgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QuZW1iZWRkaW5ncz8ubGVuZ3RoID8geyBlbWJlZGRpbmdzOiBtYW5pZmVzdC5lbWJlZGRpbmdzIH0gOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0Lm1pY3JvbnNQZXJVbml0ICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBtaWNyb25zUGVyVW5pdDogbWFuaWZlc3QubWljcm9uc1BlclVuaXQgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0LnBvbHlnb25UaWxlcyA/IHsgcG9seWdvblRpbGVzOiBtYW5pZmVzdC5wb2x5Z29uVGlsZXMgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QudHJhbnNjcmlwdFRpbGVzID8geyB0cmFuc2NyaXB0VGlsZXM6IG1hbmlmZXN0LnRyYW5zY3JpcHRUaWxlcyB9IDoge30pLFxuICAgIC4uLihtYW5pZmVzdC5kZW5zaXR5ID8geyBkZW5zaXR5OiBtYW5pZmVzdC5kZW5zaXR5IH0gOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0LnRyYW5zY3JpcHRCaW5zID8geyB0cmFuc2NyaXB0QmluczogbWFuaWZlc3QudHJhbnNjcmlwdEJpbnMgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QudHJhbnNjcmlwdEJpbnNTdGF0dXMgPyB7IHRyYW5zY3JpcHRCaW5zU3RhdHVzOiBtYW5pZmVzdC50cmFuc2NyaXB0Qmluc1N0YXR1cyB9IDoge30pLFxuICB9O1xufVxuIl19
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC13aXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvc3BhdGlhbC1kYXRhLWh0dHAvc3BhdGlhbC13aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxXQUFXLEdBbUJaLE1BQU0sMENBQTBDLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSCxxRkFBcUY7QUFDckYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBdUN0QyxvQ0FBb0M7QUFDcEMsTUFBTSxVQUFVLGNBQWM7SUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUU7WUFDdkUsdUVBQXVFLENBQ3hFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxTQUFTLGdCQUFnQixDQUFDLEdBQWdCLEVBQUUsUUFBZ0IsRUFBRSxJQUFZO0lBQ3hFLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsSUFBSSxjQUFjLFFBQVEsZUFBZSxHQUFHLENBQUMsVUFBVSxJQUFJO1lBQ3hFLG1EQUFtRCxDQUNwRCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQXlC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ZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRixHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDbEcsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYXRlZ29yaWNhbENvbHVtbk1ldGEsXG4gIENvbnRpbnVvdXNDb2x1bW5NZXRhLFxuICBOT19DQVRFR09SWSxcbiAgU3BhdGlhbENvbHVtbixcbiAgU3BhdGlhbENvbHVtbk1ldGEsXG4gIFNwYXRpYWxEYXRhc2V0LFxuICBTcGF0aWFsRGVuc2l0eU1ldGEsXG4gIFNwYXRpYWxEZW5zaXR5UmFzdGVyLFxuICBTcGF0aWFsRW1iZWRkaW5nLFxuICBTcGF0aWFsRW1iZWRkaW5nTWV0YSxcbiAgU3BhdGlhbEZlYXR1cmVNZXRhLFxuICBTcGF0aWFsSW1hZ2VSZWYsXG4gIFNwYXRpYWxPYnNlcnZhdGlvbnMsXG4gIFNwYXRpYWxQb2x5Z29uVGlsZSxcbiAgU3BhdGlhbFBvbHlnb25UaWxlc01ldGEsXG4gIFNwYXRpYWxQb2x5Z29ucyxcbiAgU3BhdGlhbFRyYW5zY3JpcHRCaW5zTWV0YSwgU3BhdGlhbFRyYW5zY3JpcHRHZW5lQmluc01ldGEsXG4gIFNwYXRpYWxUcmFuc2NyaXB0Qmluc1N0YXR1cyxcbiAgU3BhdGlhbFRyYW5zY3JpcHRUaWxlLFxuICBTcGF0aWFsVHJhbnNjcmlwdFRpbGVzTWV0YSxcbiAgU3BhdGlhbFZvbHVtZU1ldGEsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuXG4vKipcbiAqIFRoZSB3aXJlIGZvcm1hdCB0aGUgYnVuZGxlZCBleGFtcGxlIHNlcnZlciBzcGVha3MsIGFuZCBpdHMgZGVjb2RlcnMuXG4gKlxuICogUHVyZSBieSBkZXNpZ24g4oCUIG5vIEFuZ3VsYXIsIG5vIFJ4SlMsIG5vIEhUVFAg4oCUIHNvIHRoZSBmb3JtYXQgaXMgdGVzdGFibGUgb25cbiAqIGl0cyBvd24gYW5kIHJldXNhYmxlIGJ5IGFueSB0cmFuc3BvcnQgKGBTcGF0aWFsRGF0YUh0dHBTZXJ2aWNlYCBpcyBvbmUpLlxuICogTWlycm9ycyB0aGUgc3BsaXQgaW4gYHBsb3RseS10cmFjZS1idWlsZGVycy50c2A6IHRoZSBzaGFwZSBsaXZlcyBpbiBhIHB1cmVcbiAqIG1vZHVsZSwgdGhlIHNlcnZpY2UganVzdCBtb3ZlcyBieXRlcy5cbiAqXG4gKiBXSFkgQklOQVJZXG4gKiAtLS0tLS0tLS0tXG4gKiBWZWN0b3JzIGFyZSBvbmUgYEZsb2F0MzJBcnJheWAvYFVpbnQxNkFycmF5YCBwZXIgcmVxdWVzdCwgZGVsaXZlcmVkIGFzIHJhd1xuICogbGl0dGxlLWVuZGlhbiBieXRlcy4gSlNPTiB3b3VsZCBjb3N0IH444oCTMTLDlyB0aGUgc2l6ZSBhbmQgYSBwYXJzZSB0aGF0XG4gKiBhbGxvY2F0ZXMgb25lIEpTIG51bWJlciBwZXIgdmFsdWU7IGEgdHlwZWQtYXJyYXkgdmlldyBvdmVyIHRoZSByZXNwb25zZVxuICogYnVmZmVyIGlzIHplcm8tY29weSBhbmQgdXBsb2FkcyB0byB0aGUgR1BVIGRpcmVjdGx5LlxuICpcbiAqIEVORElBTk5FU1NcbiAqIC0tLS0tLS0tLS1cbiAqIExpdHRsZS1lbmRpYW4sIGFzc2VydGVkIGF0IGRlY29kZS4gRXZlcnkgcGxhdGZvcm0gYSBicm93c2VyIHJ1bnMgb24gdG9kYXkgaXNcbiAqIGxpdHRsZS1lbmRpYW4sIHNvIGEgYERhdGFWaWV3YCBieXRlLWJ5LWJ5dGUgcmVhZCB3b3VsZCBjb3N0IHJlYWwgdGltZSBmb3IgYVxuICogY2FzZSB0aGF0IGRvZXMgbm90IG9jY3VyIOKAlCBidXQgZmFpbGluZyBsb3VkbHkgYmVhdHMgcmVuZGVyaW5nIHRyYW5zcG9zZWRcbiAqIGdhcmJhZ2UgaWYgaXQgZXZlciBkb2VzLlxuICpcbiAqIEVORFBPSU5UUyAoYmFzZSA9IHRoZSBzZXJ2ZXIgcm9vdClcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGBgYFxuICogR0VUIHtiYXNlfS9zcGF0aWFsL2RhdGFzZXRzICAgICAgICAgICAgICAtPiB7IGRhdGFzZXRzOiBbeyBpZCwgbmFtZSwgY291bnQgfV0gfVxuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vbWFuaWZlc3QgICAgICAgICAtPiBTcGF0aWFsTWFuaWZlc3RcbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L2Nvb3JkcyAgICAgICAgICAgLT4gZjMyW05dIHgsIGYzMltOXSB5LCBmMzJbTl0gej9cbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L3JhZGl1cyAgICAgICAgICAgLT4gZjMyW05dICAgICAgICAgICAocGVyLW9ic2VydmF0aW9uIHJhZGl1cyBvbmx5KVxuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vaWRzICAgICAgICAgICAgICAtPiB7IGlkczogc3RyaW5nW10gfSAoaGFzSWRzIG9ubHkpXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9jb2x1bW4ve25hbWV9ICAgIC0+IHUxNltOXSBjb2RlcyB8IGYzMltOXSB2YWx1ZXNcbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L2ZlYXR1cmUve25hbWV9ICAgLT4gZjMyW05dXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9mZWF0dXJlcz9xPSZsaW1pdD0gLT4geyBuYW1lczogc3RyaW5nW10gfVxuICogR0VUIHtiYXNlfS9zcGF0aWFsL3tpZH0vcG9seWdvbnMgICAgICAgICAtPiB1MzIgY291bnQsIHUzMltjb3VudCsxXSBvZmZzZXRzLCBmMzJbMipyaW5nc10gY29vcmRzXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS9wb2x5Z29uLXRpbGUve3NldH0ve2xldmVsfS97Z3h9L3tneX1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gdTMyIGNvdW50LCB1MzJbY291bnRdIG9icywgdTMyW2NvdW50KzFdIG9mZnNldHMsIGYzMiBjb29yZHNcbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L3RyYW5zY3JpcHQtdGlsZS97bGV2ZWx9L3tneH0ve2d5fT9nZW5lcz1BLEImcXVhbGl0eT1oaWdofGFsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBzZWUgZGVjb2RlVHJhbnNjcmlwdFRpbGVcbiAqIEdFVCB7YmFzZX0vc3BhdGlhbC97aWR9L2RlbnNpdHk/Z2VuZXM9QSxCIC0+IGYzMltyb3dzKmNvbHNdXG4gKiBHRVQge2Jhc2V9L3NwYXRpYWwve2lkfS90cmFuc2NyaXB0LWJpbnMve2xldmVsfS97dHh9L3t0eX1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gdHJhbnNjcmlwdC10aWxlIGxheW91dCwgb25lIGVudHJ5IHBlciBiaW5cbiAqIGBgYFxuICpcbiAqIFRoZSB0aHJlZSB0aWxlZCByb3V0ZXMgYXJlIG9wdGlvbmFsIGFuZCBhZHZlcnRpc2VkIGluIHRoZSBtYW5pZmVzdFxuICogKGBwb2x5Z29uVGlsZXNgLCBgdHJhbnNjcmlwdFRpbGVzYCwgYGRlbnNpdHlgKTsgYSBzZXJ2ZXIgd2l0aG91dCB0aGVtIG5ldmVyXG4gKiBzZWVzIHRoZW0gcmVxdWVzdGVkLlxuICovXG5cbi8qKiBCdW1wZWQgd2hlbiB0aGUgbGF5b3V0IGNoYW5nZXMgaW5jb21wYXRpYmx5OyB0aGUgY2xpZW50IHJlZnVzZXMgYW55dGhpbmcgZWxzZS4gKi9cbmV4cG9ydCBjb25zdCBTUEFUSUFMX1dJUkVfVkVSU0lPTiA9IDE7XG5cbi8qKiBQZXItb2JzZXJ2YXRpb24gbWFya2VyIHJhZGl1czogb25lIHNoYXJlZCB2YWx1ZSwgb3IgYSBzZXJ2ZWQgZjMyIHZlY3Rvci4gKi9cbmV4cG9ydCB0eXBlIFNwYXRpYWxSYWRpdXNTcGVjID1cbiAgfCB7IG1vZGU6ICd1bmlmb3JtJzsgdmFsdWU6IG51bWJlciB9XG4gIHwgeyBtb2RlOiAncGVyLW9ic2VydmF0aW9uJyB9O1xuXG4vKiogYEdFVCAvc3BhdGlhbC97aWR9L21hbmlmZXN0YCDigJQgZXZlcnl0aGluZyBjaGVhcCBlbm91Z2ggdG8gc2VuZCB1cCBmcm9udC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbE1hbmlmZXN0IHtcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBOIOKAlCBvYnNlcnZhdGlvbiBjb3VudDsgZXZlcnkgc2VydmVkIHZlY3RvciBoYXMgZXhhY3RseSB0aGlzIGxlbmd0aC4gKi9cbiAgY291bnQ6IG51bWJlcjtcbiAgaGFzWj86IGJvb2xlYW47XG4gIGhhc0lkcz86IGJvb2xlYW47XG4gIHJhZGl1cz86IFNwYXRpYWxSYWRpdXNTcGVjO1xuICBjb2x1bW5zOiBTcGF0aWFsQ29sdW1uTWV0YVtdO1xuICBmZWF0dXJlcz86IFNwYXRpYWxGZWF0dXJlTWV0YTtcbiAgcG9seWdvbnM/OiB7IGNvdW50OiBudW1iZXIgfTtcbiAgaW1hZ2VSZWY/OiBTcGF0aWFsSW1hZ2VSZWY7XG4gIHZvbHVtZT86IFNwYXRpYWxWb2x1bWVNZXRhO1xuICBlbWJlZGRpbmdzPzogU3BhdGlhbEVtYmVkZGluZ01ldGFbXTtcbiAgbWljcm9uc1BlclVuaXQ/OiBudW1iZXI7XG4gIHBvbHlnb25UaWxlcz86IFNwYXRpYWxQb2x5Z29uVGlsZXNNZXRhO1xuICB0cmFuc2NyaXB0VGlsZXM/OiBTcGF0aWFsVHJhbnNjcmlwdFRpbGVzTWV0YTtcbiAgZGVuc2l0eT86IFNwYXRpYWxEZW5zaXR5TWV0YTtcbiAgdHJhbnNjcmlwdEJpbnM/OiBTcGF0aWFsVHJhbnNjcmlwdEJpbnNNZXRhO1xuICB0cmFuc2NyaXB0Qmluc1N0YXR1cz86IFNwYXRpYWxUcmFuc2NyaXB0Qmluc1N0YXR1cztcbiAgdHJhbnNjcmlwdEdlbmVCaW5zPzogU3BhdGlhbFRyYW5zY3JpcHRHZW5lQmluc01ldGE7XG59XG5cbi8qKiBgR0VUIC9zcGF0aWFsL2RhdGFzZXRzYCAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsRGF0YXNldFN1bW1hcnkge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKiBUcnVlIG9uIGEgbGl0dGxlLWVuZGlhbiBob3N0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCk6IGJvb2xlYW4ge1xuICBjb25zdCBwcm9iZSA9IG5ldyBVaW50MTZBcnJheShbMV0pO1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocHJvYmUuYnVmZmVyKVswXSA9PT0gMTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0TGl0dGxlRW5kaWFuKCk6IHZvaWQge1xuICBpZiAoIWlzTGl0dGxlRW5kaWFuKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnW3NwYXRpYWxdIHdpcmUgZm9ybWF0IGlzIGxpdHRsZS1lbmRpYW47IHRoaXMgcGxhdGZvcm0gaXMgYmlnLWVuZGlhbi4gJyArXG4gICAgICAnU2VydmUgSlNPTiB2ZWN0b3JzLCBvciBieXRlLXN3YXAgaW4gYSBjdXN0b20gU3BhdGlhbERhdGFQb3J0IGFkYXB0ZXIuJyxcbiAgICApO1xuICB9XG59XG5cbi8qKiBHdWFyZCBhIGRlY29kZSBhZ2FpbnN0IGEgdHJ1bmNhdGVkIG9yIG92ZXJzaXplZCByZXNwb25zZS4gKi9cbmZ1bmN0aW9uIGFzc2VydEJ5dGVMZW5ndGgoYnVmOiBBcnJheUJ1ZmZlciwgZXhwZWN0ZWQ6IG51bWJlciwgd2hhdDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChidWYuYnl0ZUxlbmd0aCAhPT0gZXhwZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW3NwYXRpYWxdICR7d2hhdH06IGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ5dGVzLCBnb3QgJHtidWYuYnl0ZUxlbmd0aH0uIGAgK1xuICAgICAgJ01hbmlmZXN0IGNvdW50IGFuZCBzZXJ2ZWQgdmVjdG9yIGxlbmd0aCBkaXNhZ3JlZS4nLFxuICAgICk7XG4gIH1cbn1cblxuLyoqIFJlamVjdCBhIG1hbmlmZXN0IHRoaXMgY2xpZW50IGNhbm5vdCByZWFkLCB3aXRoIGEgbWVzc2FnZSBuYW1pbmcgdGhlIGZpeC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRNYW5pZmVzdFZlcnNpb24obWFuaWZlc3Q6IFNwYXRpYWxNYW5pZmVzdCk6IHZvaWQge1xuICBpZiAobWFuaWZlc3QudmVyc2lvbiAhPT0gU1BBVElBTF9XSVJFX1ZFUlNJT04pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW3NwYXRpYWxdIHVuc3VwcG9ydGVkIHdpcmUgdmVyc2lvbiAke21hbmlmZXN0LnZlcnNpb259IGAgK1xuICAgICAgYCh0aGlzIGNsaWVudCBzcGVha3MgJHtTUEFUSUFMX1dJUkVfVkVSU0lPTn0pLiBVcGRhdGUgdGhlIHNlcnZlciBvciB0aGUgbGlicmFyeS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBgR0VUIC9jb29yZHNgIOKGkiB4L3koL3opLiBPbmUgcmVxdWVzdCByYXRoZXIgdGhhbiB0d28gb3IgdGhyZWU6IHRoZSB2ZWN0b3JzXG4gKiBhcmUgYWx3YXlzIGZldGNoZWQgdG9nZXRoZXIsIGFuZCBhIHNpbmdsZSByZXNwb25zZSBrZWVwcyB0aGVtIGNvbnNpc3RlbnQgaWZcbiAqIHRoZSBkYXRhc2V0IGNoYW5nZXMgdW5kZXJuZWF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUNvb3JkcyhcbiAgYnVmOiBBcnJheUJ1ZmZlciwgY291bnQ6IG51bWJlciwgaGFzWiA9IGZhbHNlLFxuKTogUGljazxTcGF0aWFsT2JzZXJ2YXRpb25zLCAneCcgfCAneScgfCAneic+IHtcbiAgYXNzZXJ0TGl0dGxlRW5kaWFuKCk7XG4gIGNvbnN0IGF4ZXMgPSBoYXNaID8gMyA6IDI7XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCBjb3VudCAqIGF4ZXMgKiA0LCAnY29vcmRzJyk7XG4gIGNvbnN0IHggPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgMCwgY291bnQpO1xuICBjb25zdCB5ID0gbmV3IEZsb2F0MzJBcnJheShidWYsIGNvdW50ICogNCwgY291bnQpO1xuICBjb25zdCB6ID0gaGFzWiA/IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb3VudCAqIDgsIGNvdW50KSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHsgeCwgeSwgeiB9O1xufVxuXG4vKiogYEdFVCAvcmFkaXVzYCDihpIgcGVyLW9ic2VydmF0aW9uIHJhZGlpIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVSYWRpdXMoYnVmOiBBcnJheUJ1ZmZlciwgY291bnQ6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgY291bnQgKiA0LCAncmFkaXVzJyk7XG4gIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgMCwgY291bnQpO1xufVxuXG4vKiogYEdFVCAvZmVhdHVyZS97bmFtZX1gIOKGkiBvbmUgZ2VuZSdzIGV4cHJlc3Npb24gdmVjdG9yLiAqL1xuLyoqXG4gKiBgR0VUIC9zcGF0aWFsL3tpZH0vZW1iZWRkaW5nL3tuYW1lfWAg4oCUIG9uZSBwbGFuZSBwZXIgZGltZW5zaW9uLCBzYW1lIGxheW91dCBhcyBjb29yZHMuXG4gKlxuICogU3RydWN0IG9mIGFycmF5cywgbm90IGludGVybGVhdmVkOiBldmVyeSBkaW1lbnNpb24gaXMgY29udGlndW91cywgc28gYW4gYXhpcyBjYW4gYmUgaGFuZGVkIHRvXG4gKiB0aGUgcmVuZGVyZXIgYXMgYSB2aWV3IHdpdGggbm8gY29weSBhbmQgbm8gc3RyaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRW1iZWRkaW5nKFxuICBidWY6IEFycmF5QnVmZmVyLCBtZXRhOiBTcGF0aWFsRW1iZWRkaW5nTWV0YSwgY291bnQ6IG51bWJlcixcbik6IFNwYXRpYWxFbWJlZGRpbmcge1xuICBhc3NlcnRMaXR0bGVFbmRpYW4oKTtcbiAgYXNzZXJ0Qnl0ZUxlbmd0aChidWYsIGNvdW50ICogbWV0YS5kaW1zICogNCwgYGVtYmVkZGluZyBcIiR7bWV0YS5uYW1lfVwiYCk7XG4gIHJldHVybiB7XG4gICAgbWV0YSxcbiAgICB4OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgMCwgY291bnQpLFxuICAgIHk6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb3VudCAqIDQsIGNvdW50KSxcbiAgICAuLi4obWV0YS5kaW1zID09PSAzID8geyB6OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgY291bnQgKiA4LCBjb3VudCkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZlYXR1cmVWZWN0b3IoYnVmOiBBcnJheUJ1ZmZlciwgY291bnQ6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgY291bnQgKiA0LCAnZmVhdHVyZSB2ZWN0b3InKTtcbiAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmLCAwLCBjb3VudCk7XG59XG5cbi8qKlxuICogYEdFVCAvY29sdW1uL3tuYW1lfWAg4oaSIGEgbG9hZGVkIGNvbHVtbiwgdHlwZWQgYnkgaXRzIGRlc2NyaXB0b3I6IGB1MTZgIGNvZGVzXG4gKiBmb3IgYSBjYXRlZ29yaWNhbCwgYGYzMmAgdmFsdWVzIGZvciBhIGNvbnRpbnVvdXMuIENvZGVzIG91dHNpZGUgdGhlIGNhdGVnb3J5XG4gKiBsaXN0IGFyZSBub3JtYWxpc2VkIHRvIHtAbGluayBOT19DQVRFR09SWX0gc28gYSByZW5kZXJlciBjYW4gdHJ1c3QgdGhlXG4gKiBpbnZhcmlhbnQgaW5zdGVhZCBvZiBib3VuZHMtY2hlY2tpbmcgZXZlcnkgcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVDb2x1bW4oXG4gIGJ1ZjogQXJyYXlCdWZmZXIsIG1ldGE6IFNwYXRpYWxDb2x1bW5NZXRhLCBjb3VudDogbnVtYmVyLFxuKTogU3BhdGlhbENvbHVtbiB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBpZiAobWV0YS5raW5kID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgYXNzZXJ0Qnl0ZUxlbmd0aChidWYsIGNvdW50ICogMiwgYGNvbHVtbiBcIiR7bWV0YS5uYW1lfVwiYCk7XG4gICAgY29uc3QgY29kZXMgPSBuZXcgVWludDE2QXJyYXkoYnVmLCAwLCBjb3VudCk7XG4gICAgY29uc3QgbiA9IChtZXRhIGFzIENhdGVnb3JpY2FsQ29sdW1uTWV0YSkuY2F0ZWdvcmllcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNvZGVzW2ldID49IG4pIGNvZGVzW2ldID0gTk9fQ0FURUdPUlk7XG4gICAgfVxuICAgIHJldHVybiB7IG1ldGE6IG1ldGEgYXMgQ2F0ZWdvcmljYWxDb2x1bW5NZXRhLCBjb2RlcyB9O1xuICB9XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCBjb3VudCAqIDQsIGBjb2x1bW4gXCIke21ldGEubmFtZX1cImApO1xuICByZXR1cm4geyBtZXRhOiBtZXRhIGFzIENvbnRpbnVvdXNDb2x1bW5NZXRhLCB2YWx1ZXM6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCAwLCBjb3VudCkgfTtcbn1cblxuLyoqXG4gKiBgR0VUIC9wb2x5Z29uc2Ag4oaSIGJvdW5kYXJ5IHJpbmdzLiBMYXlvdXQgaXNcbiAqIGBbdTMyIGNvdW50XVt1MzIgb2Zmc2V0cyDDlyAoY291bnQrMSldW2YzMiBjb29yZHMgw5cgMsK3b2Zmc2V0c1tjb3VudF1dYDsgZXZlcnlcbiAqIGZpZWxkIGlzIDQtYnl0ZSB3aWRlIHNvIGVhY2ggdHlwZWQtYXJyYXkgdmlldyBzdGF5cyBhbGlnbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUG9seWdvbnMoYnVmOiBBcnJheUJ1ZmZlcik6IFNwYXRpYWxQb2x5Z29ucyB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBpZiAoYnVmLmJ5dGVMZW5ndGggPCA4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbc3BhdGlhbF0gcG9seWdvbnM6IHJlc3BvbnNlIHRvbyBzaG9ydCBmb3IgYSBoZWFkZXInKTtcbiAgfVxuICBjb25zdCBjb3VudCA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDEpWzBdO1xuICBjb25zdCBvZmZzZXRzID0gbmV3IFVpbnQzMkFycmF5KGJ1ZiwgNCwgY291bnQgKyAxKTtcbiAgY29uc3QgdmVydGV4Q291bnQgPSBvZmZzZXRzW2NvdW50XTtcbiAgY29uc3QgY29vcmRzQnl0ZU9mZnNldCA9IDQgKyAoY291bnQgKyAxKSAqIDQ7XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCBjb29yZHNCeXRlT2Zmc2V0ICsgdmVydGV4Q291bnQgKiAyICogNCwgJ3BvbHlnb25zJyk7XG4gIGNvbnN0IGNvb3JkcyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb29yZHNCeXRlT2Zmc2V0LCB2ZXJ0ZXhDb3VudCAqIDIpO1xuICByZXR1cm4geyBjb29yZHMsIG9mZnNldHMsIGNvdW50IH07XG59XG5cbi8qKlxuICogYEdFVCAvcG9seWdvbi10aWxlLy4uLmAg4oaSIG9uZSB0aWxlIG9mIHJpbmdzIHdpdGggdGhlaXIgb3duaW5nIG9ic2VydmF0aW9ucy4gTGF5b3V0XG4gKiBgW3UzMiBjb3VudF1bdTMyIG9icyDDlyBjb3VudF1bdTMyIG9mZnNldHMgw5cgKGNvdW50KzEpXVtmMzIgY29vcmRzIMOXIDLCt29mZnNldHNbY291bnRdXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQb2x5Z29uVGlsZShidWY6IEFycmF5QnVmZmVyKTogU3BhdGlhbFBvbHlnb25UaWxlIHtcbiAgYXNzZXJ0TGl0dGxlRW5kaWFuKCk7XG4gIGlmIChidWYuYnl0ZUxlbmd0aCA8IDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcGF0aWFsXSBwb2x5Z29uIHRpbGU6IHJlc3BvbnNlIHRvbyBzaG9ydCBmb3IgYSBoZWFkZXInKTtcbiAgfVxuICBjb25zdCBjb3VudCA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDEpWzBdO1xuICBjb25zdCBvYnNlcnZhdGlvbiA9IG5ldyBVaW50MzJBcnJheShidWYsIDQsIGNvdW50KTtcbiAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBVaW50MzJBcnJheShidWYsIDQgKyBjb3VudCAqIDQsIGNvdW50ICsgMSk7XG4gIGNvbnN0IHZlcnRleENvdW50ID0gb2Zmc2V0c1tjb3VudF07XG4gIGNvbnN0IGNvb3Jkc0J5dGVPZmZzZXQgPSA0ICsgY291bnQgKiA0ICsgKGNvdW50ICsgMSkgKiA0O1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgY29vcmRzQnl0ZU9mZnNldCArIHZlcnRleENvdW50ICogOCwgJ3BvbHlnb24gdGlsZScpO1xuICByZXR1cm4ge1xuICAgIGNvdW50LCBvYnNlcnZhdGlvbiwgb2Zmc2V0cyxcbiAgICBjb29yZHM6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCBjb29yZHNCeXRlT2Zmc2V0LCB2ZXJ0ZXhDb3VudCAqIDIpLFxuICB9O1xufVxuXG4vKipcbiAqIGBHRVQgL3RyYW5zY3JpcHQtdGlsZS8uLi5gIOKGkiB0cmFuc2NyaXB0cyBvciBhZ2dyZWdhdGVzLiBMYXlvdXQsIDQtYnl0ZSBhbGlnbmVkOlxuICogYFt1MzIgbl1bdTMyIGZsYWdzXVtmMzIgeMK3bl1bZjMyIHnCt25dW2YzMiB6wrduXVt1MzIgd2VpZ2h0wrduXVt1MzIgb2JzwrduXVt1MTYgZ2VuZcK3biwgcGFkZGVkXWA7XG4gKiBmbGFncyBiaXQgMCBtYXJrcyBhbiBhZ2dyZWdhdGVkIGxldmVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVHJhbnNjcmlwdFRpbGUoYnVmOiBBcnJheUJ1ZmZlcik6IFNwYXRpYWxUcmFuc2NyaXB0VGlsZSB7XG4gIGFzc2VydExpdHRsZUVuZGlhbigpO1xuICBpZiAoYnVmLmJ5dGVMZW5ndGggPCA4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbc3BhdGlhbF0gdHJhbnNjcmlwdCB0aWxlOiByZXNwb25zZSB0b28gc2hvcnQgZm9yIGEgaGVhZGVyJyk7XG4gIH1cbiAgY29uc3QgW24sIGZsYWdzXSA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDIpO1xuICBjb25zdCBnZW5lUGFkID0gTWF0aC5jZWlsKChuICogMikgLyA0KSAqIDQ7XG4gIGFzc2VydEJ5dGVMZW5ndGgoYnVmLCA4ICsgbiAqIDIwICsgZ2VuZVBhZCwgJ3RyYW5zY3JpcHQgdGlsZScpO1xuICByZXR1cm4ge1xuICAgIGNvdW50OiBuLFxuICAgIGFnZ3JlZ2F0ZWQ6IChmbGFncyAmIDEpID09PSAxLFxuICAgIHg6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCA4LCBuKSxcbiAgICB5OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgOCArIG4gKiA0LCBuKSxcbiAgICB6OiBuZXcgRmxvYXQzMkFycmF5KGJ1ZiwgOCArIG4gKiA4LCBuKSxcbiAgICB3ZWlnaHQ6IG5ldyBVaW50MzJBcnJheShidWYsIDggKyBuICogMTIsIG4pLFxuICAgIG9ic2VydmF0aW9uOiBuZXcgVWludDMyQXJyYXkoYnVmLCA4ICsgbiAqIDE2LCBuKSxcbiAgICBnZW5lOiBuZXcgVWludDE2QXJyYXkoYnVmLCA4ICsgbiAqIDIwLCBuKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgR0VUIC9kZW5zaXR5P2dlbmVzPSZiaW49YCDihpIgdGhlIHN1bW1lZCByYXN0ZXIuIExheW91dFxuICogYFt1MzIgcm93c11bdTMyIGNvbHNdW2YzMiBjZWxsV11bZjMyIGNlbGxIXVtmMzIgb3JpZ2luWF1bZjMyIG9yaWdpblldW2YzMiByb3dzwrdjb2xzXWA6XG4gKiB0aGUgZ2VvbWV0cnkgdHJhdmVscyB3aXRoIHRoZSB2YWx1ZXMgYmVjYXVzZSByZS1iaW5uaW5nIGNoYW5nZXMgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVEZW5zaXR5KGJ1ZjogQXJyYXlCdWZmZXIsIGdlbmVzOiBzdHJpbmdbXSk6IFNwYXRpYWxEZW5zaXR5UmFzdGVyIHtcbiAgYXNzZXJ0TGl0dGxlRW5kaWFuKCk7XG4gIGlmIChidWYuYnl0ZUxlbmd0aCA8IDI0KSB0aHJvdyBuZXcgRXJyb3IoJ1tzcGF0aWFsXSBkZW5zaXR5OiByZXNwb25zZSB0b28gc2hvcnQgZm9yIGEgaGVhZGVyJyk7XG4gIGNvbnN0IFtyb3dzLCBjb2xzXSA9IG5ldyBVaW50MzJBcnJheShidWYsIDAsIDIpO1xuICBjb25zdCBbY3csIGNoLCBveCwgb3ldID0gbmV3IEZsb2F0MzJBcnJheShidWYsIDgsIDQpO1xuICBhc3NlcnRCeXRlTGVuZ3RoKGJ1ZiwgMjQgKyByb3dzICogY29scyAqIDQsICdkZW5zaXR5Jyk7XG4gIGNvbnN0IG1ldGE6IFNwYXRpYWxEZW5zaXR5TWV0YSA9IHsgcm93cywgY29scywgZ3JpZFNpemU6IFtjdywgY2hdLCBvcmlnaW46IFtveCwgb3ldIH07XG4gIHJldHVybiB7IG1ldGEsIGdlbmVzLCB2YWx1ZXM6IG5ldyBGbG9hdDMyQXJyYXkoYnVmLCAyNCwgcm93cyAqIGNvbHMpIH07XG59XG5cbi8qKlxuICogRm9sZCBhIG1hbmlmZXN0IHBsdXMgaXRzIGZldGNoZWQgY29vcmRpbmF0ZS9pZC9yYWRpdXMgdmVjdG9ycyBpbnRvIHRoZVxuICogbGlicmFyeS1mYWNpbmcge0BsaW5rIFNwYXRpYWxEYXRhc2V0fS4gQ29sdW1uIGFuZCBmZWF0dXJlICp2YWx1ZXMqIGFyZSBub3RcbiAqIHBhcnQgb2YgdGhpcyDigJQgdGhleSBzdGF5IGxhenkgYmVoaW5kIHRoZSBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YXNldEZyb21NYW5pZmVzdChcbiAgbWFuaWZlc3Q6IFNwYXRpYWxNYW5pZmVzdCxcbiAgY29vcmRzOiBQaWNrPFNwYXRpYWxPYnNlcnZhdGlvbnMsICd4JyB8ICd5JyB8ICd6Jz4sXG4gIGV4dHJhczogeyBpZHM/OiBzdHJpbmdbXTsgcmFkaXVzPzogRmxvYXQzMkFycmF5IH0gPSB7fSxcbik6IFNwYXRpYWxEYXRhc2V0IHtcbiAgYXNzZXJ0TWFuaWZlc3RWZXJzaW9uKG1hbmlmZXN0KTtcbiAgY29uc3QgcmFkaXVzID0gbWFuaWZlc3QucmFkaXVzPy5tb2RlID09PSAndW5pZm9ybSdcbiAgICA/IG1hbmlmZXN0LnJhZGl1cy52YWx1ZVxuICAgIDogZXh0cmFzLnJhZGl1cztcbiAgY29uc3Qgb2JzZXJ2YXRpb25zOiBTcGF0aWFsT2JzZXJ2YXRpb25zID0ge1xuICAgIGNvdW50OiBtYW5pZmVzdC5jb3VudCxcbiAgICB4OiBjb29yZHMueCxcbiAgICB5OiBjb29yZHMueSxcbiAgICAuLi4oY29vcmRzLnogPyB7IHo6IGNvb3Jkcy56IH0gOiB7fSksXG4gICAgLi4uKGV4dHJhcy5pZHMgPyB7IGlkczogZXh0cmFzLmlkcyB9IDoge30pLFxuICAgIC4uLihyYWRpdXMgIT09IHVuZGVmaW5lZCA/IHsgcmFkaXVzIH0gOiB7fSksXG4gIH07XG4gIHJldHVybiB7XG4gICAgaWQ6IG1hbmlmZXN0LmlkLFxuICAgIG5hbWU6IG1hbmlmZXN0Lm5hbWUsXG4gICAgb2JzZXJ2YXRpb25zLFxuICAgIGNvbHVtbnM6IG1hbmlmZXN0LmNvbHVtbnMgPz8gW10sXG4gICAgLi4uKG1hbmlmZXN0LmZlYXR1cmVzID8geyBmZWF0dXJlczogbWFuaWZlc3QuZmVhdHVyZXMgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QucG9seWdvbnMgPyB7IHBvbHlnb25zOiBtYW5pZmVzdC5wb2x5Z29ucyB9IDoge30pLFxuICAgIC4uLihtYW5pZmVzdC5pbWFnZVJlZiA/IHsgaW1hZ2VSZWY6IG1hbmlmZXN0LmltYWdlUmVmIH0gOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0LnZvbHVtZSA/IHsgdm9sdW1lOiBtYW5pZmVzdC52b2x1bWUgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QuZW1iZWRkaW5ncz8ubGVuZ3RoID8geyBlbWJlZGRpbmdzOiBtYW5pZmVzdC5lbWJlZGRpbmdzIH0gOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0Lm1pY3JvbnNQZXJVbml0ICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBtaWNyb25zUGVyVW5pdDogbWFuaWZlc3QubWljcm9uc1BlclVuaXQgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0LnBvbHlnb25UaWxlcyA/IHsgcG9seWdvblRpbGVzOiBtYW5pZmVzdC5wb2x5Z29uVGlsZXMgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QudHJhbnNjcmlwdFRpbGVzID8geyB0cmFuc2NyaXB0VGlsZXM6IG1hbmlmZXN0LnRyYW5zY3JpcHRUaWxlcyB9IDoge30pLFxuICAgIC4uLihtYW5pZmVzdC5kZW5zaXR5ID8geyBkZW5zaXR5OiBtYW5pZmVzdC5kZW5zaXR5IH0gOiB7fSksXG4gICAgLi4uKG1hbmlmZXN0LnRyYW5zY3JpcHRCaW5zID8geyB0cmFuc2NyaXB0QmluczogbWFuaWZlc3QudHJhbnNjcmlwdEJpbnMgfSA6IHt9KSxcbiAgICAuLi4obWFuaWZlc3QudHJhbnNjcmlwdEdlbmVCaW5zID8geyB0cmFuc2NyaXB0R2VuZUJpbnM6IG1hbmlmZXN0LnRyYW5zY3JpcHRHZW5lQmlucyB9IDoge30pLFxuICAgIC4uLihtYW5pZmVzdC50cmFuc2NyaXB0Qmluc1N0YXR1cyA/IHsgdHJhbnNjcmlwdEJpbnNTdGF0dXM6IG1hbmlmZXN0LnRyYW5zY3JpcHRCaW5zU3RhdHVzIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
|