@dereekb/dbx-web 9.6.0 → 9.6.3

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.
@@ -1,6 +1,6 @@
1
1
  import { cleanup, filterMaybe, onTrueToFalse } from '@dereekb/rxjs';
2
2
  import { Inject, Injectable } from '@angular/core';
3
- import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction, diffLatLngBoundPoints, latLngBoundCenterPoint, addLatLngPoints } from '@dereekb/util';
3
+ import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction, diffLatLngBoundPoints, latLngBoundCenterPoint, addLatLngPoints, isDefaultLatLngPoint, swMostLatLngPoint, neMostLatLngPoint, latLngBoundWrapsMap } from '@dereekb/util';
4
4
  import { ComponentStore } from '@ngrx/component-store';
5
5
  import { defaultIfEmpty, distinctUntilChanged, filter, map, shareReplay, switchMap, tap, NEVER, of, startWith, interval, first, combineLatest } from 'rxjs';
6
6
  import * as MapboxGl from 'mapbox-gl';
@@ -21,7 +21,7 @@ export class DbxMapboxMapStore extends ComponentStore {
21
21
  });
22
22
  this.dbxMapboxService = dbxMapboxService;
23
23
  this.latLngPoint = latLngPointFunction();
24
- this.latLngBound = latLngBoundFunction();
24
+ this.latLngBound = latLngBoundFunction({ pointFunction: latLngPointFunction({ wrap: false, validate: false }) });
25
25
  // MARK: Effects
26
26
  this.setMapService = this.effect((input) => {
27
27
  return input.pipe(switchMap((service) => {
@@ -262,17 +262,41 @@ export class DbxMapboxMapStore extends ComponentStore {
262
262
  this.isRotating$ = this.whenInitialized$.pipe(switchMap(() => this.rotateState$.pipe(map((x) => x === 'rotating'), distinctUntilChanged(), shareReplay())));
263
263
  this._movingTimer = this.movingTimer();
264
264
  this._renderingTimer = this.lifecycleRenderTimer();
265
- this.centerNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => this.latLngPoint(x.getCenter())))), shareReplay(1))));
265
+ this.centerNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => this.latLngPoint(x.getCenter())))), shareReplay(1))), shareReplay(1));
266
266
  this.center$ = this.whenInitialized$.pipe(switchMap(() => {
267
267
  return this.isMoving$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.centerNow$.pipe(first())), distinctUntilChanged(isSameLatLngPoint), shareReplay(1));
268
+ }), shareReplay(1));
269
+ this.margin$ = this.state$.pipe(map((x) => x.margin), distinctUntilChanged((a, b) => a != null && b != null && a.fullWidth === b.fullWidth && a.leftMargin === b.leftMargin && a.rightMargin === b.rightMargin), shareReplay(1));
270
+ this.reverseMargin$ = this.margin$.pipe(map((x) => {
271
+ if (x) {
272
+ return { leftMargin: -x.leftMargin, rightMargin: -x.rightMargin, fullWidth: x.fullWidth };
273
+ }
274
+ else {
275
+ return x;
276
+ }
268
277
  }));
278
+ this.centerGivenMargin$ = this.whenInitialized$.pipe(switchMap(() => {
279
+ return this.reverseMargin$.pipe(switchMap((x) => {
280
+ if (x) {
281
+ return this.center$.pipe(switchMap((_) => this.calculateNextCenterOffsetWithScreenMarginChange(x)));
282
+ }
283
+ else {
284
+ return this.isMoving$.pipe(filter((x) => !x), switchMap(() => this.center$));
285
+ }
286
+ }));
287
+ }), shareReplay(1));
269
288
  this.boundNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => {
270
289
  const bound = x.getBounds();
271
- return this.latLngBound([bound.getSouthWest(), bound.getNorthEast()]);
290
+ const boundSw = bound.getSouthWest();
291
+ const boundNe = bound.getNorthEast();
292
+ const sw = isDefaultLatLngPoint(boundSw) ? swMostLatLngPoint() : boundSw;
293
+ const ne = isDefaultLatLngPoint(boundNe) ? neMostLatLngPoint() : boundNe;
294
+ return this.latLngBound(sw, ne);
272
295
  }))), shareReplay(1))));
273
296
  this.bound$ = this.whenInitialized$.pipe(switchMap(() => {
274
297
  return this.isRendering$.pipe(onTrueToFalse(), startWith(undefined), switchMap((x) => this.boundNow$.pipe(first())), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
275
298
  }));
299
+ this.boundWrapsAroundWorld$ = this.bound$.pipe(map((x) => latLngBoundWrapsMap(x)), distinctUntilChanged(), shareReplay(1));
276
300
  this.isWithinBoundFunction$ = this.bound$.pipe(map((x) => isWithinLatLngBoundFunction(x)), shareReplay(1));
277
301
  this.overlapsBoundFunction$ = this.bound$.pipe(map((x) => overlapsLatLngBoundFunction(x)), shareReplay(1));
278
302
  this.zoomNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => x.getZoom()))), shareReplay(1))));
@@ -293,6 +317,7 @@ export class DbxMapboxMapStore extends ComponentStore {
293
317
  this.doubleClickEvent$ = this.state$.pipe(map((x) => x.doubleClickEvent), distinctUntilChanged(), shareReplay(1));
294
318
  this.rightClickEvent$ = this.state$.pipe(map((x) => x.rightClickEvent), distinctUntilChanged(), shareReplay(1));
295
319
  // MARK: State Changes
320
+ this.setMargin = this.updater((state, margin) => ({ ...state, margin: margin && (margin.rightMargin !== 0 || margin.leftMargin !== 0) ? margin : undefined }));
296
321
  this._setMapService = this.updater((state, mapService) => ({ mapService, moveState: 'init', lifecycleState: 'init', zoomState: 'init', rotateState: 'init', retainContent: state.retainContent, content: state.retainContent ? state.content : undefined }));
297
322
  this._setLifecycleState = this.updater((state, lifecycleState) => ({ ...state, lifecycleState }));
298
323
  this._setMoveState = this.updater((state, moveState) => ({ ...state, moveState }));
@@ -343,23 +368,22 @@ export class DbxMapboxMapStore extends ComponentStore {
343
368
  }))));
344
369
  }
345
370
  calculateNextCenterOffsetWithScreenMarginChange(sizing) {
346
- return this.atNextIdle().pipe(switchMap(() => this.bound$.pipe((first(),
347
- map((bounds) => {
348
- const diff = diffLatLngBoundPoints(bounds);
349
- const center = latLngBoundCenterPoint(bounds);
350
- const offsetWidth = sizing.leftMargin + sizing.rightMargin; // 300 + 0
351
- const newWidth = sizing.fullWidth - offsetWidth; // 1000 - 300 - 0
352
- const newWidthRatio = newWidth / sizing.fullWidth; // 700 / 1000
353
- const newCenterLongitudeWidth = diff.lng * newWidthRatio; // 70% offset
354
- const effectiveOffset = {
355
- lat: 0,
356
- lng: newCenterLongitudeWidth / 2
357
- };
358
- const newCenter = addLatLngPoints(bounds.sw, effectiveOffset);
359
- newCenter.lat = center.lat; // retain center position
360
- // console.log({ sizing, bounds, effectiveOffset, newWidth, offsetWidth, diff, center, newCenter });
361
- return newCenter;
362
- })))));
371
+ return this.atNextIdle().pipe(switchMap(() => this.bound$.pipe(first(), map((bounds) => {
372
+ const diff = diffLatLngBoundPoints(bounds);
373
+ const center = latLngBoundCenterPoint(bounds);
374
+ const offsetWidth = sizing.leftMargin + sizing.rightMargin; // 300 + 0
375
+ const newWidth = sizing.fullWidth - offsetWidth; // 1000 - 300 - 0
376
+ const newWidthRatio = newWidth / sizing.fullWidth; // 700 / 1000
377
+ const newCenterLongitudeWidth = diff.lng * newWidthRatio; // 70% offset
378
+ const effectiveOffset = {
379
+ lat: 0,
380
+ lng: newCenterLongitudeWidth / 2
381
+ };
382
+ const newCenter = addLatLngPoints(bounds.sw, effectiveOffset);
383
+ newCenter.lat = center.lat; // retain center position
384
+ // console.log({ sizing, bounds, effectiveOffset, newWidth, offsetWidth, diff, center, newCenter });
385
+ return newCenter;
386
+ }))));
363
387
  }
364
388
  }
365
389
  DbxMapboxMapStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapStore, deps: [{ token: DbxMapboxService }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -370,4 +394,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
370
394
  type: Inject,
371
395
  args: [DbxMapboxService]
372
396
  }] }]; } });
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdFYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFnQixTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEwsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQTZEcEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBbUM7SUFJeEUsWUFBdUQsZ0JBQWtDO1FBQ3ZGLEtBQUssQ0FBQztZQUNKLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztR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LE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVU7Z0JBQ3RFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUMsaUJBQWlCO2dCQUNsRSxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWE7Z0JBQ2hFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxhQUFhO2dCQUV2RSxNQUFNLGVBQWUsR0FBZ0I7b0JBQ25DLEdBQUcsRUFBRSxDQUFDO29CQUNOLEdBQUcsRUFBRSx1QkFBdUIsR0FBRyxDQUFDO2lCQUNqQyxDQUFDO2dCQUVGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM5RCxTQUFTLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyx5QkFBeUI7Z0JBRXJELG9HQUFvRztnQkFFcEcsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7OzhHQWxaVSxpQkFBaUIsa0JBSVIsZ0JBQWdCO2tIQUp6QixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBS0ksTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhbnVwLCBmaWx0ZXJNYXliZSwgb25UcnVlVG9GYWxzZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzU2FtZUxhdExuZ0JvdW5kLCBpc1NhbWVMYXRMbmdQb2ludCwgSXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLCBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sIExhdExuZ0JvdW5kLCBsYXRMbmdCb3VuZEZ1bmN0aW9uLCBMYXRMbmdQb2ludElucHV0LCBMYXRMbmdQb2ludCwgbGF0TG5nUG9pbnRGdW5jdGlvbiwgTWF5YmUsIE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbiwgb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLCBkaWZmTGF0TG5nQm91bmRQb2ludHMsIGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQsIGFkZExhdExuZ1BvaW50cyB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgc3RhcnRXaXRoLCBpbnRlcnZhbCwgZmlyc3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5pbXBvcnQgeyBEYnhNYXBib3hDbGlja0V2ZW50LCBLbm93bk1hcGJveFN0eWxlLCBNYXBib3hCZWFyaW5nLCBNYXBib3hFYXNlVG8sIE1hcGJveEZpdEJvdW5kcywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwgfSBmcm9tICcuL21hcGJveCc7XG5pbXBvcnQgeyBEYnhNYXBib3hTZXJ2aWNlIH0gZnJvbSAnLi9tYXBib3guc2VydmljZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4TWFwYm94U3RvcmVTdGF0ZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IE1hcFNlcnZpY2UgYmVpbmcgdXRpbGl6ZWQuXG4gICAqL1xuICBtYXBTZXJ2aWNlPzogTWF5YmU8TWFwU2VydmljZT47XG4gIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZTtcbiAgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGU7XG4gIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlO1xuICByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGU7XG4gIC8qKlxuICAgKiBMYXRlc3QgY2xpY2sgZXZlbnRcbiAgICovXG4gIGNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBkb3VibGUtY2xpY2sgZXZlbnRcbiAgICovXG4gIGRvdWJsZUNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBjb250ZXh0bWVudSBldmVudC5cbiAgICovXG4gIHJpZ2h0Q2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcmV0YWluIGNvbnRlbnQgYmV0d2VlbiByZXNldHMuXG4gICAqXG4gICAqIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJldGFpbkNvbnRlbnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gY29udGVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY29udGVudD86IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj47XG4gIC8qKlxuICAgKiBMYXRlc3QgZXJyb3JcbiAgICovXG4gIGVycm9yPzogTWF5YmU8RXJyb3I+O1xufVxuXG4vKipcbiAqIFN0b3JlIHVzZWQgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBTdG9yZSBleHRlbmRzIENvbXBvbmVudFN0b3JlPERieE1hcGJveFN0b3JlU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsYXRMbmdQb2ludCA9IGxhdExuZ1BvaW50RnVuY3Rpb24oKTtcbiAgcHJpdmF0ZSBsYXRMbmdCb3VuZCA9IGxhdExuZ0JvdW5kRnVuY3Rpb24oKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERieE1hcGJveFNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGJ4TWFwYm94U2VydmljZTogRGJ4TWFwYm94U2VydmljZSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsXG4gICAgICBtb3ZlU3RhdGU6ICdpbml0JyxcbiAgICAgIHpvb21TdGF0ZTogJ2luaXQnLFxuICAgICAgcm90YXRlU3RhdGU6ICdpbml0JyxcbiAgICAgIHJldGFpbkNvbnRlbnQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKHgpID0+IHRoaXMuX3NldFJpZ2h0Q2xpY2tFdmVudCh4KSk7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJQYWlycyxcbiAgICAgICAgICAgICAgICBzdWJzXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2xlYW51cCgoeyBzZXJ2aWNlLCBsaXN0ZW5lclBhaXJzLCBzdWJzIH0pID0+IHtcbiAgICAgICAgY29uc3QgbWFwID0gc2VydmljZS5tYXBJbnN0YW5jZTtcblxuICAgICAgICBpZiAobWFwKSB7XG4gICAgICAgICAgbGlzdGVuZXJQYWlycy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICBtYXAub2ZmKHgudHlwZSwgeC5saXN0ZW5lcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRTdHlsZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hTdHlsZUNvbmZpZyB8IEtub3duTWFwYm94U3R5bGUgfCBzdHJpbmc+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHN0eWxlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNldFN0eWxlKHN0eWxlLnN0eWxlLCBzdHlsZS5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRDZW50ZXIgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnRJbnB1dD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY2VudGVyOiBMYXRMbmdQb2ludElucHV0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gdGhpcy5sYXRMbmdQb2ludChjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldENlbnRlcihjZW50ZXJQb2ludCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWluWm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWF4Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1heFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0S2V5Ym9hcmREaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmtleWJvYXJkLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLmtleWJvYXJkLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXREcmFnUm90YXRlRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUm90YXRlLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdQYW5EaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdQYW4uZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbURpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0UGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwaXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5QaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNaW5QaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWF4UGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwaXRjaDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldEJlYXJpbmcgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChiZWFyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0QmVhcmluZyhiZWFyaW5nKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByb3RhdGVUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hCZWFyaW5nIHwgTWFwYm94Um90YXRlVG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJvdGF0ZUlucHV0OiBNYXBib3hCZWFyaW5nIHwgTWFwYm94Um90YXRlVG8pID0+IHtcbiAgICAgICAgY29uc3Qgcm90YXRlOiBNYXBib3hSb3RhdGVUbyA9IHR5cGVvZiByb3RhdGVJbnB1dCA9PT0gJ251bWJlcicgPyB7IGJlYXJpbmc6IHJvdGF0ZUlucHV0IH0gOiByb3RhdGVJbnB1dDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yb3RhdGVUbyhyb3RhdGUuYmVhcmluZywgcm90YXRlLm9wdGlvbnMsIHJvdGF0ZT8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldE5vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGg+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzZXQ6IE1heWJlPE1hcGJveFJlc2V0Tm9ydGg+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJlc2V0Tm9ydGgocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hSZXNldE5vcnRoUGl0Y2g+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzZXQ6IE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aFBpdGNoKHJlc2V0Py5vcHRpb25zLCByZXNldD8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzbmFwVG9Ob3J0aCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hTbmFwVG9Ob3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChzbmFwOiBNYXliZTxNYXBib3hTbmFwVG9Ob3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc25hcFRvTm9ydGgoc25hcD8ub3B0aW9ucywgc25hcD8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBmaXRCb3VuZHMgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Rml0Qm91bmRzPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdW5kID0gdGhpcy5sYXRMbmdCb3VuZCh4LmJvdW5kcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZml0Qm91bmRzKG5ldyBNYXBib3hHbC5MbmdMYXRCb3VuZHMoYm91bmQuc3csIGJvdW5kLm5lKSwgeC5vcHRpb25zLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkganVtcFRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEp1bXBUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLmxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5qdW1wVG8oeyAuLi54LnRvLCBjZW50ZXIgfSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVhc2VUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hFYXNlVG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRDZW50ZXIgPSB4LmNlbnRlciA/PyB4LnRvPy5jZW50ZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGlucHV0Q2VudGVyID8gdGhpcy5sYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZWFzZVRvKHsgLi4ueC50bywgY2VudGVyIH0sIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBmbHlUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGbHlUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLmxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5mbHlUbyh7IC4uLngudG8sIGNlbnRlciB9LCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXRQaXRjaEFuZEJlYXJpbmcgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0UGl0Y2goMCk7XG4gICAgICAgICAgICBtYXAuc2V0QmVhcmluZygwKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICAvLyBNQVJLOiBBY2Nlc3NvcnNcbiAgZ2V0IHRpbWVyUmVmcmVzaFBlcmlvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYnhNYXBib3hTZXJ2aWNlLm1hcGJveE1hcFN0b3JlVGltZXJSZWZyZXNoUGVyaW9kO1xuICB9XG5cbiAgbW92aW5nVGltZXIocGVyaW9kID0gdGhpcy50aW1lclJlZnJlc2hQZXJpb2QpIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgaWYgKHggPT09ICdtb3ZpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludGVydmFsKHBlcmlvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKDApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KClcbiAgICApO1xuICB9XG5cbiAgbGlmZWN5Y2xlUmVuZGVyVGltZXIocGVyaW9kID0gdGhpcy50aW1lclJlZnJlc2hQZXJpb2QpIHtcbiAgICByZXR1cm4gdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cblxuICBhdE5leHRJZGxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlTmV4dENlbnRlcldpdGhPZmZzZXQoaW5wdXRPZmZzZXQ6IExhdExuZ1BvaW50SW5wdXQpOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5sYXRMbmdQb2ludChpbnB1dE9mZnNldCk7XG5cbiAgICByZXR1cm4gdGhpcy5hdE5leHRJZGxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLmNlbnRlciQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoY2VudGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSB7XG4gICAgICAgICAgICAgIGxhdDogb2Zmc2V0LmxhdCArIGNlbnRlci5sYXQsXG4gICAgICAgICAgICAgIGxuZzogb2Zmc2V0LmxuZyArIGNlbnRlci5sbmdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VudGVyO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlTmV4dENlbnRlck9mZnNldFdpdGhTY3JlZW5NYXJnaW5DaGFuZ2Uoc2l6aW5nOiBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyk6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdE5leHRJZGxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLmJvdW5kJC5waXBlKFxuICAgICAgICAgIChmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoYm91bmRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gZGlmZkxhdExuZ0JvdW5kUG9pbnRzKGJvdW5kcyk7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBsYXRMbmdCb3VuZENlbnRlclBvaW50KGJvdW5kcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gc2l6aW5nLmxlZnRNYXJnaW4gKyBzaXppbmcucmlnaHRNYXJnaW47IC8vIDMwMCArIDBcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gc2l6aW5nLmZ1bGxXaWR0aCAtIG9mZnNldFdpZHRoOyAvLyAxMDAwIC0gMzAwIC0gMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGhSYXRpbyA9IG5ld1dpZHRoIC8gc2l6aW5nLmZ1bGxXaWR0aDsgLy8gNzAwIC8gMTAwMFxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggPSBkaWZmLmxuZyAqIG5ld1dpZHRoUmF0aW87IC8vIDcwJSBvZmZzZXRcblxuICAgICAgICAgICAgY29uc3QgZWZmZWN0aXZlT2Zmc2V0OiBMYXRMbmdQb2ludCA9IHtcbiAgICAgICAgICAgICAgbGF0OiAwLFxuICAgICAgICAgICAgICBsbmc6IG5ld0NlbnRlckxvbmdpdHVkZVdpZHRoIC8gMlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gYWRkTGF0TG5nUG9pbnRzKGJvdW5kcy5zdywgZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICAgICAgICAgIG5ld0NlbnRlci5sYXQgPSBjZW50ZXIubGF0OyAvLyByZXRhaW4gY2VudGVyIHBvc2l0aW9uXG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgc2l6aW5nLCBib3VuZHMsIGVmZmVjdGl2ZU9mZnNldCwgbmV3V2lkdGgsIG9mZnNldFdpZHRoLCBkaWZmLCBjZW50ZXIsIG5ld0NlbnRlciB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBjdXJyZW50TWFwU2VydmljZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBTZXJ2aWNlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwU2VydmljZSQgPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94R2wuTWFwPj4gPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY3VycmVudE1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1hcFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXBTZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjdXJyZW50TWFwU2VydmljZS5tYXBJbnN0YW5jZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBJbnN0YW5jZSQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBtb3ZlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubW92ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubGlmZWN5Y2xlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguem9vbVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcm90YXRlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucm90YXRlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKCF4KSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5tb3ZlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKSwgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpXSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKFttLCBsXSkgPT4gbSAmJiBsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgd2hlbkluaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHRydWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSZW5kZXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyZW5kZXInKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc01vdmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdtb3ZpbmcnKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc1pvb21pbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnpvb21TdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnem9vbWluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUm90YXRpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnJvdGF0ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyb3RhdGluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdmluZ1RpbWVyID0gdGhpcy5tb3ZpbmdUaW1lcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJpbmdUaW1lciA9IHRoaXMubGlmZWN5Y2xlUmVuZGVyVGltZXIoKTtcblxuICByZWFkb25seSBjZW50ZXJOb3ckOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB0aGlzLmxhdExuZ1BvaW50KHguZ2V0Q2VudGVyKCkpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBjZW50ZXIkOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2VudGVyTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nUG9pbnQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kTm93JDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmQgPSB4LmdldEJvdW5kcygpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRMbmdCb3VuZChbYm91bmQuZ2V0U291dGhXZXN0KCksIGJvdW5kLmdldE5vcnRoRWFzdCgpXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmQkOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JlbmRlcmluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLmJvdW5kTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nQm91bmQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGlzV2l0aGluQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8SXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgb3ZlcmxhcHNCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tTm93JDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0Wm9vbSgpIGFzIE1hcGJveFpvb21MZXZlbCkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbSQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1pvb21pbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy56b29tTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBwaXRjaE5vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRQaXRjaCgpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBwaXRjaCQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLnBpdGNoTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldEJlYXJpbmcoKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgYmVhcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLmJlYXJpbmdOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY29udGVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc0NvbnRlbnQkID0gdGhpcy5jb250ZW50JC5waXBlKG1hcChCb29sZWFuKSk7XG5cbiAgcmVhZG9ubHkgY2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG91YmxlQ2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5kb3VibGVDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmlnaHRDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnJpZ2h0Q2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwU2VydmljZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiAoeyBtYXBTZXJ2aWNlLCBtb3ZlU3RhdGU6ICdpbml0JywgbGlmZWN5Y2xlU3RhdGU6ICdpbml0Jywgem9vbVN0YXRlOiAnaW5pdCcsIHJvdGF0ZVN0YXRlOiAnaW5pdCcsIHJldGFpbkNvbnRlbnQ6IHN0YXRlLnJldGFpbkNvbnRlbnQsIGNvbnRlbnQ6IHN0YXRlLnJldGFpbkNvbnRlbnQgPyBzdGF0ZS5jb250ZW50IDogdW5kZWZpbmVkIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TGlmZWN5Y2xlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBsaWZlY3ljbGVTdGF0ZTogTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBsaWZlY3ljbGVTdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1vdmVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1vdmVTdGF0ZTogTWFwYm94TWFwTW92ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgbW92ZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Wm9vbVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGUpID0+ICh7IC4uLnN0YXRlLCB6b29tU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSb3RhdGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHJvdGF0ZVN0YXRlIH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIGNsaWNrRXZlbnQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXREb3VibGVDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZG91YmxlQ2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSaWdodENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByaWdodENsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCByaWdodENsaWNrRXZlbnQgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldEVycm9yID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZXJyb3I6IEVycm9yKSA9PiAoeyAuLi5zdGF0ZSwgZXJyb3IgfSkpO1xuXG4gIHJlYWRvbmx5IGNsZWFyQ29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+ICh7IC4uLnN0YXRlLCBjb250ZW50OiB1bmRlZmluZWQgfSkpO1xuICByZWFkb25seSBzZXRDb250ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY29udGVudDogTWF5YmU8RGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnPHVua25vd24+PikgPT4gKHsgLi4uc3RhdGUsIGNvbnRlbnQgfSkpO1xufVxuIl19
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdmEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFnQixTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEwsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQWlFcEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBbUM7SUFJeEUsWUFBdUQsZ0JBQWtDO1FBQ3ZGLEtBQUssQ0FBQztZQUNKLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcs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LElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVTtZQUN0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLGlCQUFpQjtZQUNsRSxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWE7WUFDaEUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxDQUFDLGFBQWE7WUFFdkUsTUFBTSxlQUFlLEdBQWdCO2dCQUNuQyxHQUFHLEVBQUUsQ0FBQztnQkFDTixHQUFHLEVBQUUsdUJBQXVCLEdBQUcsQ0FBQzthQUNqQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDOUQsU0FBUyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMseUJBQXlCO1lBRXJELG9HQUFvRztZQUVwRyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7OzhHQWxaVSxpQkFBaUIsa0JBSVIsZ0JBQWdCO2tIQUp6QixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBS0ksTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhbnVwLCBmaWx0ZXJNYXliZSwgb25UcnVlVG9GYWxzZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzU2FtZUxhdExuZ0JvdW5kLCBpc1NhbWVMYXRMbmdQb2ludCwgSXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLCBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sIExhdExuZ0JvdW5kLCBsYXRMbmdCb3VuZEZ1bmN0aW9uLCBMYXRMbmdQb2ludElucHV0LCBMYXRMbmdQb2ludCwgbGF0TG5nUG9pbnRGdW5jdGlvbiwgTWF5YmUsIE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbiwgb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLCBkaWZmTGF0TG5nQm91bmRQb2ludHMsIGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQsIGFkZExhdExuZ1BvaW50cywgaXNEZWZhdWx0TGF0TG5nUG9pbnQsIHN3TW9zdExhdExuZ1BvaW50LCBuZU1vc3RMYXRMbmdQb2ludCwgbGF0TG5nQm91bmRXcmFwc01hcCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgc3RhcnRXaXRoLCBpbnRlcnZhbCwgZmlyc3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5pbXBvcnQgeyBEYnhNYXBib3hDbGlja0V2ZW50LCBLbm93bk1hcGJveFN0eWxlLCBNYXBib3hCZWFyaW5nLCBNYXBib3hFYXNlVG8sIE1hcGJveEZpdEJvdW5kcywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwgfSBmcm9tICcuL21hcGJveCc7XG5pbXBvcnQgeyBEYnhNYXBib3hTZXJ2aWNlIH0gZnJvbSAnLi9tYXBib3guc2VydmljZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4TWFwYm94U3RvcmVTdGF0ZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IE1hcFNlcnZpY2UgYmVpbmcgdXRpbGl6ZWQuXG4gICAqL1xuICBtYXBTZXJ2aWNlPzogTWF5YmU8TWFwU2VydmljZT47XG4gIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZTtcbiAgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGU7XG4gIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlO1xuICByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGU7XG4gIC8qKlxuICAgKiBMYXRlc3QgY2xpY2sgZXZlbnRcbiAgICovXG4gIGNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBkb3VibGUtY2xpY2sgZXZlbnRcbiAgICovXG4gIGRvdWJsZUNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBjb250ZXh0bWVudSBldmVudC5cbiAgICovXG4gIHJpZ2h0Q2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcmV0YWluIGNvbnRlbnQgYmV0d2VlbiByZXNldHMuXG4gICAqXG4gICAqIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJldGFpbkNvbnRlbnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gY29udGVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY29udGVudD86IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj47XG4gIC8qKlxuICAgKiBMYXRlc3QgZXJyb3JcbiAgICovXG4gIGVycm9yPzogTWF5YmU8RXJyb3I+O1xuICAvKipcbiAgICogTWFwIG1hcmdpbi9vZmZzZXRcbiAgICovXG4gIG1hcmdpbj86IE1heWJlPERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nPjtcbn1cblxuLyoqXG4gKiBTdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWFwU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxEYnhNYXBib3hTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbGF0TG5nUG9pbnQgPSBsYXRMbmdQb2ludEZ1bmN0aW9uKCk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKHsgcG9pbnRGdW5jdGlvbjogbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IGZhbHNlLCB2YWxpZGF0ZTogZmFsc2UgfSkgfSk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChEYnhNYXBib3hTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGRieE1hcGJveFNlcnZpY2U6IERieE1hcGJveFNlcnZpY2UpIHtcbiAgICBzdXBlcih7XG4gICAgICBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLFxuICAgICAgbW92ZVN0YXRlOiAnaW5pdCcsXG4gICAgICB6b29tU3RhdGU6ICdpbml0JyxcbiAgICAgIHJvdGF0ZVN0YXRlOiAnaW5pdCcsXG4gICAgICByZXRhaW5Db250ZW50OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvLyBNQVJLOiBFZmZlY3RzXG4gIHJlYWRvbmx5IHNldE1hcFNlcnZpY2UgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwU2VydmljZT4+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICAgIHRoaXMuX3NldE1hcFNlcnZpY2Uoc2VydmljZSk7XG5cbiAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRNb3ZlU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Wm9vbVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdpZGxlJyk7XG5cbiAgICAgICAgICAgICAgY29uc3QgbWFwID0gc2VydmljZS5tYXBJbnN0YW5jZTtcblxuICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lclBhaXJzOiBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXJbXSA9IFtdO1xuXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBNYXBib3hHbC5NYXBFdmVudFR5cGU+KHR5cGU6IFQsIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZCkge1xuICAgICAgICAgICAgICAgIG1hcC5vbih0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJQYWlycy5wdXNoKHsgdHlwZSwgbGlzdGVuZXIgfSBhcyBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2lkbGUnLCAoKSA9PiB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgnaWRsZScpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3JlbmRlcicsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdyZW5kZXInKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdlcnJvcicsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3IoeC5lcnJvcik7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdtb3Zlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRNb3ZlU3RhdGUoJ21vdmluZycpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVlbmQnLCAoKSA9PiB0aGlzLl9zZXRNb3ZlU3RhdGUoJ2lkbGUnKSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3pvb21zdGFydCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnem9vbWluZycpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3pvb21lbmQnLCAoKSA9PiB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3JvdGF0ZXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Um90YXRlU3RhdGUoJ3JvdGF0aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlZW5kJywgKCkgPT4gdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NsaWNrJywgKHgpID0+IHRoaXMuX3NldENsaWNrRXZlbnQoeCkpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignZGJsY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0RG91YmxlQ2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdjb250ZXh0bWVudScsICh4KSA9PiB0aGlzLl9zZXRSaWdodENsaWNrRXZlbnQoeCkpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVyUGFpcnMsXG4gICAgICAgICAgICAgICAgc3Vic1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNsZWFudXAoKHsgc2VydmljZSwgbGlzdGVuZXJQYWlycywgc3VicyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHNlcnZpY2UubWFwSW5zdGFuY2U7XG5cbiAgICAgICAgaWYgKG1hcCkge1xuICAgICAgICAgIGxpc3RlbmVyUGFpcnMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgbWFwLm9mZih4LnR5cGUsIHgubGlzdGVuZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0U3R5bGUgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94U3R5bGVDb25maWcgfCBLbm93bk1hcGJveFN0eWxlIHwgc3RyaW5nPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChzdHlsZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgbWFwLnNldFN0eWxlKHN0eWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZS5zdHlsZSwgc3R5bGUub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Q2VudGVyID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPExhdExuZ1BvaW50SW5wdXQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNlbnRlcjogTGF0TG5nUG9pbnRJbnB1dCkgPT4ge1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IHRoaXMubGF0TG5nUG9pbnQoY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRDZW50ZXIoY2VudGVyUG9pbnQpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFpvb20gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tOiBNYXBib3hab29tTGV2ZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRab29tKHpvb20pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblpvb20gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tOiBNYXBib3hab29tTGV2ZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNaW5ab29tKHpvb20pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1heFpvb20gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tOiBNYXBib3hab29tTGV2ZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhab29tKHpvb20pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldEtleWJvYXJkRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5rZXlib2FyZC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1JvdGF0ZURpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUm90YXRlLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXREcmFnUGFuRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdQYW4uZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFpvb21EaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZW5hYmxlKCk7XG4gICAgICAgICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20uZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2Nyb2xsWm9vbS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2gpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWluUGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwaXRjaDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluUGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1heFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1heFBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRCZWFyaW5nID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoYmVhcmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldEJlYXJpbmcoYmVhcmluZykpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcm90YXRlVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94QmVhcmluZyB8IE1hcGJveFJvdGF0ZVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyb3RhdGVJbnB1dDogTWFwYm94QmVhcmluZyB8IE1hcGJveFJvdGF0ZVRvKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdGF0ZTogTWFwYm94Um90YXRlVG8gPSB0eXBlb2Ygcm90YXRlSW5wdXQgPT09ICdudW1iZXInID8geyBiZWFyaW5nOiByb3RhdGVJbnB1dCB9IDogcm90YXRlSW5wdXQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucm90YXRlVG8ocm90YXRlLmJlYXJpbmcsIHJvdGF0ZS5vcHRpb25zLCByb3RhdGU/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hSZXNldE5vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc2V0OiBNYXliZTxNYXBib3hSZXNldE5vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoKHJlc2V0Py5vcHRpb25zLCByZXNldD8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldE5vcnRoUGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc2V0OiBNYXliZTxNYXBib3hSZXNldE5vcnRoUGl0Y2g+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJlc2V0Tm9ydGhQaXRjaChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc25hcFRvTm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94U25hcFRvTm9ydGg+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc25hcDogTWF5YmU8TWFwYm94U25hcFRvTm9ydGg+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNuYXBUb05vcnRoKHNuYXA/Lm9wdGlvbnMsIHNuYXA/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZml0Qm91bmRzID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZpdEJvdW5kcz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBib3VuZCA9IHRoaXMubGF0TG5nQm91bmQoeC5ib3VuZHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZpdEJvdW5kcyhuZXcgTWFwYm94R2wuTG5nTGF0Qm91bmRzKGJvdW5kLnN3LCBib3VuZC5uZSksIHgub3B0aW9ucywgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGp1bXBUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hKdW1wVG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRDZW50ZXIgPSB4LmNlbnRlciA/PyB4LnRvPy5jZW50ZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGlucHV0Q2VudGVyID8gdGhpcy5sYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuanVtcFRvKHsgLi4ueC50bywgY2VudGVyIH0sIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBlYXNlVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94RWFzZVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmVhc2VUbyh7IC4uLngudG8sIGNlbnRlciB9LCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmx5VG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Rmx5VG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRDZW50ZXIgPSB4LmNlbnRlciA/PyB4LnRvPy5jZW50ZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGlucHV0Q2VudGVyID8gdGhpcy5sYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZmx5VG8oeyAuLi54LnRvLCBjZW50ZXIgfSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0UGl0Y2hBbmRCZWFyaW5nID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgbWFwLnNldFBpdGNoKDApO1xuICAgICAgICAgICAgbWFwLnNldEJlYXJpbmcoMCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gTUFSSzogQWNjZXNzb3JzXG4gIGdldCB0aW1lclJlZnJlc2hQZXJpb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGJ4TWFwYm94U2VydmljZS5tYXBib3hNYXBTdG9yZVRpbWVyUmVmcmVzaFBlcmlvZDtcbiAgfVxuXG4gIG1vdmluZ1RpbWVyKHBlcmlvZCA9IHRoaXMudGltZXJSZWZyZXNoUGVyaW9kKSB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAnbW92aW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIGxpZmVjeWNsZVJlbmRlclRpbWVyKHBlcmlvZCA9IHRoaXMudGltZXJSZWZyZXNoUGVyaW9kKSB7XG4gICAgcmV0dXJuIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgaWYgKHggPT09ICdyZW5kZXInKSB7XG4gICAgICAgICAgcmV0dXJuIGludGVydmFsKHBlcmlvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKDApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KClcbiAgICApO1xuICB9XG5cbiAgYXROZXh0SWRsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHggPT09ICdpZGxlJyksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJXaXRoT2Zmc2V0KGlucHV0T2Zmc2V0OiBMYXRMbmdQb2ludElucHV0KTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRPZmZzZXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXROZXh0SWRsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5jZW50ZXIkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGNlbnRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0ge1xuICAgICAgICAgICAgICBsYXQ6IG9mZnNldC5sYXQgKyBjZW50ZXIubGF0LFxuICAgICAgICAgICAgICBsbmc6IG9mZnNldC5sbmcgKyBjZW50ZXIubG5nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJPZmZzZXRXaXRoU2NyZWVuTWFyZ2luQ2hhbmdlKHNpemluZzogRGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmcpOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuYXROZXh0SWRsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5ib3VuZCQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoYm91bmRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gZGlmZkxhdExuZ0JvdW5kUG9pbnRzKGJvdW5kcyk7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBsYXRMbmdCb3VuZENlbnRlclBvaW50KGJvdW5kcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gc2l6aW5nLmxlZnRNYXJnaW4gKyBzaXppbmcucmlnaHRNYXJnaW47IC8vIDMwMCArIDBcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gc2l6aW5nLmZ1bGxXaWR0aCAtIG9mZnNldFdpZHRoOyAvLyAxMDAwIC0gMzAwIC0gMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGhSYXRpbyA9IG5ld1dpZHRoIC8gc2l6aW5nLmZ1bGxXaWR0aDsgLy8gNzAwIC8gMTAwMFxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggPSBkaWZmLmxuZyAqIG5ld1dpZHRoUmF0aW87IC8vIDcwJSBvZmZzZXRcblxuICAgICAgICAgICAgY29uc3QgZWZmZWN0aXZlT2Zmc2V0OiBMYXRMbmdQb2ludCA9IHtcbiAgICAgICAgICAgICAgbGF0OiAwLFxuICAgICAgICAgICAgICBsbmc6IG5ld0NlbnRlckxvbmdpdHVkZVdpZHRoIC8gMlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gYWRkTGF0TG5nUG9pbnRzKGJvdW5kcy5zdywgZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICAgICAgICAgIG5ld0NlbnRlci5sYXQgPSBjZW50ZXIubGF0OyAvLyByZXRhaW4gY2VudGVyIHBvc2l0aW9uXG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgc2l6aW5nLCBib3VuZHMsIGVmZmVjdGl2ZU9mZnNldCwgbmV3V2lkdGgsIG9mZnNldFdpZHRoLCBkaWZmLCBjZW50ZXIsIG5ld0NlbnRlciB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBTZXJ2aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcFNlcnZpY2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBTZXJ2aWNlJCA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcEluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hHbC5NYXA+PiA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjdXJyZW50TWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgIGlmIChjdXJyZW50TWFwU2VydmljZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE1hcFNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgbWFwKCgpID0+IGN1cnJlbnRNYXBTZXJ2aWNlLm1hcEluc3RhbmNlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcEluc3RhbmNlJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IG1vdmVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tb3ZlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5saWZlY3ljbGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21TdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC56b29tU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByb3RhdGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yb3RhdGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkID0gdGhpcy5jdXJyZW50TWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBpZiAoIXgpIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdmVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpLCB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSldKS5waXBlKFxuICAgICAgICAgIGZpbHRlcigoW20sIGxdKSA9PiBtICYmIGwpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKCgpID0+IHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB3aGVuSW5pdGlhbGl6ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4gdHJ1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1JlbmRlcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JlbmRlcicpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTW92aW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ21vdmluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSb3RhdGluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMucm90YXRlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JvdGF0aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW92aW5nVGltZXIgPSB0aGlzLm1vdmluZ1RpbWVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmluZ1RpbWVyID0gdGhpcy5saWZlY3ljbGVSZW5kZXJUaW1lcigpO1xuXG4gIHJlYWRvbmx5IGNlbnRlck5vdyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHRoaXMubGF0TG5nUG9pbnQoeC5nZXRDZW50ZXIoKSkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNlbnRlciQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jZW50ZXJOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFyZ2luJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcmdpbiksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGEgIT0gbnVsbCAmJiBiICE9IG51bGwgJiYgYS5mdWxsV2lkdGggPT09IGIuZnVsbFdpZHRoICYmIGEubGVmdE1hcmdpbiA9PT0gYi5sZWZ0TWFyZ2luICYmIGEucmlnaHRNYXJnaW4gPT09IGIucmlnaHRNYXJnaW4pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmV2ZXJzZU1hcmdpbiQgPSB0aGlzLm1hcmdpbiQucGlwZShcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4KSB7XG4gICAgICAgIHJldHVybiB7IGxlZnRNYXJnaW46IC14LmxlZnRNYXJnaW4sIHJpZ2h0TWFyZ2luOiAteC5yaWdodE1hcmdpbiwgZnVsbFdpZHRoOiB4LmZ1bGxXaWR0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBjZW50ZXJHaXZlbk1hcmdpbiQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2VNYXJnaW4kLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXIkLnBpcGUoc3dpdGNoTWFwKChfKSA9PiB0aGlzLmNhbGN1bGF0ZU5leHRDZW50ZXJPZmZzZXRXaXRoU2NyZWVuTWFyZ2luQ2hhbmdlKHgpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICF4KSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2VudGVyJClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kTm93JDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmQgPSB4LmdldEJvdW5kcygpO1xuICAgICAgICAgICAgICBjb25zdCBib3VuZFN3ID0gYm91bmQuZ2V0U291dGhXZXN0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGJvdW5kTmUgPSBib3VuZC5nZXROb3J0aEVhc3QoKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdyA9IGlzRGVmYXVsdExhdExuZ1BvaW50KGJvdW5kU3cpID8gc3dNb3N0TGF0TG5nUG9pbnQoKSA6IGJvdW5kU3c7XG4gICAgICAgICAgICAgIGNvbnN0IG5lID0gaXNEZWZhdWx0TGF0TG5nUG9pbnQoYm91bmROZSkgPyBuZU1vc3RMYXRMbmdQb2ludCgpIDogYm91bmROZTtcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRMbmdCb3VuZChzdywgbmUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSZW5kZXJpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5ib3VuZE5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFdyYXBzQXJvdW5kV29ybGQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGxhdExuZ0JvdW5kV3JhcHNNYXAoeCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1dpdGhpbkJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG92ZXJsYXBzQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8T3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbU5vdyQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFpvb20oKSBhcyBNYXBib3hab29tTGV2ZWwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb20kOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNab29taW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuem9vbU5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgcGl0Y2hOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0UGl0Y2goKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgcGl0Y2gkID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm90YXRpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5waXRjaE5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgYmVhcmluZ05vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRCZWFyaW5nKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm90YXRpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5iZWFyaW5nTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBjb250ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbnRlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNDb250ZW50JCA9IHRoaXMuY29udGVudCQucGlwZShtYXAoQm9vbGVhbikpO1xuXG4gIHJlYWRvbmx5IGNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZG91YmxlQ2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJpZ2h0Q2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yaWdodENsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIHJlYWRvbmx5IHNldE1hcmdpbiA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcmdpbjogTWF5YmU8RGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmc+KSA9PiAoeyAuLi5zdGF0ZSwgbWFyZ2luOiBtYXJnaW4gJiYgKG1hcmdpbi5yaWdodE1hcmdpbiAhPT0gMCB8fCBtYXJnaW4ubGVmdE1hcmdpbiAhPT0gMCkgPyBtYXJnaW4gOiB1bmRlZmluZWQgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1hcFNlcnZpY2UgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXBTZXJ2aWNlOiBNYXliZTxNYXBTZXJ2aWNlPikgPT4gKHsgbWFwU2VydmljZSwgbW92ZVN0YXRlOiAnaW5pdCcsIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsIHpvb21TdGF0ZTogJ2luaXQnLCByb3RhdGVTdGF0ZTogJ2luaXQnLCByZXRhaW5Db250ZW50OiBzdGF0ZS5yZXRhaW5Db250ZW50LCBjb250ZW50OiBzdGF0ZS5yZXRhaW5Db250ZW50ID8gc3RhdGUuY29udGVudCA6IHVuZGVmaW5lZCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldExpZmVjeWNsZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgbGlmZWN5Y2xlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNb3ZlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIG1vdmVTdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFpvb21TdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgem9vbVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Um90YXRlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCByb3RhdGVTdGF0ZSB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBjbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RG91YmxlQ2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBkb3VibGVDbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0UmlnaHRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcmlnaHRDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgcmlnaHRDbGlja0V2ZW50IH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRFcnJvciA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGVycm9yOiBFcnJvcikgPT4gKHsgLi4uc3RhdGUsIGVycm9yIH0pKTtcblxuICByZWFkb25seSBjbGVhckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgY29udGVudDogdW5kZWZpbmVkIH0pKTtcbiAgcmVhZG9ubHkgc2V0Q29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNvbnRlbnQ6IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj4pID0+ICh7IC4uLnN0YXRlLCBjb250ZW50IH0pKTtcbn1cbiJdfQ==