igniteui-angular 18.1.0-beta.1 → 18.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/esm2022/lib/combo/combo.common.mjs +8 -8
  2. package/esm2022/lib/combo/combo.component.mjs +3 -3
  3. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +3 -3
  4. package/esm2022/lib/grids/state-base.directive.mjs +1 -1
  5. package/esm2022/lib/grids/state.directive.mjs +5 -5
  6. package/esm2022/lib/icon/icon.service.mjs +3 -3
  7. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +22 -4
  8. package/esm2022/lib/select/select.component.mjs +8 -8
  9. package/esm2022/lib/services/overlay/overlay.mjs +27 -16
  10. package/esm2022/lib/services/overlay/utilities.mjs +1 -1
  11. package/esm2022/lib/services/public_api.mjs +6 -6
  12. package/esm2022/lib/simple-combo/simple-combo.component.mjs +3 -3
  13. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +3 -3
  14. package/esm2022/lib/tree/tree.component.mjs +5 -5
  15. package/fesm2022/igniteui-angular.mjs +118 -89
  16. package/fesm2022/igniteui-angular.mjs.map +1 -1
  17. package/lib/core/styles/components/stepper/_stepper-theme.scss +7 -7
  18. package/lib/grids/state-base.directive.d.ts +0 -1
  19. package/lib/grids/state.directive.d.ts +4 -3
  20. package/lib/icon/icon.service.d.ts +1 -1
  21. package/lib/navigation-drawer/navigation-drawer.directives.d.ts +21 -3
  22. package/lib/services/overlay/overlay.d.ts +16 -6
  23. package/lib/services/overlay/utilities.d.ts +7 -1
  24. package/lib/services/public_api.d.ts +5 -5
  25. package/package.json +2 -2
  26. package/styles/igniteui-angular-dark.css +1 -1
  27. package/styles/igniteui-angular.css +1 -1
  28. package/styles/igniteui-bootstrap-dark.css +1 -1
  29. package/styles/igniteui-bootstrap-light.css +1 -1
  30. package/styles/igniteui-dark-green.css +1 -1
  31. package/styles/igniteui-fluent-dark-excel.css +1 -1
  32. package/styles/igniteui-fluent-dark-word.css +1 -1
  33. package/styles/igniteui-fluent-dark.css +1 -1
  34. package/styles/igniteui-fluent-light-excel.css +1 -1
  35. package/styles/igniteui-fluent-light-word.css +1 -1
  36. package/styles/igniteui-fluent-light.css +1 -1
  37. package/styles/igniteui-indigo-dark.css +1 -1
  38. package/styles/igniteui-indigo-light.css +1 -1
  39. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  40. package/styles/maps/igniteui-angular.css.map +1 -1
  41. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  42. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  43. package/styles/maps/igniteui-dark-green.css.map +1 -1
  44. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  45. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  46. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  47. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  50. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  51. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -2,6 +2,7 @@ import { DOCUMENT } from '@angular/common';
2
2
  import { createComponent, ElementRef, EventEmitter, Inject, Injectable, ViewContainerRef } from '@angular/core';
3
3
  import { fromEvent, Subject } from 'rxjs';
4
4
  import { filter, takeUntil } from 'rxjs/operators';
5
+ import { fadeIn, fadeOut, scaleInHorLeft, scaleInHorRight, scaleInVerBottom, scaleInVerTop, scaleOutHorLeft, scaleOutHorRight, scaleOutVerBottom, scaleOutVerTop, slideInBottom, slideInTop, slideOutBottom, slideOutTop } from 'igniteui-angular/animations';
5
6
  import { IgxAngularAnimationService } from '../animation/angular-animation-service';
6
7
  import { AutoPositionStrategy } from './position/auto-position-strategy';
7
8
  import { ConnectedPositioningStrategy } from './position/connected-positioning-strategy';
@@ -10,7 +11,6 @@ import { ElasticPositionStrategy } from './position/elastic-position-strategy';
10
11
  import { GlobalPositionStrategy } from './position/global-position-strategy';
11
12
  import { NoOpScrollStrategy } from './scroll/NoOpScrollStrategy';
12
13
  import { AbsolutePosition, HorizontalAlignment, OffsetMode, RelativePosition, RelativePositionStrategy, VerticalAlignment } from './utilities';
13
- import { fadeIn, fadeOut, scaleInHorLeft, scaleInHorRight, scaleInVerBottom, scaleInVerTop, scaleOutHorLeft, scaleOutHorRight, scaleOutVerBottom, scaleOutVerTop, slideInBottom, slideInTop, slideOutBottom, slideOutTop } from 'igniteui-angular/animations';
14
14
  import * as i0 from "@angular/core";
15
15
  import * as i1 from "../../core/utils";
16
16
  /**
@@ -272,17 +272,16 @@ export class IgxOverlayService {
272
272
  return new AutoPositionStrategy(positionSettings);
273
273
  }
274
274
  }
275
- attach(componentOrElement, viewContainerRefOrSettings, moduleRefOrSettings) {
276
- const info = this.getOverlayInfo(componentOrElement, viewContainerRefOrSettings);
275
+ attach(componentOrElement, viewContainerRefOrSettings, settings) {
276
+ const info = this.getOverlayInfo(componentOrElement, viewContainerRefOrSettings, settings);
277
277
  if (!info) {
278
278
  console.warn('Overlay was not able to attach provided component!');
279
279
  return null;
280
280
  }
281
281
  info.id = (this._componentId++).toString();
282
282
  info.visible = false;
283
- const settings = Object.assign({}, this._defaultSettings, this.getUserOverlaySettings(viewContainerRefOrSettings, moduleRefOrSettings));
284
283
  // Emit the contentAppending event before appending the content
285
- const eventArgs = { id: info.id, elementRef: info.elementRef, componentRef: info.componentRef, settings };
284
+ const eventArgs = { id: info.id, elementRef: info.elementRef, componentRef: info.componentRef, settings: info.settings };
286
285
  this.contentAppending.emit(eventArgs);
287
286
  // Append the content to the overlay
288
287
  info.settings = eventArgs.settings;
@@ -475,26 +474,37 @@ export class IgxOverlayService {
475
474
  this.closeDone(info);
476
475
  }
477
476
  }
478
- getUserOverlaySettings(viewContainerRefOrSettings, moduleRefOrSettings) {
479
- let result = moduleRefOrSettings;
480
- if (viewContainerRefOrSettings && !(viewContainerRefOrSettings instanceof ViewContainerRef)) {
481
- result = viewContainerRefOrSettings;
482
- }
483
- return result;
484
- }
485
- getOverlayInfo(component, viewContainerRefOrSettings) {
477
+ /**
478
+ * Creates overlayInfo. Sets the info's `elementRef`, `componentRef`and `settings`. Also
479
+ * initialize info's `ngZone`, `transformX` and `transformY`.
480
+ * @param component ElementRef or Type. If type is provided dynamic component will be created
481
+ * @param viewContainerRefOrSettings (optional): If ElementRef is provided for `component` this
482
+ * parameter is OverlaySettings. Otherwise it could be ViewContainerRef or OverlayCreateSettings and will be
483
+ * used when dynamic component is created.
484
+ * @param settings (optional): OverlaySettings when `ViewContainerRef` is provided.
485
+ * @returns OverlayInfo
486
+ */
487
+ getOverlayInfo(component, viewContainerRefOrSettings, settings) {
486
488
  const info = { ngZone: this._zone, transformX: 0, transformY: 0 };
489
+ let overlaySettings = settings;
487
490
  if (component instanceof ElementRef) {
488
491
  info.elementRef = component;
492
+ overlaySettings = viewContainerRefOrSettings;
489
493
  }
490
494
  else {
491
495
  let dynamicComponent;
492
496
  if (viewContainerRefOrSettings instanceof ViewContainerRef) {
493
- dynamicComponent = viewContainerRefOrSettings.createComponent(component);
497
+ const viewContainerRef = viewContainerRefOrSettings;
498
+ dynamicComponent = viewContainerRef.createComponent(component);
494
499
  }
495
500
  else {
496
501
  const environmentInjector = this._appRef.injector;
497
- dynamicComponent = createComponent(component, { environmentInjector });
502
+ const createSettings = viewContainerRefOrSettings;
503
+ let elementInjector;
504
+ if (createSettings) {
505
+ ({ injector: elementInjector, ...overlaySettings } = createSettings);
506
+ }
507
+ dynamicComponent = createComponent(component, { environmentInjector, elementInjector });
498
508
  this._appRef.attachView(dynamicComponent.hostView);
499
509
  }
500
510
  if (dynamicComponent.onDestroy) {
@@ -509,6 +519,7 @@ export class IgxOverlayService {
509
519
  info.elementRef = { nativeElement: element };
510
520
  info.componentRef = dynamicComponent;
511
521
  }
522
+ info.settings = Object.assign({}, this._defaultSettings, overlaySettings);
512
523
  return info;
513
524
  }
514
525
  placeElementHook(element) {
@@ -828,4 +839,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
828
839
  type: Inject,
829
840
  args: [IgxAngularAnimationService]
830
841
  }] }] });
831
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFHSCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUlWLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUluRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLEVBU1YsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDcEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQW9CLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUVoUjs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBeUYxQixZQUNZLE9BQXVCLEVBQ0wsUUFBYSxFQUMvQixLQUFhLEVBQ1gsWUFBMEIsRUFDTyxnQkFBa0M7UUFKckUsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDTCxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDWCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNPLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE3RmpGOzs7Ozs7O1dBT0c7UUFDSSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFFaEU7Ozs7Ozs7V0FPRztRQUNJLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUVyRDs7Ozs7OztXQU9HO1FBQ0ksWUFBTyxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRTdEOzs7Ozs7O1dBT0c7UUFDSSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFFckQ7Ozs7Ozs7V0FPRztRQUNJLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRS9EOzs7Ozs7O1dBT0c7UUFDSSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRTlEOzs7Ozs7O1dBT0c7UUFDSSxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUVqRSxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFJbEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRzFCLHFCQUFnQixHQUFvQjtZQUN4Qyx1QkFBdUIsRUFBRSxFQUFFO1lBQzNCLGdCQUFnQixFQUFFLElBQUksc0JBQXNCLEVBQUU7WUFDOUMsY0FBYyxFQUFFLElBQUksa0JBQWtCLEVBQUU7WUFDeEMsS0FBSyxFQUFFLElBQUk7WUFDWCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLGFBQWEsRUFBRSxLQUFLO1NBQ3ZCLENBQUM7UUE2WEYsY0FBYztRQUNQLGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFpUU0sb0JBQWUsR0FBRyxDQUFDLEVBQWMsRUFBRSxFQUFFO1lBQ3pDLGtGQUFrRjtZQUNsRiwrQ0FBK0M7WUFDL0MsMEVBQTBFO1lBQzFFLHdGQUF3RjtZQUN4Rix5RkFBeUY7WUFDekYsd0NBQXdDO1lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN0QixPQUFPO2dCQUNYLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQ3BDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDOUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7b0JBQ3JELDRIQUE0SDtvQkFDNUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMzRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDbEYsTUFBTSxhQUFhLEdBQVksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBYyxDQUFDLENBQUMsQ0FBQztvQkFDckYsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDaEIsT0FBTzt3QkFDUCw2RUFBNkU7b0JBQ2pGLENBQUM7eUJBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBdHBCRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FDdkMsUUFBMkIsRUFBRSxNQUErQztRQUM1RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUkseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pILE1BQU0sZUFBZSxHQUFvQjtZQUNyQyxnQkFBZ0IsRUFBRSxRQUFRO1lBQzFCLGNBQWMsRUFBRSxJQUFJLGtCQUFrQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxLQUFLO1lBQ1osbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixNQUFNO1NBQ1QsQ0FBQztRQUNGLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLDZCQUE2QixDQUN2QyxNQUEyQixFQUMzQixRQUEyQixFQUMzQixRQUFtQztRQUVuQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBb0I7WUFDckMsTUFBTTtZQUNOLGdCQUFnQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUM7WUFDekUsY0FBYyxFQUFFLElBQUksa0JBQWtCLEVBQUU7WUFDeEMsS0FBSyxFQUFFLEtBQUs7WUFDWixtQkFBbUIsRUFBRSxJQUFJO1NBQzVCLENBQUM7UUFDRixPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBRU8sTUFBTSxDQUFDLDhCQUE4QixDQUFDLFFBQTBCO1FBQ3BFLElBQUksZ0JBQWtDLENBQUM7UUFDdkMsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNmLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFDeEIsZ0JBQWdCLEdBQUc7b0JBQ2YsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtvQkFDL0MsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDM0MsYUFBYSxFQUFFLGFBQWE7b0JBQzVCLGNBQWMsRUFBRSxjQUFjO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLGdCQUFnQixDQUFDLEdBQUc7Z0JBQ3JCLGdCQUFnQixHQUFHO29CQUNmLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLE1BQU07b0JBQy9DLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLEdBQUc7b0JBQ3hDLGFBQWEsRUFBRSxVQUFVO29CQUN6QixjQUFjLEVBQUUsV0FBVztpQkFDOUIsQ0FBQztnQkFDRixNQUFNO1lBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDN0I7Z0JBQ0ksZ0JBQWdCLEdBQUc7b0JBQ2YsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtvQkFDL0MsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDM0MsYUFBYSxFQUFFLE1BQU07b0JBQ3JCLGNBQWMsRUFBRSxPQUFPO2lCQUMxQixDQUFDO1FBQ1YsQ0FBQztRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxRQUEwQjtRQUNwRSxJQUFJLGdCQUFrQyxDQUFDO1FBQ3ZDLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDZixLQUFLLGdCQUFnQixDQUFDLEtBQUs7Z0JBQ3ZCLGdCQUFnQixHQUFHO29CQUNmLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDLE1BQU07b0JBQ2hELGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEdBQUc7b0JBQ3pDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLE1BQU07b0JBQy9DLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLEdBQUc7b0JBQ3hDLGFBQWEsRUFBRSxnQkFBZ0I7b0JBQy9CLGNBQWMsRUFBRSxpQkFBaUI7aUJBQ3BDLENBQUM7Z0JBQ0YsTUFBTTtZQUNWLEtBQUssZ0JBQWdCLENBQUMsS0FBSztnQkFDdkIsZ0JBQWdCLEdBQUc7b0JBQ2Ysb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtvQkFDaEQsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDNUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtvQkFDL0MsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDM0MsYUFBYSxFQUFFLGFBQWE7b0JBQzVCLGNBQWMsRUFBRSxjQUFjO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLGdCQUFnQixDQUFDLEtBQUs7Z0JBQ3ZCLGdCQUFnQixHQUFHO29CQUNmLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDLEtBQUs7b0JBQy9DLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLE1BQU07b0JBQzVDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLEtBQUs7b0JBQzlDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLE1BQU07b0JBQzNDLGFBQWEsRUFBRSxjQUFjO29CQUM3QixjQUFjLEVBQUUsZUFBZTtpQkFDbEMsQ0FBQztnQkFDRixNQUFNO1lBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUN4QixnQkFBZ0IsR0FBRztvQkFDZixvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO29CQUM5QyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO29CQUM1QyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO29CQUM3QyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO29CQUMzQyxhQUFhLEVBQUUsZUFBZTtvQkFDOUIsY0FBYyxFQUFFLGdCQUFnQjtpQkFDbkMsQ0FBQztnQkFDRixNQUFNO1lBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDOUI7Z0JBQ0ksZ0JBQWdCLEdBQUc7b0JBQ2Ysb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtvQkFDOUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDNUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsS0FBSztvQkFDOUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDM0MsYUFBYSxFQUFFLGFBQWE7b0JBQzVCLGNBQWMsRUFBRSxjQUFjO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU07UUFDZCxDQUFDO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQWtDLEVBQUUsZ0JBQWtDO1FBQ3hHLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDZixLQUFLLHdCQUF3QixDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlELEtBQUssd0JBQXdCLENBQUMsT0FBTztnQkFDakMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekQsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7WUFDbkM7Z0JBQ0ksT0FBTyxJQUFJLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNMLENBQUM7SUE0Qk0sTUFBTSxDQUNULGtCQUEwQyxFQUMxQywwQkFBK0QsRUFDL0QsbUJBQXFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFnQixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFFOUYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywwQkFBMEIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDeEksK0RBQStEO1FBQy9ELE1BQU0sU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDMUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsRUFBVTtRQUNwQixNQUFNLElBQUksR0FBZ0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVM7UUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQUMsRUFBVSxFQUFFLFFBQTBCO1FBQzlDLE1BQU0sSUFBSSxHQUFnQixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBK0IsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3JHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLHNCQUFzQjtRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUMzQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFDbEUsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLEVBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEQsMEVBQTBFO1lBQzFFLG9DQUFvQztZQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDSixxRUFBcUU7WUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksSUFBSSxDQUFDLEVBQVUsRUFBRSxLQUFhO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU87UUFDVixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFVBQVUsQ0FBQyxFQUFVO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUMxRSxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xFLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUMxQyxjQUFjLEVBQ2Q7WUFDSSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSztZQUMvQixNQUFNLEVBQUUsa0JBQWtCLENBQUMsTUFBTTtTQUNwQyxFQUNELElBQUksQ0FBQyxTQUFTLEVBQ2QsS0FBSyxFQUNMLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxTQUFTLENBQUMsRUFBVSxFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsVUFBdUI7UUFDaEYsTUFBTSxJQUFJLEdBQWdCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsT0FBTztRQUNYLENBQUM7UUFFRCxRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ2pCLEtBQUssVUFBVSxDQUFDLEdBQUc7Z0JBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUN6QixNQUFNO1lBQ1YsS0FBSyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3BCO2dCQUNJLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztnQkFDMUIsTUFBTTtRQUNkLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFbkMsTUFBTSxTQUFTLEdBQUcsYUFBYSxVQUFVLE9BQU8sVUFBVSxLQUFLLENBQUM7UUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzVFLENBQUM7SUFTRCxjQUFjO0lBQ1AsV0FBVztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixjQUFjLENBQUMsRUFBVTtRQUM1QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQWE7UUFDbkMsTUFBTSxJQUFJLEdBQWdCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUE0QixFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3pHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsMEJBQStELEVBQy9ELG1CQUFxQztRQUNuQyxJQUFJLE1BQU0sR0FBZ0MsbUJBQW1CLENBQUM7UUFDOUQsSUFBSSwwQkFBMEIsSUFBSSxDQUFDLENBQUMsMEJBQTBCLFlBQVksZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzFGLE1BQU0sR0FBRywwQkFBMEIsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWMsQ0FDbEIsU0FBaUMsRUFDakMsMEJBQStEO1FBQy9ELE1BQU0sSUFBSSxHQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQy9FLElBQUksU0FBUyxZQUFZLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxnQkFBbUMsQ0FBQztZQUN4QyxJQUFJLDBCQUEwQixZQUFZLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3pELGdCQUFnQixHQUFHLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDbEQsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN6QixDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQztZQUVELCtHQUErRztZQUMvRyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQW9CO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUM1QixPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQWlCO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5RCxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixNQUFNLE9BQU8sR0FBZ0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5QyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8saUJBQWlCLENBQUMsY0FBMkIsRUFBRSxLQUFjO1FBQ2pFLE1BQU0sT0FBTyxHQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBUyxFQUFFLEVBQUU7Z0JBQzVDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQVMsRUFBRSxFQUFFO1lBQzdDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILDBGQUEwRjtRQUMxRixjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDM0MsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBaUI7UUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQWlCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLHNFQUFzRTtZQUN0RSxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0UsQ0FBQztRQUVELDBEQUEwRDtRQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUM1RixDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFpQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0Qix1RUFBdUU7WUFDdkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVPLE9BQU8sQ0FBQyxJQUFpQjtRQUM3QixNQUFNLEtBQUssR0FBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLG9FQUFvRTtRQUNwRSxzREFBc0Q7UUFDdEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwQywyRkFBMkY7UUFDM0YsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQixJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFpQjtRQUN2Qyw0REFBNEQ7UUFDNUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztZQUNwRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFL0csd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFpQixFQUFFLEtBQWE7UUFDdkQsNERBQTREO1FBQzVELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQseUVBQXlFO0lBQ2pFLG9CQUFvQixDQUFDLGNBQTJCLEVBQUUsZ0JBQTRDO1FBQ2xHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BCLGNBQWMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hELE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRSxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUEwQixDQUFDO1FBQ25FLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLGNBQWMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsY0FBYyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xFLENBQUM7SUFDTCxDQUFDO0lBK0JPLHVCQUF1QixDQUFDLElBQWlCO1FBQzdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO3FCQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO2lCQUFNO1lBQ0gscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtnQkFDMUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLO29CQUM5RSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBRXpELHNFQUFzRTtnQkFDdEUsZ0NBQWdDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUFDLElBQWlCO1FBQ2hELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSw4QkFBOEIsR0FBRyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqRCw4QkFBOEIsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksOEJBQThCLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7b0JBQzdELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsTUFBTSxvQkFBb0IsR0FDdEIsSUFBSSxDQUFDLGFBQWE7YUFDYixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLENBQUM7YUFDakQsTUFBTSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixNQUFNLG9CQUFvQixHQUN0QixJQUFJLENBQUMsYUFBYTthQUNiLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNqRCxNQUFNLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsSUFBaUI7UUFDOUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQ25FLE1BQU0sQ0FBQyxDQUFDLEVBQWlCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQ3pFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsT0FBTztnQkFDWCxDQUFDO2dCQUNELE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksaUJBQWlCLENBQUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQy9CLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBaUI7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDakYsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pHLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtnQkFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBaUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDakYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQy9ELGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFpQjtRQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO2lCQUMzQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVk7aUJBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7aUJBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWTtpQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQWlCO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBaUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFpQjtRQUN0Qyx1REFBdUQ7UUFDdkQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDOzhHQWo1QlEsaUJBQWlCLGdEQTJGZCxRQUFRLCtEQUdSLDBCQUEwQjtrSEE5RjdCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkE0RnpCLE1BQU07MkJBQUMsUUFBUTs7MEJBR2YsTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgY3JlYXRlQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVHlwZSxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYW5pbWF0aW9uL2FuZ3VsYXItYW5pbWF0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2F1dG8tcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vY29ubmVjdGVkLXBvc2l0aW9uaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbnRhaW5lclBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2NvbnRhaW5lci1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBFbGFzdGljUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vZWxhc3RpYy1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9nbG9iYWwtcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgSVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL0lQb3NpdGlvblN0cmF0ZWd5JztcbmltcG9ydCB7IE5vT3BTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4vc2Nyb2xsL05vT3BTY3JvbGxTdHJhdGVneSc7XG5pbXBvcnQge1xuICAgIEFic29sdXRlUG9zaXRpb24sXG4gICAgSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBPZmZzZXRNb2RlLFxuICAgIE92ZXJsYXlBbmltYXRpb25FdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNsb3NpbmdFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUV2ZW50QXJncyxcbiAgICBPdmVybGF5SW5mbyxcbiAgICBPdmVybGF5U2V0dGluZ3MsXG4gICAgUG9pbnQsXG4gICAgUG9zaXRpb25TZXR0aW5ncyxcbiAgICBSZWxhdGl2ZVBvc2l0aW9uLFxuICAgIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSxcbiAgICBWZXJ0aWNhbEFsaWdubWVudFxufSBmcm9tICcuL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBmYWRlSW4sIGZhZGVPdXQsIElBbmltYXRpb25QYXJhbXMsIHNjYWxlSW5Ib3JMZWZ0LCBzY2FsZUluSG9yUmlnaHQsIHNjYWxlSW5WZXJCb3R0b20sIHNjYWxlSW5WZXJUb3AsIHNjYWxlT3V0SG9yTGVmdCwgc2NhbGVPdXRIb3JSaWdodCwgc2NhbGVPdXRWZXJCb3R0b20sIHNjYWxlT3V0VmVyVG9wLCBzbGlkZUluQm90dG9tLCBzbGlkZUluVG9wLCBzbGlkZU91dEJvdHRvbSwgc2xpZGVPdXRUb3AgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG4vKipcbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9vdmVybGF5LW1haW4pXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIGFsbG93cyB1c2VycyB0byBzaG93IGNvbXBvbmVudHMgb24gb3ZlcmxheSBkaXYgYWJvdmUgYWxsIG90aGVyIGVsZW1lbnRzIGluIHRoZSBwYWdlLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIElneE92ZXJsYXlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGp1c3QgYmVmb3JlIHRoZSBvdmVybGF5IGNvbnRlbnQgc3RhcnRzIHRvIG9wZW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5pbmcoZXZlbnQ6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3Qgb3BlbmluZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBvdmVybGF5IGNvbnRlbnQgaXMgb3BlbmVkIGFuZCBhbGwgYW5pbWF0aW9ucyBhcmUgZmluaXNoZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5lZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IG9wZW5lZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBjb250ZW50IHN0YXJ0cyB0byBjbG9zZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2luZyhldmVudDogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBjbG9zaW5nID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5Q2xvc2luZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgY29udGVudCBpcyBjbG9zZWQgYW5kIGFsbCBhbmltYXRpb25zIGFyZSBmaW5pc2hlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2VkKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY2xvc2VkID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgY29udGVudCBpcyBhcHBlbmRlZCB0byB0aGUgb3ZlcmxheS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29udGVudEFwcGVuZGluZyhldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbnRlbnRBcHBlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBjb250ZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBvdmVybGF5LCBhbmQgYmVmb3JlIGFuaW1hdGlvbnMgYXJlIHN0YXJ0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnRlbnRBcHBlbmRlZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRlZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGVudEFwcGVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBhbmltYXRpb24gc3RhcnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGFuaW1hdGlvblN0YXJ0aW5nKGV2ZW50OiBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgYW5pbWF0aW9uU3RhcnRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGFuaW1hdGlvblN0YXJ0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzPigpO1xuXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50SWQgPSAwO1xuICAgIHByaXZhdGUgX292ZXJsYXlJbmZvczogT3ZlcmxheUluZm9bXSA9IFtdO1xuICAgIHByaXZhdGUgX292ZXJsYXlFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG4gICAgcHJpdmF0ZSBfa2V5UHJlc3NFdmVudExpc3RlbmVyOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfY3Vyc29yU3R5bGVJc1NldCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2N1cnNvck9yaWdpbmFsVmFsdWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgX2RlZmF1bHRTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW10sXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEluamVjdChJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSlwcml2YXRlIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3ZlcmxheSBzZXR0aW5ncyB3aXRoIGdsb2JhbCBvciBjb250YWluZXIgcG9zaXRpb24gc3RyYXRlZ3kgYW5kIHByZXNldCBwb3NpdGlvbiBzZXR0aW5nc1xuICAgICAqXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFByZXNldCBwb3NpdGlvbiBzZXR0aW5ncy4gRGVmYXVsdCBwb3NpdGlvbiBpcyAnY2VudGVyJ1xuICAgICAqIEBwYXJhbSBvdXRsZXQgVGhlIG91dGxldCBjb250YWluZXIgdG8gYXR0YWNoIHRoZSBvdmVybGF5IHRvXG4gICAgICogQHJldHVybnMgTm9uLW1vZGFsIG92ZXJsYXkgc2V0dGluZ3MgYmFzZWQgb24gR2xvYmFsIG9yIENvbnRhaW5lciBwb3NpdGlvbiBzdHJhdGVneSBhbmQgdGhlIHByb3ZpZGVkIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlQWJzb2x1dGVPdmVybGF5U2V0dGluZ3MoXG4gICAgICAgIHBvc2l0aW9uPzogQWJzb2x1dGVQb3NpdGlvbiwgb3V0bGV0PzogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWYpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBwb3NpdGlvblNldHRpbmdzID0gdGhpcy5jcmVhdGVBYnNvbHV0ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb24pO1xuICAgICAgICBjb25zdCBzdHJhdGVneSA9IG91dGxldCA/IG5ldyBDb250YWluZXJQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpIDogbmV3IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vT3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgICAgIG91dGxldFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3ZlcmxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3ZlcmxheSBzZXR0aW5ncyB3aXRoIGF1dG8sIGNvbm5lY3RlZCBvciBlbGFzdGljIHBvc2l0aW9uIHN0cmF0ZWd5IGFuZCBwcmVzZXQgcG9zaXRpb24gc2V0dGluZ3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgQXR0YWNoaW5nIHRhcmdldCBmb3IgdGhlIGNvbXBvbmVudCB0byBzaG93XG4gICAgICogQHBhcmFtIHN0cmF0ZWd5IFRoZSByZWxhdGl2ZSBwb3NpdGlvbiBzdHJhdGVneSB0byBiZSBhcHBsaWVkIHRvIHRoZSBvdmVybGF5IHNldHRpbmdzLiBEZWZhdWx0IGlzIEF1dG8gcG9zaXRpb25pbmcgc3RyYXRlZ3kuXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFByZXNldCBwb3NpdGlvbiBzZXR0aW5ncy4gQnkgZGVmYXVsdCB0aGUgZWxlbWVudCBpcyBwb3NpdGlvbmVkIGJlbG93IHRoZSB0YXJnZXQsIGxlZnQgYWxpZ25lZC5cbiAgICAgKiBAcmV0dXJucyBOb24tbW9kYWwgb3ZlcmxheSBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGFyZ2V0LCBzdHJhdGVneSBhbmQgcG9zaXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVSZWxhdGl2ZU92ZXJsYXlTZXR0aW5ncyhcbiAgICAgICAgdGFyZ2V0OiBQb2ludCB8IEhUTUxFbGVtZW50LFxuICAgICAgICBwb3NpdGlvbj86IFJlbGF0aXZlUG9zaXRpb24sXG4gICAgICAgIHN0cmF0ZWd5PzogUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5KTpcbiAgICAgICAgT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25TZXR0aW5ncyA9IHRoaXMuY3JlYXRlUmVsYXRpdmVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koc3RyYXRlZ3ksIHBvc2l0aW9uU2V0dGluZ3MpLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBOb09wU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlTZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBYnNvbHV0ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb246IEFic29sdXRlUG9zaXRpb24pOiBQb3NpdGlvblNldHRpbmdzIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgQWJzb2x1dGVQb3NpdGlvbi5Cb3R0b206XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNsaWRlSW5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dEJvdHRvbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFic29sdXRlUG9zaXRpb24uVG9wOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuVG9wLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluVG9wLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRUb3BcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBYnNvbHV0ZVBvc2l0aW9uLkNlbnRlcjpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IGZhZGVJbixcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVJlbGF0aXZlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbjogUmVsYXRpdmVQb3NpdGlvbik6IFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgICAgICBsZXQgcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkFib3ZlOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuVG9wLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluVmVyQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRWZXJCb3R0b20sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5CZWxvdzpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJblZlclRvcCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyVG9wXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5BZnRlcjpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5Ib3JMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRIb3JMZWZ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5CZWZvcmU6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJbkhvclJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRIb3JSaWdodFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uRGVmYXVsdDpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJUb3AsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dFZlclRvcCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koc3RyYXRlZ3k6IFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSwgcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyk6IElQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kuQ29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LkVsYXN0aWM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGFzdGljUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LkF1dG86XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgSWQuIFByb3ZpZGUgdGhpcyBJZCB3aGVuIGNhbGwgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgRWxlbWVudFJlZiB0byBzaG93IGluIG92ZXJsYXlcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKiBAcmV0dXJucyBJZCBvZiB0aGUgY3JlYXRlZCBvdmVybGF5LiBWYWxpZCB1bnRpbCBgZGV0YWNoYCBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGF0dGFjaChlbGVtZW50OiBFbGVtZW50UmVmLCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgSWQuIFByb3ZpZGUgdGhpcyBJZCB3aGVuIGNhbGwgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIE5vdGUgY3JlYXRlZCBpbnN0YW5jZSBpcyBpbiByb290IHNjb3BlLCBwcmVmZXIgdGhlIGB2aWV3Q29udGFpbmVyUmVmYCBvdmVybG9hZCB3aGVuIGxvY2FsIGluamVjdGlvbiBjb250ZXh0IGlzIG5lZWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IFR5cGUgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHNldHRpbmdzIERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICogQHJldHVybnMgSWQgb2YgdGhlIGNyZWF0ZWQgb3ZlcmxheS4gVmFsaWQgdW50aWwgYGRldGFjaGAgaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goY29tcG9uZW50OiBUeXBlPGFueT4sIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbGluZyB0aGUgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IFR5cGUgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWYgUmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgd2hlcmUgY3JlYXRlZCBjb21wb25lbnQncyBob3N0IHZpZXcgd2lsbCBiZSBpbnNlcnRlZFxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBEaXNwbGF5IHNldHRpbmdzIGZvciB0aGUgb3ZlcmxheSwgc3VjaCBhcyBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsL2Nsb3NlIGJlaGF2aW9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goY29tcG9uZW50OiBUeXBlPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdHRhY2goXG4gICAgICAgIGNvbXBvbmVudE9yRWxlbWVudDogRWxlbWVudFJlZiB8IFR5cGU8YW55PixcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3M/OiBWaWV3Q29udGFpbmVyUmVmIHwgT3ZlcmxheVNldHRpbmdzLFxuICAgICAgICBtb2R1bGVSZWZPclNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlJbmZvKGNvbXBvbmVudE9yRWxlbWVudCwgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3MpO1xuXG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdPdmVybGF5IHdhcyBub3QgYWJsZSB0byBhdHRhY2ggcHJvdmlkZWQgY29tcG9uZW50IScpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpbmZvLmlkID0gKHRoaXMuX2NvbXBvbmVudElkKyspLnRvU3RyaW5nKCk7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RlZmF1bHRTZXR0aW5ncywgdGhpcy5nZXRVc2VyT3ZlcmxheVNldHRpbmdzKHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzLCBtb2R1bGVSZWZPclNldHRpbmdzKSk7XG4gICAgICAgIC8vIEVtaXQgdGhlIGNvbnRlbnRBcHBlbmRpbmcgZXZlbnQgYmVmb3JlIGFwcGVuZGluZyB0aGUgY29udGVudFxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7IGlkOiBpbmZvLmlkLCBlbGVtZW50UmVmOiBpbmZvLmVsZW1lbnRSZWYsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIHNldHRpbmdzIH07XG4gICAgICAgIHRoaXMuY29udGVudEFwcGVuZGluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIC8vIEFwcGVuZCB0aGUgY29udGVudCB0byB0aGUgb3ZlcmxheVxuICAgICAgICBpbmZvLnNldHRpbmdzID0gZXZlbnRBcmdzLnNldHRpbmdzO1xuICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MucHVzaChpbmZvKTtcbiAgICAgICAgaW5mby5ob29rID0gdGhpcy5wbGFjZUVsZW1lbnRIb29rKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaW5mby5pbml0aWFsU2l6ZSA9IHsgd2lkdGg6IGVsZW1lbnRSZWN0LndpZHRoLCBoZWlnaHQ6IGVsZW1lbnRSZWN0LmhlaWdodCB9O1xuICAgICAgICB0aGlzLm1vdmVFbGVtZW50VG9PdmVybGF5KGluZm8pO1xuICAgICAgICB0aGlzLmNvbnRlbnRBcHBlbmRlZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuaW5pdGlhbGl6ZSh0aGlzLl9kb2N1bWVudCwgdGhpcywgaW5mby5pZCk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKCk7XG4gICAgICAgIHRoaXMuYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMuYWRkUmVzaXplSGFuZGxlcigpO1xuICAgICAgICB0aGlzLmFkZENsb3NlT25Fc2NhcGVMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5idWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbyk7XG4gICAgICAgIHJldHVybiBpbmZvLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBvdmVybGF5IHdpdGggdGhlIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIG9mIHRoZSBvdmVybGF5IHRvIHJlbW92ZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuZGV0YWNoKGlkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0YWNoKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5kZXRhY2ggd2FzIGNhbGxlZCB3aXRoIHdyb25nIGlkOiAnLCBpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5kZXRhY2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmluaXNoQW5pbWF0aW9ucyhpbmZvKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncy5zY3JvbGxTdHJhdGVneS5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5yZW1vdmVPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5yZW1vdmVSZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuY2xlYW5VcChpbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYWxsIHRoZSBvdmVybGF5cy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmRldGFjaEFsbCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRhY2hBbGwoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaCh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIG92ZXJsYXkgZm9yIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHNob3cgb3ZlcmxheSBmb3JcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhpZDogc3RyaW5nLCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5zaG93IHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiB1cGRhdGUgYXR0YWNoXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaXplKGluZm8pO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb24oXG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgICAgICAgeyB3aWR0aDogaW5mby5pbml0aWFsU2l6ZS53aWR0aCwgaGVpZ2h0OiBpbmZvLmluaXRpYWxTaXplLmhlaWdodCB9LFxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgaW5mby5zZXR0aW5ncy50YXJnZXQpO1xuICAgICAgICB0aGlzLmFkZE1vZGFsQ2xhc3NlcyhpbmZvKTtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgYnVpbGQgcGxheWVycyBhZ2Fpbi4gVGhpcyB3YXMgYWxyZWFkeSBkb25lIGluIGF0dGFjaCEhIVxuICAgICAgICAgICAgLy8gdGhpcy5idWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbyk7XG4gICAgICAgICAgICB0aGlzLnBsYXlPcGVuQW5pbWF0aW9uKGluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgb3BlbmVkIGZpcmVzXG4gICAgICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcbiAgICAgICAgICAgIGluZm8udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgY29tcG9uZW50IHdpdGggdGhlIElEIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuaGlkZShpZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhpZGUoaWQ6IHN0cmluZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLl9oaWRlKGlkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgYWxsIHRoZSBjb21wb25lbnRzIGFuZCB0aGUgb3ZlcmxheS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmhpZGVBbGwoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZUFsbCgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgdGhlIGNvbXBvbmVudCB3aXRoIElEIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHJlcG9zaXRpb24gb3ZlcmxheSBmb3JcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LnJlcG9zaXRpb24oaWQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyByZXBvc2l0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFvdmVybGF5SW5mbyB8fCAhb3ZlcmxheUluZm8uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV3JvbmcgaWQgcHJvdmlkZWQgaW4gb3ZlcmxheS5yZXBvc2l0aW9uIG1ldGhvZC4gSWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW92ZXJsYXlJbmZvLnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IG92ZXJsYXlJbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudFJlY3QgPSBjb250ZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgb3ZlcmxheUluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbihcbiAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb250ZW50RWxlbWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb250ZW50RWxlbWVudFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIG92ZXJsYXlJbmZvLnNldHRpbmdzLnRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2Zmc2V0cyB0aGUgY29udGVudCBhbG9uZyB0aGUgY29ycmVzcG9uZGluZyBheGlzIGJ5IHRoZSBwcm92aWRlZCBhbW91bnQgd2l0aCBvcHRpb25hbCBvZmZzZXRNb2RlIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFkZCAoYnkgZGVmYXVsdCkgb3Igc2V0IHRoZSBvZmZzZXQgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSWQgdG8gb2Zmc2V0IG92ZXJsYXkgZm9yXG4gICAgICogQHBhcmFtIGRlbHRhWCBBbW91bnQgb2Ygb2Zmc2V0IGluIGhvcml6b250YWwgZGlyZWN0aW9uXG4gICAgICogQHBhcmFtIGRlbHRhWSBBbW91bnQgb2Ygb2Zmc2V0IGluIHZlcnRpY2FsIGRpcmVjdGlvblxuICAgICAqIEBwYXJhbSBvZmZzZXRNb2RlIERldGVybWluZXMgd2hldGhlciB0byBhZGQgKGJ5IGRlZmF1bHQpIG9yIHNldCB0aGUgb2Zmc2V0IHZhbHVlcyB3aXRoIE9mZnNldE1vZGUuQWRkIGFuZCBPZmZzZXRNb2RlLlNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuc2V0T2Zmc2V0KGlkLCBkZWx0YVgsIGRlbHRhWSwgb2Zmc2V0TW9kZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldE9mZnNldChpZDogc3RyaW5nLCBkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIsIG9mZnNldE1vZGU/OiBPZmZzZXRNb2RlKSB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG5cbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG9mZnNldE1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgT2Zmc2V0TW9kZS5TZXQ6XG4gICAgICAgICAgICAgICAgaW5mby50cmFuc2Zvcm1YID0gZGVsdGFYO1xuICAgICAgICAgICAgICAgIGluZm8udHJhbnNmb3JtWSA9IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgT2Zmc2V0TW9kZS5BZGQ6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGluZm8udHJhbnNmb3JtWCArPSBkZWx0YVg7XG4gICAgICAgICAgICAgICAgaW5mby50cmFuc2Zvcm1ZICs9IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVggPSBpbmZvLnRyYW5zZm9ybVg7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVkgPSBpbmZvLnRyYW5zZm9ybVk7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gYHRyYW5zbGF0ZSgke3RyYW5zZm9ybVh9cHgsICR7dHJhbnNmb3JtWX1weClgO1xuICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyByZXBvc2l0aW9uQWxsID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgdGhpcy5yZXBvc2l0aW9uKHRoaXMuX292ZXJsYXlJbmZvc1tpXS5pZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRPdmVybGF5QnlJZChpZDogc3RyaW5nKTogT3ZlcmxheUluZm8ge1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zLmZpbmQoZSA9PiBlLmlkID09PSBpZCk7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZGUoaWQ6IHN0cmluZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5oaWRlIHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNsb3NpbmdFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlLCBldmVudCB9O1xuICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICBpZiAoZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kYWxDbGFzc2VzKGluZm8pO1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlDbG9zZUFuaW1hdGlvbihpbmZvLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRG9uZShpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXNlck92ZXJsYXlTZXR0aW5ncyhcbiAgICAgIHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzPzogVmlld0NvbnRhaW5lclJlZiB8IE92ZXJsYXlTZXR0aW5ncyxcbiAgICAgIG1vZHVsZVJlZk9yU2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBsZXQgcmVzdWx0OiBPdmVybGF5U2V0dGluZ3MgfCB1bmRlZmluZWQgPSBtb2R1bGVSZWZPclNldHRpbmdzO1xuICAgICAgICBpZiAodmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3MgJiYgISh2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncyBpbnN0YW5jZW9mIFZpZXdDb250YWluZXJSZWYpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3ZlcmxheUluZm8oXG4gICAgICAgIGNvbXBvbmVudDogRWxlbWVudFJlZiB8IFR5cGU8YW55PixcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3M/OiBWaWV3Q29udGFpbmVyUmVmIHwgT3ZlcmxheVNldHRpbmdzKTogT3ZlcmxheUluZm8gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB7IG5nWm9uZTogdGhpcy5fem9uZSwgdHJhbnNmb3JtWDogMCwgdHJhbnNmb3JtWTogMCB9O1xuICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgRWxlbWVudFJlZikge1xuICAgICAgICAgICAgaW5mby5lbGVtZW50UmVmID0gY29tcG9uZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGR5bmFtaWNDb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+O1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzIGluc3RhbmNlb2YgVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICAgICAgICAgIGR5bmFtaWNDb21wb25lbnQgPSB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmplY3RvciA9IHRoaXMuX2FwcFJlZi5pbmplY3RvcjtcbiAgICAgICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KGR5bmFtaWNDb21wb25lbnQuaG9zdFZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGR5bmFtaWNDb21wb25lbnQub25EZXN0cm95KSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY0NvbXBvbmVudC5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8uZGV0YWNoZWQgJiYgdGhpcy5fb3ZlcmxheUluZm9zLmluZGV4T2YoaW5mbykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaChpbmZvLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5ld2x5IGNyZWF0ZWQgZnJvbSBhIENvbXBvbmVudCwgaXQgaXMgd3JhcHBlZCBpbiAnbmctY29tcG9uZW50JyB0YWcgLSB3ZSBkbyBub3Qgd2FudCB0aGF0LlxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGR5bmFtaWNDb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZiA9IHsgbmF0aXZlRWxlbWVudDogZWxlbWVudCB9O1xuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYgPSBkeW5hbWljQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxhY2VFbGVtZW50SG9vayhlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvb2sgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaG9vay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGhvb2ssIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaG9vaztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVFbGVtZW50VG9PdmVybGF5KGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQgPSB0aGlzLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5nZXRDb250ZW50RWxlbWVudChpbmZvLndyYXBwZXJFbGVtZW50LCBpbmZvLnNldHRpbmdzLm1vZGFsKTtcbiAgICAgICAgdGhpcy5nZXRPdmVybGF5RWxlbWVudChpbmZvKS5hcHBlbmRDaGlsZChpbmZvLndyYXBwZXJFbGVtZW50KTtcbiAgICAgICAgY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0V3JhcHBlckVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCB3cmFwcGVyOiBIVE1MRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X193cmFwcGVyJyk7XG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGVudEVsZW1lbnQod3JhcHBlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBtb2RhbDogYm9vbGVhbik6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY29udGVudDogSFRNTEVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X19jb250ZW50LS1tb2RhbCcpO1xuICAgICAgICAgICAgY29udGVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldjogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fY29udGVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGV2OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBoaWRlIGVsZW1lbnQgdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcuIFNob3cgdGhlIGVsZW1lbnQgZXhhY3RseSBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0c1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHdyYXBwZXJFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE92ZXJsYXlFbGVtZW50KGluZm86IE92ZXJsYXlJbmZvKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5vdXRsZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvLnNldHRpbmdzLm91dGxldC5uYXRpdmVFbGVtZW50IHx8IGluZm8uc2V0dGluZ3Mub3V0bGV0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheScpO1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9vdmVybGF5RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXlFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2l6ZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIC8vICBpZiB3ZSBhcmUgcG9zaXRpb25pbmcgY29tcG9uZW50IHRoaXMgaXMgZmlyc3QgdGltZSBpdCBnZXRzIHZpc2libGVcbiAgICAgICAgICAgIC8vICBhbmQgd2UgY2FuIGZpbmFsbHkgZ2V0IGl0cyBzaXplXG4gICAgICAgICAgICBpbmZvLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBpbmZvLmluaXRpYWxTaXplID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgY29udGVudCBkaXYgd2lkdGggb25seSBpZiBlbGVtZW50IHRvIHNob3cgaGFzIHdpZHRoXG4gICAgICAgIGlmIChpbmZvLmluaXRpYWxTaXplLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLndpZHRoID0gaW5mby5pbml0aWFsU2l6ZS53aWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpbmZvLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGluZm8ud3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0XG4gICAgICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluZm8uY2xvc2VBbmltYXRpb25EZXRhY2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBpZDogaW5mby5pZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiwgZXZlbnQ6IGluZm8uZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGluZm8uZXZlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhblVwKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBIVE1MRWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBvdXRsZXQgPSB0aGlzLmdldE92ZXJsYXlFbGVtZW50KGluZm8pO1xuICAgICAgICAvLyBpZiBzYW1lIGVsZW1lbnQgaXMgc2hvd24gaW4gb3RoZXIgb3ZlcmxheSBvdXRsZXQgd2lsbCBub3QgY29udGFpblxuICAgICAgICAvLyB0aGUgZWxlbWVudCBhbmQgd2Ugc2hvdWxkIG5vdCByZW1vdmUgaXQgZm9ybSBvdXRsZXRcbiAgICAgICAgaWYgKG91dGxldC5jb250YWlucyhjaGlsZCkpIHtcbiAgICAgICAgICAgIG91dGxldC5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnROb2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoaW5mby5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIGluZm8uY29tcG9uZW50UmVmO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmhvb2spIHtcbiAgICAgICAgICAgIGluZm8uaG9vay5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgaW5mby5ob29rKTtcbiAgICAgICAgICAgIGluZm8uaG9vay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGluZm8uaG9vayk7XG4gICAgICAgICAgICBkZWxldGUgaW5mby5ob29rO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vdmVybGF5SW5mb3MuaW5kZXhPZihpbmZvKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gdGhpcy5fb3ZlcmxheUVsZW1lbnQucGFyZW50RWxlbWVudCBjaGVjayBqdXN0IGZvciB0ZXN0cyB0aGF0IG1hbnVhbGx5IGRlbGV0ZSB0aGUgZWxlbWVudFxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlFbGVtZW50ICYmIHRoaXMuX292ZXJsYXlFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX292ZXJsYXlFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsb3NlT25Fc2NhcGVMaXN0ZW5lcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYW4gYWxsIHRoZSByZXNvdXJjZXMgYXR0YWNoZWQgdG8gaW5mb1xuICAgICAgICBkZWxldGUgaW5mby5lbGVtZW50UmVmO1xuICAgICAgICBkZWxldGUgaW5mby5zZXR0aW5ncztcbiAgICAgICAgZGVsZXRlIGluZm8uaW5pdGlhbFNpemU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvbkRldGFjaGluZyA9IHRydWU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyO1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uRGV0YWNoaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcjtcbiAgICAgICAgZGVsZXRlIGluZm8ubmdab25lO1xuICAgICAgICBkZWxldGUgaW5mby53cmFwcGVyRWxlbWVudDtcbiAgICAgICAgaW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5T3BlbkFuaW1hdGlvbihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgb3BlbmluZyBhbmltYXRpb24gYWxyZWFkeSBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBvc2l0aW9uO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmluaXQoKTtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5wb3NpdGlvbiA9IDEgLSBwb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0aW5nLmVtaXQoeyBpZDogaW5mby5pZCwgYW5pbWF0aW9uUGxheWVyOiBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIsIGFuaW1hdGlvblR5cGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAvLyAgdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcgc2hvdyB0aGUgZWxlbWVudCBqdXN0IGJlZm9yZSBhbmltYXRpb24gc3RhcnRcbiAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5Q2xvc2VBbmltYXRpb24oaW5mbzogT3ZlcmxheUluZm8sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIGNsb3NpbmcgYW5pbWF0aW9uIGFscmVhZHkgc3RhcnRlZCBkbyBub3RoaW5nXG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnBvc2l0aW9uO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmluaXQoKTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucG9zaXRpb24gPSAxIC0gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGFydGluZy5lbWl0KHsgaWQ6IGluZm8uaWQsIGFuaW1hdGlvblBsYXllcjogaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciwgYW5pbWF0aW9uVHlwZTogJ2Nsb3NlJyB9KTtcbiAgICAgICAgaW5mby5ldmVudCA9IGV2ZW50O1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyAgVE9ETzogY2hlY2sgaWYgYXBwbHlBbmltYXRpb25QYXJhbXMgd2lsbCB3b3JrIHdpdGggY29tcGxleCBhbmltYXRpb25zXG4gICAgcHJpdmF0ZSBhcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbk9wdGlvbnM6IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKSB7XG4gICAgICAgIGlmICghYW5pbWF0aW9uT3B0aW9ucykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbmltYXRpb25PcHRpb25zLm9wdGlvbnMgfHwgIWFuaW1hdGlvbk9wdGlvbnMub3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSBhbmltYXRpb25PcHRpb25zLm9wdGlvbnMucGFyYW1zIGFzIElBbmltYXRpb25QYXJhbXM7XG4gICAgICAgIGlmIChwYXJhbXMuZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcmFtcy5kdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmVhc2luZykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uID0gcGFyYW1zLmVhc2luZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja2VkID0gKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vICBpZiB3ZSBnZXQgdG8gbW9kYWwgb3ZlcmxheSBqdXN0IHJldHVybiAtIHdlIHNob3VsZCBub3QgY2xvc2UgYW55dGhpbmcgdW5kZXIgaXRcbiAgICAgICAgLy8gIGlmIHdlIGdldCB0byBub24tbW9kYWwgb3ZlcmxheSBkbyB0aGUgbmV4dDpcbiAgICAgICAgLy8gICAxLiBDaGVjayBpdCBoYXMgY2xvc2Ugb24gb3V0c2lkZSBjbGljay4gSWYgbm90IGdvIG9uIHRvIG5leHQgb3ZlcmxheTtcbiAgICAgICAgLy8gICAyLiBJZiB0cnVlIGNoZWNrIGlmIGNsaWNrIGlzIG9uIHRoZSBlbGVtZW50LiBJZiBpdCBpcyBvbiB0aGUgZWxlbWVudCB3ZSBoYXZlIGNsb3NlZFxuICAgICAgICAvLyAgYWxyZWFkeSBhbGwgcHJldmlvdXMgbm9uLW1vZGFsIHdpdGggY2xvc2Ugb24gb3V0c2lkZSBjbGljayBlbGVtZW50cywgc28gd2UgcmV0dXJuLiBJZlxuICAgICAgICAvLyAgbm90IGNsb3NlIHRoZSBvdmVybGF5IGFuZCBjaGVjayBuZXh0XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zW2ldO1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXYuY29tcG9zZWQgPyBldi5jb21wb3NlZFBhdGgoKVswXSA6IGV2LnRhcmdldDtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5RWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjbGljayBpcyBvbiB0aGUgb3ZlcmxheSBlbGVtZW50IG9yIG9uIGFuIGVsZW1lbnQgZnJvbSB0aGUgZXhjbHVzaW9uIGxpc3QsIGFuZCBpZiBzbyBkbyBub3QgY2xvc2UgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlRWxlbWVudHMgPSBpbmZvLnNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID9cbiAgICAgICAgICAgICAgICAgICAgWy4uLmluZm8uc2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2ssIG92ZXJsYXlFbGVtZW50XSA6IFtvdmVybGF5RWxlbWVudF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnNpZGVDbGljazogYm9vbGVhbiA9IGV4Y2x1ZGVFbGVtZW50cy5zb21lKGUgPT4gZS5jb250YWlucyh0YXJnZXQgYXMgTm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luc2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgLy8gIGlmIHRoZSBjbGljayBpcyBvdXRzaWRlIGNsaWNrLCBidXQgY2xvc2UgYW5pbWF0aW9uIGhhcyBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKGluZm8uaWQsIGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBhZGRPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgICAgIGZyb21FdmVudChpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuX2hpZGUoaW5mby5pZCwgZSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAvLyAgaWYgYWxsIG92ZXJsYXlzIG1pbnVzIGNsb3Npbmcgb3ZlcmxheXMgZXF1YWxzIG9uZSBhZGQgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKHggPT4geC5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmICF4LnNldHRpbmdzLm1vZGFsKS5sZW5ndGggLVxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5maWx0ZXIoeCA9PiB4LnNldHRpbmdzLmNsb3NlT25PdXRzaWRlQ2xpY2sgJiYgIXguc2V0dGluZ3MubW9kYWwgJiZcbiAgICAgICAgICAgICAgICAgICAgeC5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKS5sZW5ndGggPT09IDEpIHtcblxuICAgICAgICAgICAgICAgIC8vIGNsaWNrIGV2ZW50IGlzIG5vdCBmaXJlZCBvbiBpT1MuIFRvIG1ha2UgZWxlbWVudCBcImNsaWNrYWJsZVwiIHdlIGFyZVxuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgdGhlIGN1cnNvciB0byBwb2ludGVyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzSU9TICYmICF0aGlzLl9jdXJzb3JTdHlsZUlzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUgPSB0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnNvclN0eWxlSXNTZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja2VkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkUmVtb3ZlQ2xpY2tFdmVudExpc3RlbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5mb3JFYWNoKG8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvLnNldHRpbmdzLm1vZGFsID09PSBmYWxzZSAmJiBvLmlkICE9PSBpbmZvLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJzb3JTdHlsZUlzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUlzU2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKVxuICAgICAgICAgICAgICAgIC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoIC0gY2xvc2luZ092ZXJsYXlzQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVwb3NpdGlvbkFsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVJlc2l6ZUhhbmRsZXIoKSB7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdPdmVybGF5c0NvdW50ID1cbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIobyA9PiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpXG4gICAgICAgICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGggLSBjbG9zaW5nT3ZlcmxheXNDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXBvc2l0aW9uQWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLmNsb3NlT25Fc2NhcGUgJiYgIXRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyID0gZnJvbUV2ZW50KHRoaXMuX2RvY3VtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldjogS2V5Ym9hcmRFdmVudCkgPT4gZXYua2V5ID09PSAnRXNjYXBlJyB8fCBldi5rZXkgPT09ICdFc2MnKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZU92ZXJsYXlzID0gdGhpcy5fb3ZlcmxheUluZm9zLmZpbHRlcihvID0+IG8udmlzaWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGVPdmVybGF5cy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0T3ZlcmxheUluZm8gPSB2aXNpYmxlT3ZlcmxheXNbdmlzaWJsZU92ZXJsYXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRPdmVybGF5SW5mby52aXNpYmxlICYmIHRhcmdldE92ZXJsYXlJbmZvLnNldHRpbmdzLmNsb3NlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKHRhcmdldE92ZXJsYXlJbmZvLmlkLCBldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUNsb3NlT25Fc2NhcGVMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRNb2RhbENsYXNzZXMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBbmltYXRpb25QYXJhbXMod3JhcHBlckVsZW1lbnQsIGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXItLW1vZGFsJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTW9kYWxDbGFzc2VzKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyRWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBbmltYXRpb25QYXJhbXMod3JhcHBlckVsZW1lbnQsIGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbik7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtb3ZlcmxheV9fd3JhcHBlci0tbW9kYWwnKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X193cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQW5pbWF0aW9uUGxheWVycyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllciA9IHRoaXMuYW5pbWF0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIC5idWlsZEFuaW1hdGlvbihpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbiwgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmFuaW1hdGlvbkVuZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub3BlbkFuaW1hdGlvbkRvbmUoaW5mbykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuY2xvc2VBbmltYXRpb24pIHtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIgPSB0aGlzLmFuaW1hdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICAuYnVpbGRBbmltYXRpb24oaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uLCBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmFuaW1hdGlvbkVuZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VBbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkFuaW1hdGlvbkRvbmUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKCFpbmZvLm9wZW5BbmltYXRpb25EZXRhY2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBpZDogaW5mby5pZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyKSB7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcikge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZURvbmUoaW5mbyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5pc2hBbmltYXRpb25zKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIC8vIC8vIFRPRE86IHNob3VsZCB3ZSBlbWl0IGhlcmUgb3BlbmVkIG9yIGNsb3NlZCBldmVudHNcbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIuZmluaXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5maW5pc2goKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
842
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFHSCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUtWLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBb0IsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdoUixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FB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QUM7UUFDckMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQWlCO1FBQ3RDLHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUM7OEdBNTVCUSxpQkFBaUIsZ0RBMkZkLFFBQVEsK0RBR1IsMEJBQTBCO2tIQTlGN0IsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQTRGekIsTUFBTTsyQkFBQyxRQUFROzswQkFHZixNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBjcmVhdGVDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGZhZGVJbiwgZmFkZU91dCwgSUFuaW1hdGlvblBhcmFtcywgc2NhbGVJbkhvckxlZnQsIHNjYWxlSW5Ib3JSaWdodCwgc2NhbGVJblZlckJvdHRvbSwgc2NhbGVJblZlclRvcCwgc2NhbGVPdXRIb3JMZWZ0LCBzY2FsZU91dEhvclJpZ2h0LCBzY2FsZU91dFZlckJvdHRvbSwgc2NhbGVPdXRWZXJUb3AsIHNsaWRlSW5Cb3R0b20sIHNsaWRlSW5Ub3AsIHNsaWRlT3V0Qm90dG9tLCBzbGlkZU91dFRvcCB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYW5pbWF0aW9uL2FuZ3VsYXItYW5pbWF0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2F1dG8tcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vY29ubmVjdGVkLXBvc2l0aW9uaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbnRhaW5lclBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2NvbnRhaW5lci1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBFbGFzdGljUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vZWxhc3RpYy1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9nbG9iYWwtcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgSVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL0lQb3NpdGlvblN0cmF0ZWd5JztcbmltcG9ydCB7IE5vT3BTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4vc2Nyb2xsL05vT3BTY3JvbGxTdHJhdGVneSc7XG5pbXBvcnQge1xuICAgIEFic29sdXRlUG9zaXRpb24sXG4gICAgSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBPZmZzZXRNb2RlLFxuICAgIE92ZXJsYXlBbmltYXRpb25FdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNsb3NpbmdFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUNyZWF0ZVNldHRpbmdzLFxuICAgIE92ZXJsYXlFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUluZm8sXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvaW50LFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgUmVsYXRpdmVQb3NpdGlvbixcbiAgICBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSAnLi91dGlsaXRpZXMnO1xuXG4vKipcbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9vdmVybGF5LW1haW4pXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIGFsbG93cyB1c2VycyB0byBzaG93IGNvbXBvbmVudHMgb24gb3ZlcmxheSBkaXYgYWJvdmUgYWxsIG90aGVyIGVsZW1lbnRzIGluIHRoZSBwYWdlLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIElneE92ZXJsYXlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGp1c3QgYmVmb3JlIHRoZSBvdmVybGF5IGNvbnRlbnQgc3RhcnRzIHRvIG9wZW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5pbmcoZXZlbnQ6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3Qgb3BlbmluZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBvdmVybGF5IGNvbnRlbnQgaXMgb3BlbmVkIGFuZCBhbGwgYW5pbWF0aW9ucyBhcmUgZmluaXNoZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5lZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IG9wZW5lZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBjb250ZW50IHN0YXJ0cyB0byBjbG9zZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2luZyhldmVudDogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBjbG9zaW5nID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5Q2xvc2luZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgY29udGVudCBpcyBjbG9zZWQgYW5kIGFsbCBhbmltYXRpb25zIGFyZSBmaW5pc2hlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2VkKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY2xvc2VkID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgY29udGVudCBpcyBhcHBlbmRlZCB0byB0aGUgb3ZlcmxheS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29udGVudEFwcGVuZGluZyhldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbnRlbnRBcHBlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBjb250ZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBvdmVybGF5LCBhbmQgYmVmb3JlIGFuaW1hdGlvbnMgYXJlIHN0YXJ0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnRlbnRBcHBlbmRlZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRlZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGVudEFwcGVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBhbmltYXRpb24gc3RhcnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGFuaW1hdGlvblN0YXJ0aW5nKGV2ZW50OiBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgYW5pbWF0aW9uU3RhcnRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGFuaW1hdGlvblN0YXJ0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzPigpO1xuXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50SWQgPSAwO1xuICAgIHByaXZhdGUgX292ZXJsYXlJbmZvczogT3ZlcmxheUluZm9bXSA9IFtdO1xuICAgIHByaXZhdGUgX292ZXJsYXlFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG4gICAgcHJpdmF0ZSBfa2V5UHJlc3NFdmVudExpc3RlbmVyOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfY3Vyc29yU3R5bGVJc1NldCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2N1cnNvck9yaWdpbmFsVmFsdWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgX2RlZmF1bHRTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW10sXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEluamVjdChJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSkgcHJpdmF0ZSBhbmltYXRpb25TZXJ2aWNlOiBBbmltYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50ID0gdGhpcy5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG92ZXJsYXkgc2V0dGluZ3Mgd2l0aCBnbG9iYWwgb3IgY29udGFpbmVyIHBvc2l0aW9uIHN0cmF0ZWd5IGFuZCBwcmVzZXQgcG9zaXRpb24gc2V0dGluZ3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBQcmVzZXQgcG9zaXRpb24gc2V0dGluZ3MuIERlZmF1bHQgcG9zaXRpb24gaXMgJ2NlbnRlcidcbiAgICAgKiBAcGFyYW0gb3V0bGV0IFRoZSBvdXRsZXQgY29udGFpbmVyIHRvIGF0dGFjaCB0aGUgb3ZlcmxheSB0b1xuICAgICAqIEByZXR1cm5zIE5vbi1tb2RhbCBvdmVybGF5IHNldHRpbmdzIGJhc2VkIG9uIEdsb2JhbCBvciBDb250YWluZXIgcG9zaXRpb24gc3RyYXRlZ3kgYW5kIHRoZSBwcm92aWRlZCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUFic29sdXRlT3ZlcmxheVNldHRpbmdzKFxuICAgICAgICBwb3NpdGlvbj86IEFic29sdXRlUG9zaXRpb24sIG91dGxldD86IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25TZXR0aW5ncyA9IHRoaXMuY3JlYXRlQWJzb2x1dGVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBvdXRsZXQgPyBuZXcgQ29udGFpbmVyUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKSA6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBOb09wU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgICAgICBvdXRsZXRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlTZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG92ZXJsYXkgc2V0dGluZ3Mgd2l0aCBhdXRvLCBjb25uZWN0ZWQgb3IgZWxhc3RpYyBwb3NpdGlvbiBzdHJhdGVneSBhbmQgcHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IEF0dGFjaGluZyB0YXJnZXQgZm9yIHRoZSBjb21wb25lbnQgdG8gc2hvd1xuICAgICAqIEBwYXJhbSBzdHJhdGVneSBUaGUgcmVsYXRpdmUgcG9zaXRpb24gc3RyYXRlZ3kgdG8gYmUgYXBwbGllZCB0byB0aGUgb3ZlcmxheSBzZXR0aW5ncy4gRGVmYXVsdCBpcyBBdXRvIHBvc2l0aW9uaW5nIHN0cmF0ZWd5LlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBQcmVzZXQgcG9zaXRpb24gc2V0dGluZ3MuIEJ5IGRlZmF1bHQgdGhlIGVsZW1lbnQgaXMgcG9zaXRpb25lZCBiZWxvdyB0aGUgdGFyZ2V0LCBsZWZ0IGFsaWduZWQuXG4gICAgICogQHJldHVybnMgTm9uLW1vZGFsIG92ZXJsYXkgc2V0dGluZ3MgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRhcmdldCwgc3RyYXRlZ3kgYW5kIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlUmVsYXRpdmVPdmVybGF5U2V0dGluZ3MoXG4gICAgICAgIHRhcmdldDogUG9pbnQgfCBIVE1MRWxlbWVudCxcbiAgICAgICAgcG9zaXRpb24/OiBSZWxhdGl2ZVBvc2l0aW9uLFxuICAgICAgICBzdHJhdGVneT86IFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSk6XG4gICAgICAgIE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLmNyZWF0ZVJlbGF0aXZlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KHN0cmF0ZWd5LCBwb3NpdGlvblNldHRpbmdzKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvdmVybGF5U2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQWJzb2x1dGVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uOiBBYnNvbHV0ZVBvc2l0aW9uKTogUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgICAgIGxldCBwb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzO1xuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEFic29sdXRlUG9zaXRpb24uQm90dG9tOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRCb3R0b21cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBYnNvbHV0ZVBvc2l0aW9uLlRvcDpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJblRvcCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNsaWRlT3V0VG9wXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWJzb2x1dGVQb3NpdGlvbi5DZW50ZXI6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBmYWRlSW4sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBmYWRlT3V0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVSZWxhdGl2ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb246IFJlbGF0aXZlUG9zaXRpb24pOiBQb3NpdGlvblNldHRpbmdzIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5BYm92ZTpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuVG9wLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJblZlckJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyQm90dG9tLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQmVsb3c6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJUb3AsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dFZlclRvcFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQWZ0ZXI6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluSG9yTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0SG9yTGVmdFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQmVmb3JlOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5Ib3JSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0SG9yUmlnaHRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkRlZmF1bHQ6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluVmVyVG9wLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRWZXJUb3AsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KHN0cmF0ZWd5OiBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3ksIHBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MpOiBJUG9zaXRpb25TdHJhdGVneSB7XG4gICAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LkNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneS5FbGFzdGljOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxhc3RpY1Bvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneS5BdXRvOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIElkLiBQcm92aWRlIHRoaXMgSWQgd2hlbiBjYWxsIGBzaG93KGlkKWAgbWV0aG9kXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IEVsZW1lbnRSZWYgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHNldHRpbmdzIChvcHRpb25hbCk6IERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICogQHJldHVybnMgSWQgb2YgdGhlIGNyZWF0ZWQgb3ZlcmxheS4gVmFsaWQgdW50aWwgYGRldGFjaGAgaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goZWxlbWVudDogRWxlbWVudFJlZiwgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIElkLiBQcm92aWRlIHRoaXMgSWQgd2hlbiBjYWxsIGBzaG93KGlkKWAgbWV0aG9kXG4gICAgICpcbiAgICAgKiBOb3RlIGNyZWF0ZWQgaW5zdGFuY2UgaXMgaW4gcm9vdCBzY29wZSwgcHJlZmVyIHRoZSBgdmlld0NvbnRhaW5lclJlZmAgb3ZlcmxvYWQgd2hlbiBsb2NhbCBpbmplY3Rpb24gY29udGV4dCBpcyBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IENvbXBvbmVudCBUeXBlIHRvIHNob3cgaW4gb3ZlcmxheVxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyAob3B0aW9uYWwpOiBDcmVhdGUgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICogSW5jbHVkZXMgYWxzbyBhbiBvcHRpb25hbCBgSW5qZWN0b3JgIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBkeW5hbWljIGNvbXBvbmVudCdzIGluamVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyBJZCBvZiB0aGUgY3JlYXRlZCBvdmVybGF5LiBWYWxpZCB1bnRpbCBgZGV0YWNoYCBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGF0dGFjaChjb21wb25lbnQ6IFR5cGU8YW55Piwgc2V0dGluZ3M/OiBPdmVybGF5Q3JlYXRlU2V0dGluZ3MpOiBzdHJpbmc7XG4gICAgLy8gVE9ETzogY2hhbmdlIHRoaXJkIHBhcmFtZXRlciB0byBPdmVybGF5Q3JlYXRlU2V0dGluZ3MgYW5kIGFsbG93IHBhc3Npbmcgb2YgSW5qZWN0b3IgYW5kIHNvIG9uLlxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbGluZyB0aGUgYHNob3coaWQpYCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IFR5cGUgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWYgUmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgd2hlcmUgY3JlYXRlZCBjb21wb25lbnQncyBob3N0IHZpZXcgd2lsbCBiZSBpbnNlcnRlZFxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyAob3B0aW9uYWwpOiBEaXNwbGF5IHNldHRpbmdzIGZvciB0aGUgb3ZlcmxheSwgc3VjaCBhcyBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsL2Nsb3NlIGJlaGF2aW9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goY29tcG9uZW50OiBUeXBlPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdHRhY2goXG4gICAgICAgIGNvbXBvbmVudE9yRWxlbWVudDogRWxlbWVudFJlZiB8IFR5cGU8YW55PixcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3M/OiBWaWV3Q29udGFpbmVyUmVmIHwgT3ZlcmxheUNyZWF0ZVNldHRpbmdzLFxuICAgICAgICBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5SW5mbyhjb21wb25lbnRPckVsZW1lbnQsIHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzLCBzZXR0aW5ncyk7XG5cbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXkgd2FzIG5vdCBhYmxlIHRvIGF0dGFjaCBwcm92aWRlZCBjb21wb25lbnQhJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZm8uaWQgPSAodGhpcy5fY29tcG9uZW50SWQrKykudG9TdHJpbmcoKTtcbiAgICAgICAgaW5mby52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIEVtaXQgdGhlIGNvbnRlbnRBcHBlbmRpbmcgZXZlbnQgYmVmb3JlIGFwcGVuZGluZyB0aGUgY29udGVudFxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7IGlkOiBpbmZvLmlkLCBlbGVtZW50UmVmOiBpbmZvLmVsZW1lbnRSZWYsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIHNldHRpbmdzOiBpbmZvLnNldHRpbmdzIH07XG4gICAgICAgIHRoaXMuY29udGVudEFwcGVuZGluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIC8vIEFwcGVuZCB0aGUgY29udGVudCB0byB0aGUgb3ZlcmxheVxuICAgICAgICBpbmZvLnNldHRpbmdzID0gZXZlbnRBcmdzLnNldHRpbmdzO1xuICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MucHVzaChpbmZvKTtcbiAgICAgICAgaW5mby5ob29rID0gdGhpcy5wbGFjZUVsZW1lbnRIb29rKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaW5mby5pbml0aWFsU2l6ZSA9IHsgd2lkdGg6IGVsZW1lbnRSZWN0LndpZHRoLCBoZWlnaHQ6IGVsZW1lbnRSZWN0LmhlaWdodCB9O1xuICAgICAgICB0aGlzLm1vdmVFbGVtZW50VG9PdmVybGF5KGluZm8pO1xuICAgICAgICB0aGlzLmNvbnRlbnRBcHBlbmRlZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuaW5pdGlhbGl6ZSh0aGlzLl9kb2N1bWVudCwgdGhpcywgaW5mby5pZCk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKCk7XG4gICAgICAgIHRoaXMuYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMuYWRkUmVzaXplSGFuZGxlcigpO1xuICAgICAgICB0aGlzLmFkZENsb3NlT25Fc2NhcGVMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5idWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbyk7XG4gICAgICAgIHJldHVybiBpbmZvLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBvdmVybGF5IHdpdGggdGhlIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIG9mIHRoZSBvdmVybGF5IHRvIHJlbW92ZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuZGV0YWNoKGlkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0YWNoKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5kZXRhY2ggd2FzIGNhbGxlZCB3aXRoIHdyb25nIGlkOiAnLCBpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5kZXRhY2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmluaXNoQW5pbWF0aW9ucyhpbmZvKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncy5zY3JvbGxTdHJhdGVneS5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5yZW1vdmVPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5yZW1vdmVSZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuY2xlYW5VcChpbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYWxsIHRoZSBvdmVybGF5cy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmRldGFjaEFsbCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRhY2hBbGwoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaCh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIG92ZXJsYXkgZm9yIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHNob3cgb3ZlcmxheSBmb3JcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhpZDogc3RyaW5nLCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5zaG93IHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiB1cGRhdGUgYXR0YWNoXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaXplKGluZm8pO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb24oXG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgICAgICAgeyB3aWR0aDogaW5mby5pbml0aWFsU2l6ZS53aWR0aCwgaGVpZ2h0OiBpbmZvLmluaXRpYWxTaXplLmhlaWdodCB9LFxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgaW5mby5zZXR0aW5ncy50YXJnZXQpO1xuICAgICAgICB0aGlzLmFkZE1vZGFsQ2xhc3NlcyhpbmZvKTtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgYnVpbGQgcGxheWVycyBhZ2Fpbi4gVGhpcyB3YXMgYWxyZWFkeSBkb25lIGluIGF0dGFjaCEhIVxuICAgICAgICAgICAgLy8gdGhpcy5idWlsZEFuaW1hdGlvblBsYXllcnMoaW5mbyk7XG4gICAgICAgICAgICB0aGlzLnBsYXlPcGVuQW5pbWF0aW9uKGluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgb3BlbmVkIGZpcmVzXG4gICAgICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcbiAgICAgICAgICAgIGluZm8udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgY29tcG9uZW50IHdpdGggdGhlIElEIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuaGlkZShpZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhpZGUoaWQ6IHN0cmluZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLl9oaWRlKGlkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgYWxsIHRoZSBjb21wb25lbnRzIGFuZCB0aGUgb3ZlcmxheS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmhpZGVBbGwoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZUFsbCgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgdGhlIGNvbXBvbmVudCB3aXRoIElEIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHJlcG9zaXRpb24gb3ZlcmxheSBmb3JcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LnJlcG9zaXRpb24oaWQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyByZXBvc2l0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFvdmVybGF5SW5mbyB8fCAhb3ZlcmxheUluZm8uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV3JvbmcgaWQgcHJvdmlkZWQgaW4gb3ZlcmxheS5yZXBvc2l0aW9uIG1ldGhvZC4gSWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW92ZXJsYXlJbmZvLnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IG92ZXJsYXlJbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudFJlY3QgPSBjb250ZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgb3ZlcmxheUluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbihcbiAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb250ZW50RWxlbWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb250ZW50RWxlbWVudFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIG92ZXJsYXlJbmZvLnNldHRpbmdzLnRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2Zmc2V0cyB0aGUgY29udGVudCBhbG9uZyB0aGUgY29ycmVzcG9uZGluZyBheGlzIGJ5IHRoZSBwcm92aWRlZCBhbW91bnQgd2l0aCBvcHRpb25hbCBvZmZzZXRNb2RlIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFkZCAoYnkgZGVmYXVsdCkgb3Igc2V0IHRoZSBvZmZzZXQgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSWQgdG8gb2Zmc2V0IG92ZXJsYXkgZm9yXG4gICAgICogQHBhcmFtIGRlbHRhWCBBbW91bnQgb2Ygb2Zmc2V0IGluIGhvcml6b250YWwgZGlyZWN0aW9uXG4gICAgICogQHBhcmFtIGRlbHRhWSBBbW91bnQgb2Ygb2Zmc2V0IGluIHZlcnRpY2FsIGRpcmVjdGlvblxuICAgICAqIEBwYXJhbSBvZmZzZXRNb2RlIERldGVybWluZXMgd2hldGhlciB0byBhZGQgKGJ5IGRlZmF1bHQpIG9yIHNldCB0aGUgb2Zmc2V0IHZhbHVlcyB3aXRoIE9mZnNldE1vZGUuQWRkIGFuZCBPZmZzZXRNb2RlLlNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuc2V0T2Zmc2V0KGlkLCBkZWx0YVgsIGRlbHRhWSwgb2Zmc2V0TW9kZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldE9mZnNldChpZDogc3RyaW5nLCBkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIsIG9mZnNldE1vZGU/OiBPZmZzZXRNb2RlKSB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG5cbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG9mZnNldE1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgT2Zmc2V0TW9kZS5TZXQ6XG4gICAgICAgICAgICAgICAgaW5mby50cmFuc2Zvcm1YID0gZGVsdGFYO1xuICAgICAgICAgICAgICAgIGluZm8udHJhbnNmb3JtWSA9IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgT2Zmc2V0TW9kZS5BZGQ6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGluZm8udHJhbnNmb3JtWCArPSBkZWx0YVg7XG4gICAgICAgICAgICAgICAgaW5mby50cmFuc2Zvcm1ZICs9IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVggPSBpbmZvLnRyYW5zZm9ybVg7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVkgPSBpbmZvLnRyYW5zZm9ybVk7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gYHRyYW5zbGF0ZSgke3RyYW5zZm9ybVh9cHgsICR7dHJhbnNmb3JtWX1weClgO1xuICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyByZXBvc2l0aW9uQWxsID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgdGhpcy5yZXBvc2l0aW9uKHRoaXMuX292ZXJsYXlJbmZvc1tpXS5pZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRPdmVybGF5QnlJZChpZDogc3RyaW5nKTogT3ZlcmxheUluZm8ge1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zLmZpbmQoZSA9PiBlLmlkID09PSBpZCk7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZGUoaWQ6IHN0cmluZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5oaWRlIHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNsb3NpbmdFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlLCBldmVudCB9O1xuICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICBpZiAoZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kYWxDbGFzc2VzKGluZm8pO1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlDbG9zZUFuaW1hdGlvbihpbmZvLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRG9uZShpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3ZlcmxheUluZm8uIFNldHMgdGhlIGluZm8ncyBgZWxlbWVudFJlZmAsIGBjb21wb25lbnRSZWZgYW5kIGBzZXR0aW5nc2AuIEFsc29cbiAgICAgKiBpbml0aWFsaXplIGluZm8ncyBgbmdab25lYCwgYHRyYW5zZm9ybVhgIGFuZCBgdHJhbnNmb3JtWWAuXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBFbGVtZW50UmVmIG9yIFR5cGUuIElmIHR5cGUgaXMgcHJvdmlkZWQgZHluYW1pYyBjb21wb25lbnQgd2lsbCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzIChvcHRpb25hbCk6IElmIEVsZW1lbnRSZWYgaXMgcHJvdmlkZWQgZm9yIGBjb21wb25lbnRgIHRoaXNcbiAgICAgKiBwYXJhbWV0ZXIgaXMgT3ZlcmxheVNldHRpbmdzLiBPdGhlcndpc2UgaXQgY291bGQgYmUgVmlld0NvbnRhaW5lclJlZiBvciBPdmVybGF5Q3JlYXRlU2V0dGluZ3MgYW5kIHdpbGwgYmVcbiAgICAgKiB1c2VkIHdoZW4gZHluYW1pYyBjb21wb25lbnQgaXMgY3JlYXRlZC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgKG9wdGlvbmFsKTogT3ZlcmxheVNldHRpbmdzIHdoZW4gYFZpZXdDb250YWluZXJSZWZgIGlzIHByb3ZpZGVkLlxuICAgICAqIEByZXR1cm5zIE92ZXJsYXlJbmZvXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5SW5mbyhcbiAgICAgICAgY29tcG9uZW50OiBFbGVtZW50UmVmIHwgVHlwZTxhbnk+LFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncz86IFZpZXdDb250YWluZXJSZWYgfCBPdmVybGF5Q3JlYXRlU2V0dGluZ3MsXG4gICAgICAgIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogT3ZlcmxheUluZm8gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB7IG5nWm9uZTogdGhpcy5fem9uZSwgdHJhbnNmb3JtWDogMCwgdHJhbnNmb3JtWTogMCB9O1xuICAgICAgICBsZXQgb3ZlcmxheVNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICBvdmVybGF5U2V0dGluZ3MgPSB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncyBhcyBPdmVybGF5U2V0dGluZ3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZHluYW1pY0NvbXBvbmVudDogQ29tcG9uZW50UmVmPGFueT47XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lclJlZk9yU2V0dGluZ3MgaW5zdGFuY2VvZiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHZpZXdDb250YWluZXJSZWZPclNldHRpbmdzIGFzIFZpZXdDb250YWluZXJSZWY7XG4gICAgICAgICAgICAgICAgZHluYW1pY0NvbXBvbmVudCA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5qZWN0b3IgPSB0aGlzLl9hcHBSZWYuaW5qZWN0b3I7XG4gICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlU2V0dGluZ3MgPSB2aWV3Q29udGFpbmVyUmVmT3JTZXR0aW5ncyBhcyBPdmVybGF5Q3JlYXRlU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRJbmplY3RvcjogSW5qZWN0b3I7XG4gICAgICAgICAgICAgICAgaWYgKGNyZWF0ZVNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICh7IGluamVjdG9yOiBlbGVtZW50SW5qZWN0b3IsIC4uLm92ZXJsYXlTZXR0aW5nc30gPSBjcmVhdGVTZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGR5bmFtaWNDb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvciB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhkeW5hbWljQ29tcG9uZW50Lmhvc3RWaWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkeW5hbWljQ29tcG9uZW50Lm9uRGVzdHJveSkge1xuICAgICAgICAgICAgICAgIGR5bmFtaWNDb21wb25lbnQub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmRldGFjaGVkICYmIHRoaXMuX292ZXJsYXlJbmZvcy5pbmRleE9mKGluZm8pICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2goaW5mby5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBuZXdseSBjcmVhdGVkIGZyb20gYSBDb21wb25lbnQsIGl0IGlzIHdyYXBwZWQgaW4gJ25nLWNvbXBvbmVudCcgdGFnIC0gd2UgZG8gbm90IHdhbnQgdGhhdC5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkeW5hbWljQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYgPSB7IG5hdGl2ZUVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgICAgICAgICAgIGluZm8uY29tcG9uZW50UmVmID0gZHluYW1pY0NvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmYXVsdFNldHRpbmdzLCBvdmVybGF5U2V0dGluZ3MpOyBcbiAgICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUVsZW1lbnRIb29rKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9vayA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBob29rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaG9vaywgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBob29rO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZUVsZW1lbnRUb092ZXJsYXkoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudCA9IHRoaXMuZ2V0V3JhcHBlckVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSB0aGlzLmdldENvbnRlbnRFbGVtZW50KGluZm8ud3JhcHBlckVsZW1lbnQsIGluZm8uc2V0dGluZ3MubW9kYWwpO1xuICAgICAgICB0aGlzLmdldE92ZXJsYXlFbGVtZW50KGluZm8pLmFwcGVuZENoaWxkKGluZm8ud3JhcHBlckVsZW1lbnQpO1xuICAgICAgICBjb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXcmFwcGVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXI6IEhUTUxFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250ZW50RWxlbWVudCh3cmFwcGVyRWxlbWVudDogSFRNTEVsZW1lbnQsIG1vZGFsOiBib29sZWFuKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjb250ZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBpZiAobW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX2NvbnRlbnQtLW1vZGFsJyk7XG4gICAgICAgICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X19jb250ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZXY6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gIGhpZGUgZWxlbWVudCB0byBlbGltaW5hdGUgZmxpY2tlcmluZy4gU2hvdyB0aGUgZWxlbWVudCBleGFjdGx5IGJlZm9yZSBhbmltYXRpb24gc3RhcnRzXG4gICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgd3JhcHBlckVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3ZlcmxheUVsZW1lbnQoaW5mbzogT3ZlcmxheUluZm8pOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm91dGxldCkge1xuICAgICAgICAgICAgcmV0dXJuIGluZm8uc2V0dGluZ3Mub3V0bGV0Lm5hdGl2ZUVsZW1lbnQgfHwgaW5mby5zZXR0aW5ncy5vdXRsZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5Jyk7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX292ZXJsYXlFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTaXplKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgLy8gIGlmIHdlIGFyZSBwb3NpdGlvbmluZyBjb21wb25lbnQgdGhpcyBpcyBmaXJzdCB0aW1lIGl0IGdldHMgdmlzaWJsZVxuICAgICAgICAgICAgLy8gIGFuZCB3ZSBjYW4gZmluYWxseSBnZXQgaXRzIHNpemVcbiAgICAgICAgICAgIGluZm8uY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGluZm8uaW5pdGlhbFNpemUgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBjb250ZW50IGRpdiB3aWR0aCBvbmx5IGlmIGVsZW1lbnQgdG8gc2hvdyBoYXMgd2lkdGhcbiAgICAgICAgaWYgKGluZm8uaW5pdGlhbFNpemUud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGggPSBpbmZvLmluaXRpYWxTaXplLndpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VEb25lKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaW5mby53cmFwcGVyRWxlbWVudCkge1xuICAgICAgICAgICAgLy8gdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcgc2hvdyB0aGUgZWxlbWVudCBqdXN0IGJlZm9yZSBhbmltYXRpb24gc3RhcnRcbiAgICAgICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5mby5jbG9zZUFuaW1hdGlvbkRldGFjaGluZykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBldmVudDogaW5mby5ldmVudCB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgaW5mby5ldmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFuVXAoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgY29uc3QgY2hpbGQ6IEhUTUxFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG91dGxldCA9IHRoaXMuZ2V0T3ZlcmxheUVsZW1lbnQoaW5mbyk7XG4gICAgICAgIC8vIGlmIHNhbWUgZWxlbWVudCBpcyBzaG93biBpbiBvdGhlciBvdmVybGF5IG91dGxldCB3aWxsIG5vdCBjb250YWluXG4gICAgICAgIC8vIHRoZSBlbGVtZW50IGFuZCB3ZSBzaG91bGQgbm90IHJlbW92ZSBpdCBmb3JtIG91dGxldFxuICAgICAgICBpZiAob3V0bGV0LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgICAgICAgICAgb3V0bGV0LnJlbW92ZUNoaWxkKGNoaWxkLnBhcmVudE5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyhpbmZvLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgICBpbmZvLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgaW5mby5jb21wb25lbnRSZWY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uaG9vaykge1xuICAgICAgICAgICAgaW5mby5ob29rLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBpbmZvLmhvb2spO1xuICAgICAgICAgICAgaW5mby5ob29rLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoaW5mby5ob29rKTtcbiAgICAgICAgICAgIGRlbGV0ZSBpbmZvLmhvb2s7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX292ZXJsYXlJbmZvcy5pbmRleE9mKGluZm8pO1xuICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3Muc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAvLyB0aGlzLl9vdmVybGF5RWxlbWVudC5wYXJlbnRFbGVtZW50IGNoZWNrIGp1c3QgZm9yIHRlc3RzIHRoYXQgbWFudWFsbHkgZGVsZXRlIHRoZSBlbGVtZW50XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUVsZW1lbnQgJiYgdGhpcy5fb3ZlcmxheUVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fb3ZlcmxheUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhbiBhbGwgdGhlIHJlc291cmNlcyBhdHRhY2hlZCB0byBpbmZvXG4gICAgICAgIGRlbGV0ZSBpbmZvLmVsZW1lbnRSZWY7XG4gICAgICAgIGRlbGV0ZSBpbmZvLnNldHRpbmdzO1xuICAgICAgICBkZWxldGUgaW5mby5pbml0aWFsU2l6ZTtcbiAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uRGV0YWNoaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyPy5kZXN0cm95KCk7XG4gICAgICAgIGRlbGV0ZSBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI7XG4gICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25EZXRhY2hpbmcgPSB0cnVlO1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5kZXN0cm95KCk7XG4gICAgICAgIGRlbGV0ZSBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyO1xuICAgICAgICBkZWxldGUgaW5mby5uZ1pvbmU7XG4gICAgICAgIGRlbGV0ZSBpbmZvLndyYXBwZXJFbGVtZW50O1xuICAgICAgICBpbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYXlPcGVuQW5pbWF0aW9uKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBvcGVuaW5nIGFuaW1hdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgZG8gbm90aGluZ1xuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucG9zaXRpb247XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIuaW5pdCgpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnBvc2l0aW9uID0gMSAtIHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhcnRpbmcuZW1pdCh7IGlkOiBpbmZvLmlkLCBhbmltYXRpb25QbGF5ZXI6IGluZm8ub3BlbkFuaW1hdGlvblBsYXllciwgYW5pbWF0aW9uVHlwZTogJ29wZW4nIH0pO1xuXG4gICAgICAgIC8vICB0byBlbGltaW5hdGUgZmxpY2tlcmluZyBzaG93IHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlIGFuaW1hdGlvbiBzdGFydFxuICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcbiAgICAgICAgaW5mby52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYXlDbG9zZUFuaW1hdGlvbihpbmZvOiBPdmVybGF5SW5mbywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgY2xvc2luZyBhbmltYXRpb24gYWxyZWFkeSBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucG9zaXRpb247XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuaW5pdCgpO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5wb3NpdGlvbiA9IDEgLSBwb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0aW5nLmVtaXQoeyBpZDogaW5mby5pZCwgYW5pbWF0aW9uUGxheWVyOiBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLCBhbmltYXRpb25UeXBlOiAnY2xvc2UnIH0pO1xuICAgICAgICBpbmZvLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucGxheSgpO1xuICAgIH1cblxuICAgIC8vICBUT0RPOiBjaGVjayBpZiBhcHBseUFuaW1hdGlvblBhcmFtcyB3aWxsIHdvcmsgd2l0aCBjb21wbGV4IGFuaW1hdGlvbnNcbiAgICBwcml2YXRlIGFwcGx5QW5pbWF0aW9uUGFyYW1zKHdyYXBwZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgYW5pbWF0aW9uT3B0aW9uczogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKCFhbmltYXRpb25PcHRpb25zKSB7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMG1zJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFuaW1hdGlvbk9wdGlvbnMub3B0aW9ucyB8fCAhYW5pbWF0aW9uT3B0aW9ucy5vcHRpb25zLnBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGFuaW1hdGlvbk9wdGlvbnMub3B0aW9ucy5wYXJhbXMgYXMgSUFuaW1hdGlvblBhcmFtcztcbiAgICAgICAgaWYgKHBhcmFtcy5kdXJhdGlvbikge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyYW1zLmR1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMuZWFzaW5nKSB7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24gPSBwYXJhbXMuZWFzaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkb2N1bWVudENsaWNrZWQgPSAoZXY6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgLy8gIGlmIHdlIGdldCB0byBtb2RhbCBvdmVybGF5IGp1c3QgcmV0dXJuIC0gd2Ugc2hvdWxkIG5vdCBjbG9zZSBhbnl0aGluZyB1bmRlciBpdFxuICAgICAgICAvLyAgaWYgd2UgZ2V0IHRvIG5vbi1tb2RhbCBvdmVybGF5IGRvIHRoZSBuZXh0OlxuICAgICAgICAvLyAgIDEuIENoZWNrIGl0IGhhcyBjbG9zZSBvbiBvdXRzaWRlIGNsaWNrLiBJZiBub3QgZ28gb24gdG8gbmV4dCBvdmVybGF5O1xuICAgICAgICAvLyAgIDIuIElmIHRydWUgY2hlY2sgaWYgY2xpY2sgaXMgb24gdGhlIGVsZW1lbnQuIElmIGl0IGlzIG9uIHRoZSBlbGVtZW50IHdlIGhhdmUgY2xvc2VkXG4gICAgICAgIC8vICBhbHJlYWR5IGFsbCBwcmV2aW91cyBub24tbW9kYWwgd2l0aCBjbG9zZSBvbiBvdXRzaWRlIGNsaWNrIGVsZW1lbnRzLCBzbyB3ZSByZXR1cm4uIElmXG4gICAgICAgIC8vICBub3QgY2xvc2UgdGhlIG92ZXJsYXkgYW5kIGNoZWNrIG5leHRcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLl9vdmVybGF5SW5mb3NbaV07XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmZvLnNldHRpbmdzLmNsb3NlT25PdXRzaWRlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldi5jb21wb3NlZCA/IGV2LmNvbXBvc2VkUGF0aCgpWzBdIDogZXYudGFyZ2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGNsaWNrIGlzIG9uIHRoZSBvdmVybGF5IGVsZW1lbnQgb3Igb24gYW4gZWxlbWVudCBmcm9tIHRoZSBleGNsdXNpb24gbGlzdCwgYW5kIGlmIHNvIGRvIG5vdCBjbG9zZSB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVFbGVtZW50cyA9IGluZm8uc2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2sgP1xuICAgICAgICAgICAgICAgICAgICBbLi4uaW5mby5zZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljaywgb3ZlcmxheUVsZW1lbnRdIDogW292ZXJsYXlFbGVtZW50XTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luc2lkZUNsaWNrOiBib29sZWFuID0gZXhjbHVkZUVsZW1lbnRzLnNvbWUoZSA9PiBlLmNvbnRhaW5zKHRhcmdldCBhcyBOb2RlKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5zaWRlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAvLyAgaWYgdGhlIGNsaWNrIGlzIG91dHNpZGUgY2xpY2ssIGJ1dCBjbG9zZSBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoaW5mby5pZCwgZXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGFkZE91dHNpZGVDbGlja0xpc3RlbmVyKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLmNsb3NlT25PdXRzaWRlQ2xpY2spIHtcbiAgICAgICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsKSB7XG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5faGlkZShpbmZvLmlkLCBlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIC8vICBpZiBhbGwgb3ZlcmxheXMgbWludXMgY2xvc2luZyBvdmVybGF5cyBlcXVhbHMgb25lIGFkZCB0aGUgaGFuZGxlclxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5maWx0ZXIoeCA9PiB4LnNldHRpbmdzLmNsb3NlT25PdXRzaWRlQ2xpY2sgJiYgIXguc2V0dGluZ3MubW9kYWwpLmxlbmd0aCAtXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLmZpbHRlcih4ID0+IHguc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljayAmJiAheC5zZXR0aW5ncy5tb2RhbCAmJlxuICAgICAgICAgICAgICAgICAgICB4LmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpLmxlbmd0aCA9PT0gMSkge1xuXG4gICAgICAgICAgICAgICAgLy8gY2xpY2sgZXZlbnQgaXMgbm90IGZpcmVkIG9uIGlPUy4gVG8gbWFrZSBlbGVtZW50IFwiY2xpY2thYmxlXCIgd2UgYXJlXG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyB0aGUgY3Vyc29yIHRvIHBvaW50ZXJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNJT1MgJiYgIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9IHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yU3R5bGVJc1NldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGxldCBzaG91bGRSZW1vdmVDbGlja0V2ZW50TGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG8uc2V0dGluZ3MubW9kYWwgPT09IGZhbHNlICYmIG8uaWQgIT09IGluZm8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVtb3ZlQ2xpY2tFdmVudExpc3RlbmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQ2xpY2tFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnNvclN0eWxlSXNTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSB0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnNvclN0eWxlSXNTZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFJlc2l6ZUhhbmRsZXIoKSB7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdPdmVybGF5c0NvdW50ID1cbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJbmZvc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIobyA9PiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpXG4gICAgICAgICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGggLSBjbG9zaW5nT3ZlcmxheXNDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXcuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXBvc2l0aW9uQWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlUmVzaXplSGFuZGxlcigpIHtcbiAgICAgICAgY29uc3QgY2xvc2luZ092ZXJsYXlzQ291bnQgPVxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihvID0+IG8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCAtIGNsb3NpbmdPdmVybGF5c0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb25BbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRDbG9zZU9uRXNjYXBlTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbkVzY2FwZSAmJiAhdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIgPSBmcm9tRXZlbnQodGhpcy5fZG9jdW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2OiBLZXlib2FyZEV2ZW50KSA9PiBldi5rZXkgPT09ICdFc2NhcGUnIHx8IGV2LmtleSA9PT0gJ0VzYycpXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlT3ZlcmxheXMgPSB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKG8gPT4gby52aXNpYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAodmlzaWJsZU92ZXJsYXlzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRPdmVybGF5SW5mbyA9IHZpc2libGVPdmVybGF5c1t2aXNpYmxlT3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldE92ZXJsYXlJbmZvLnZpc2libGUgJiYgdGFyZ2V0T3ZlcmxheUluZm8uc2V0dGluZ3MuY2xvc2VPbkVzY2FwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUodGFyZ2V0T3ZlcmxheUluZm8uaWQsIGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1vZGFsQ2xhc3NlcyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtb3ZlcmxheV9fd3JhcHBlcicpO1xuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pO1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fd3JhcHBlci0tbW9kYWwnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RhbENsYXNzZXMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lneC1vdmVybGF5X193cmFwcGVyLS1tb2RhbCcpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbikge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyID0gdGhpcy5hbmltYXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJ1aWxkQW5pbWF0aW9uKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5vcGVuQW5pbWF0aW9uLCBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIuYW5pbWF0aW9uRW5kXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vcGVuQW5pbWF0aW9uRG9uZShpbmZvKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciA9IHRoaXMuYW5pbWF0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIC5idWlsZEFuaW1hdGlvbihpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuY2xvc2VBbmltYXRpb24sIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuYW5pbWF0aW9uRW5kXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZUFuaW1hdGlvbkRvbmUoaW5mbykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoIWluZm8ub3BlbkFuaW1hdGlvbkRldGFjaGluZykge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIpIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VBbmltYXRpb25Eb25lKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlRG9uZShpbmZvKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaEFuaW1hdGlvbnMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgLy8gLy8gVE9ETzogc2hvdWxkIHdlIGVtaXQgaGVyZSBvcGVuZWQgb3IgY2xvc2VkIGV2ZW50c1xuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyPy5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5maW5pc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmZpbmlzaCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -116,4 +116,4 @@ export class Util {
116
116
  return clonedObj;
117
117
  }
118
118
  }
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBbUQsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBTS9HLGtEQUFrRDtBQUNsRCxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzNCLDhEQUFTLENBQUE7SUFDVCxvRUFBYSxDQUFBO0lBQ2IsK0RBQVMsQ0FBQTtBQUNiLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBTixJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDekIsd0RBQVEsQ0FBQTtJQUNSLGdFQUFhLENBQUE7SUFDYiw2REFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUpXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFJNUI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLHdCQUlYO0FBSkQsV0FBWSx3QkFBd0I7SUFDaEMsbURBQXVCLENBQUE7SUFDdkIseUNBQWEsQ0FBQTtJQUNiLCtDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBSW5DO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkFNWDtBQU5ELFdBQVksZ0JBQWdCO0lBQ3hCLG1DQUFlLENBQUE7SUFDZixtQ0FBZSxDQUFBO0lBQ2YscUNBQWlCLENBQUE7SUFDakIsbUNBQWUsQ0FBQTtJQUNmLHVDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQ3hCLHFDQUFp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YUFBYSxDQUFDLE1BQU07UUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RixTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncywgY2xvbmVWYWx1ZSwgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuaW1hdGlvblBsYXllciB9IGZyb20gJy4uL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHsgSVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL0lQb3NpdGlvblN0cmF0ZWd5JztcbmltcG9ydCB7IElTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4vc2Nyb2xsJztcblxuLyogYmxhem9yQWx0ZXJuYXRlTmFtZTogR3JpZEhvcml6b250YWxBbGlnbm1lbnQgKi9cbmV4cG9ydCBlbnVtIEhvcml6b250YWxBbGlnbm1lbnQge1xuICAgIExlZnQgPSAtMSxcbiAgICBDZW50ZXIgPSAtMC41LFxuICAgIFJpZ2h0ID0gMFxufVxuXG4vKiBibGF6b3JBbHRlcm5hdGVOYW1lOiBHcmlkVmVydGljYWxBbGlnbm1lbnQgKi9cbmV4cG9ydCBlbnVtIFZlcnRpY2FsQWxpZ25tZW50IHtcbiAgICBUb3AgPSAtMSxcbiAgICBNaWRkbGUgPSAtMC41LFxuICAgIEJvdHRvbSA9IDBcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIG92ZXJsYXlzJyBwb3NpdGlvbiBzdHJhdGVneS5cbiAqL1xuZXhwb3J0IGVudW0gUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBDb25uZWN0ZWQgPSAnY29ubmVjdGVkJyxcbiAgICBBdXRvID0gJ2F1dG8nLFxuICAgIEVsYXN0aWMgPSAnZWxhc3RpYydcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBwb3NzaWJsZSBwb3NpdGlvbnMgZm9yIHRoZSByZWxhdGl2ZSBvdmVybGF5IHNldHRpbmdzIHByZXNldHMuXG4gKi9cbmV4cG9ydCBlbnVtIFJlbGF0aXZlUG9zaXRpb24ge1xuICAgIEFib3ZlID0gJ2Fib3ZlJyxcbiAgICBCZWxvdyA9ICdiZWxvdycsXG4gICAgQmVmb3JlID0gJ2JlZm9yZScsXG4gICAgQWZ0ZXIgPSAnYWZ0ZXInLFxuICAgIERlZmF1bHQgPSAnZGVmYXVsdCdcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBwb3NzaWJsZSBwb3NpdGlvbnMgZm9yIHRoZSBhYnNvbHV0ZSBvdmVybGF5IHNldHRpbmdzIHByZXNldHMuXG4gKi9cbmV4cG9ydCBlbnVtIEFic29sdXRlUG9zaXRpb24ge1xuICAgIEJvdHRvbSA9ICdib3R0b20nLFxuICAgIFRvcCA9ICd0b3AnLFxuICAgIENlbnRlciA9ICdjZW50ZXInXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFkZCBvciBzZXQgdGhlIG9mZnNldCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBlbnVtIE9mZnNldE1vZGUge1xuICAgIEFkZCxcbiAgICBTZXRcbn1cblxuLy8gVE9ETzogbWFrZSB0aGlzIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIFBvaW50IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgeDogbnVtYmVyLCBwdWJsaWMgeTogbnVtYmVyKSB7IH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3V0T2ZWaWV3UG9ydCB7XG4gICAgLyoqIE91dCBvZiB2aWV3IHBvcnQgYXQgVG9wIG9yIExlZnQgKi9cbiAgICBiYWNrOiBudW1iZXI7XG4gICAgLyoqIE91dCBvZiB2aWV3IHBvcnQgYXQgQm90dG9tIG9yIFJpZ2h0ICovXG4gICAgZm9yd2FyZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgIC8qKiBEaXJlY3Rpb24gaW4gd2hpY2ggdGhlIGNvbXBvbmVudCBzaG91bGQgc2hvdyAqL1xuICAgIGhvcml6b250YWxEaXJlY3Rpb24/OiBIb3Jpem9udGFsQWxpZ25tZW50O1xuICAgIC8qKiBEaXJlY3Rpb24gaW4gd2hpY2ggdGhlIGNvbXBvbmVudCBzaG91bGQgc2hvdyAqL1xuICAgIHZlcnRpY2FsRGlyZWN0aW9uPzogVmVydGljYWxBbGlnbm1lbnQ7XG4gICAgLyoqIFRhcmdldCdzIHN0YXJ0aW5nIHBvaW50ICovXG4gICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ/OiBIb3Jpem9udGFsQWxpZ25tZW50O1xuICAgIC8qKiBUYXJnZXQncyBzdGFydGluZyBwb2ludCAqL1xuICAgIHZlcnRpY2FsU3RhcnRQb2ludD86IFZlcnRpY2FsQWxpZ25tZW50O1xuICAgIC8qIGJsYXpvclN1cHByZXNzICovXG4gICAgLyoqIEFuaW1hdGlvbiBhcHBsaWVkIHdoaWxlIG92ZXJsYXkgb3BlbnMgKi9cbiAgICBvcGVuQW5pbWF0aW9uPzogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGE7XG4gICAgLyogYmxhem9yU3VwcHJlc3MgKi9cbiAgICAvKiogQW5pbWF0aW9uIGFwcGxpZWQgd2hpbGUgb3ZlcmxheSBjbG9zZXMgKi9cbiAgICBjbG9zZUFuaW1hdGlvbj86IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhO1xuICAgIC8qKiBUaGUgc2l6ZSB1cCB0byB3aGljaCBlbGVtZW50IG1heSBzaHJpbmsgd2hlbiBzaG93biBpbiBlbGFzdGljIHBvc2l0aW9uIHN0cmF0ZWd5ICovXG4gICAgbWluU2l6ZT86IFNpemU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheVNldHRpbmdzIHtcbiAgICAvKiogQXR0YWNoaW5nIHRhcmdldCBmb3IgdGhlIGNvbXBvbmVudCB0byBzaG93ICovXG4gICAgdGFyZ2V0PzogUG9pbnQgfCBIVE1MRWxlbWVudDtcbiAgICAvKiogUG9zaXRpb24gc3RyYXRlZ3kgdG8gdXNlIHdpdGggdGhlc2Ugc2V0dGluZ3MgKi9cbiAgICBwb3NpdGlvblN0cmF0ZWd5PzogSVBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgLyoqIFNjcm9sbCBzdHJhdGVneSB0byB1c2Ugd2l0aCB0aGVzZSBzZXR0aW5ncyAqL1xuICAgIHNjcm9sbFN0cmF0ZWd5PzogSVNjcm9sbFN0cmF0ZWd5O1xuICAgIC8qKiBTZXQgaWYgdGhlIG92ZXJsYXkgc2hvdWxkIGJlIGluIG1vZGFsIG1vZGUgKi9cbiAgICBtb2RhbD86IGJvb2xlYW47XG4gICAgLyoqIFNldCBpZiB0aGUgb3ZlcmxheSBzaG91bGQgY2xvc2Ugb24gb3V0c2lkZSBjbGljayAqL1xuICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s/OiBib29sZWFuO1xuICAgIC8qKiBTZXQgaWYgdGhlIG92ZXJsYXkgc2hvdWxkIGNsb3NlIHdoZW4gYEVzY2Aga2V5IGlzIHByZXNzZWQgKi9cbiAgICBjbG9zZU9uRXNjYXBlPzogYm9vbGVhbjtcbiAgICAvKiBibGF6b3JTdXBwcmVzcyAqL1xuICAgIC8qKiBTZXQgdGhlIG91dGxldCBjb250YWluZXIgdG8gYXR0YWNoIHRoZSBvdmVybGF5IHRvICovXG4gICAgb3V0bGV0PzogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBFbGVtZW50cyB0byBiZSBleGNsdWRlZCBmb3IgY2xvc2VPbk91dHNpZGVDbGljay5cbiAgICAgKiBDbGlja2luZyBvbiB0aGUgZWxlbWVudHMgaW4gdGhpcyBjb2xsZWN0aW9uIHdpbGwgbm90IGNsb3NlIHRoZSBvdmVybGF5IHdoZW4gY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWUuXG4gICAgICovXG4gICAgZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2s/OiBIVE1MRWxlbWVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqIElkIG9mIHRoZSBvdmVybGF5IGdlbmVyYXRlZCB3aXRoIGBhdHRhY2goKWAgbWV0aG9kICovXG4gICAgaWQ6IHN0cmluZztcbiAgICAvKiogQXZhaWxhYmxlIHdoZW4gYFR5cGU8VD5gIGlzIHByb3ZpZGVkIHRvIHRoZSBgYXR0YWNoKClgIG1ldGhvZCBhbmQgYWxsb3dzIGFjY2VzcyB0byB0aGUgY3JlYXRlZCBDb21wb25lbnQgaW5zdGFuY2UgKi9cbiAgICBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcbiAgICAvKiogV2lsbCBwcm92aWRlIHRoZSBlbGVtZW50UmVmIG9mIHRoZSBtYXJrdXAgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3ZlcmxheSAqL1xuICAgIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmPGFueT47XG4gICAgLyoqIFdpbGwgcHJvdmlkZSB0aGUgb3ZlcmxheSBzZXR0aW5ncyB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGF0dGFjaGVkICovXG4gICAgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3M7XG4gICAgLyoqIFdpbGwgcHJvdmlkZSB0aGUgb3JpZ2luYWwga2V5Ym9hcmQgZXZlbnQgaWYgY2xvc2VkIGZyb20gRVNDIG9yIGNsaWNrICovXG4gICAgZXZlbnQ/OiBFdmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyBleHRlbmRzIE92ZXJsYXlFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3Mge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlDbG9zaW5nRXZlbnRBcmdzIGV4dGVuZHMgT3ZlcmxheUV2ZW50QXJncywgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3Mge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlBbmltYXRpb25FdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqIElkIG9mIHRoZSBvdmVybGF5IGdlbmVyYXRlZCB3aXRoIGBhdHRhY2goKWAgbWV0aG9kICovXG4gICAgaWQ6IHN0cmluZztcbiAgICAvKiogQW5pbWF0aW9uIHBsYXllciB0aGF0IHdpbGwgcGxheSB0aGUgYW5pbWF0aW9uICovXG4gICAgYW5pbWF0aW9uUGxheWVyOiBBbmltYXRpb25QbGF5ZXI7XG4gICAgLyoqIFR5cGUgb2YgYW5pbWF0aW9uIHRvIGJlIHBsYXllZC4gSXQgc2hvdWxkIGJlIGVpdGhlciAnb3Blbicgb3IgJ2Nsb3NlJyAqL1xuICAgIGFuaW1hdGlvblR5cGU6ICdvcGVuJyB8ICdjbG9zZSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZSB7XG4gICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgaG9yaXpvbnRhbCBjb21wb25lbnQgb2YgU2l6ZSAqL1xuICAgIHdpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogR2V0cyBvciBzZXRzIHRoZSB2ZXJ0aWNhbCBjb21wb25lbnQgb2YgU2l6ZSAqL1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5SW5mbyB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdmlzaWJsZT86IGJvb2xlYW47XG4gICAgZGV0YWNoZWQ/OiBib29sZWFuO1xuICAgIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmO1xuICAgIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuICAgIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzO1xuICAgIGluaXRpYWxTaXplPzogU2l6ZTtcbiAgICBob29rPzogSFRNTEVsZW1lbnQ7XG4gICAgb3BlbkFuaW1hdGlvblBsYXllcj86IEFuaW1hdGlvblBsYXllcjtcbiAgICAvLyBjYWxsaW5nIGFuaW1hdGlvbi5kZXN0cm95IGluIGRldGFjaCBmaXJlcyBhbmltYXRpb24uZG9uZS4gVGhpcyBzaG91bGQgbm90IGhhcHBlblxuICAgIC8vIHRoaXMgaXMgd2h5IHdlIHNob3VsZCB0cmFjZSBpZiBhbmltYXRpb24gZXZlciBzdGFydGVkXG4gICAgb3BlbkFuaW1hdGlvbkRldGFjaGluZz86IGJvb2xlYW47XG4gICAgY2xvc2VBbmltYXRpb25QbGF5ZXI/OiBBbmltYXRpb25QbGF5ZXI7XG4gICAgLy8gY2FsbGluZyBhbmltYXRpb24uZGVzdHJveSBpbiBkZXRhY2ggZmlyZXMgYW5pbWF0aW9uLmRvbmUuIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW5cbiAgICAvLyB0aGlzIGlzIHdoeSB3ZSBzaG91bGQgdHJhY2UgaWYgYW5pbWF0aW9uIGV2ZXIgc3RhcnRlZFxuICAgIGNsb3NlQW5pbWF0aW9uRGV0YWNoaW5nPzogYm9vbGVhbjtcbiAgICBuZ1pvbmU6IE5nWm9uZTtcbiAgICB0cmFuc2Zvcm1YPzogbnVtYmVyO1xuICAgIHRyYW5zZm9ybVk/OiBudW1iZXI7XG4gICAgZXZlbnQ/OiBFdmVudDtcbiAgICB3cmFwcGVyRWxlbWVudD86IEhUTUxFbGVtZW50O1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0ZWRGaXQge1xuICAgIGNvbnRlbnRFbGVtZW50UmVjdD86IFBhcnRpYWw8RE9NUmVjdD47XG4gICAgdGFyZ2V0UmVjdD86IFBhcnRpYWw8RE9NUmVjdD47XG4gICAgdmlld1BvcnRSZWN0PzogUGFydGlhbDxET01SZWN0PjtcbiAgICBmaXRIb3Jpem9udGFsPzogT3V0T2ZWaWV3UG9ydDtcbiAgICBmaXRWZXJ0aWNhbD86IE91dE9mVmlld1BvcnQ7XG4gICAgbGVmdD86IG51bWJlcjtcbiAgICByaWdodD86IG51bWJlcjtcbiAgICB0b3A/OiBudW1iZXI7XG4gICAgYm90dG9tPzogbnVtYmVyO1xuICAgIGhvcml6b250YWxPZmZzZXQ/OiBudW1iZXI7XG4gICAgdmVydGljYWxPZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNsYXNzIFV0aWwge1xuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHJlY3RhbmdsZSBvZiB0YXJnZXQgZm9yIHByb3ZpZGVkIG92ZXJsYXkgc2V0dGluZ3MuIERlZmF1bHRzIHRvIDAsMCwwLDAsMCwwIHJlY3RhbmdsZVxuICAgICAqIGlmIG5vIHRhcmdldCBpcyBwcm92aWRlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHNldHRpbmdzIE92ZXJsYXkgc2V0dGluZ3MgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0YXJnZXQgcmVjdGFuZ2xlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRUYXJnZXRSZWN0KHRhcmdldD86IFBvaW50IHwgSFRNTEVsZW1lbnQpOiBQYXJ0aWFsPERPTVJlY3Q+IHtcbiAgICAgICAgbGV0IHRhcmdldFJlY3Q6IFBhcnRpYWw8RE9NUmVjdD4gPSB7XG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICB3aWR0aDogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRhcmdldFJlY3QgPSAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQb2ludCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0YXJnZXQgYXMgUG9pbnQ7XG4gICAgICAgICAgICB0YXJnZXRSZWN0ID0ge1xuICAgICAgICAgICAgICAgIGJvdHRvbTogdGFyZ2V0UG9pbnQueSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0UG9pbnQueCxcbiAgICAgICAgICAgICAgICByaWdodDogdGFyZ2V0UG9pbnQueCxcbiAgICAgICAgICAgICAgICB0b3A6IHRhcmdldFBvaW50LnksXG4gICAgICAgICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRWaWV3cG9ydFJlY3QoZG9jdW1lbnQ6IERvY3VtZW50KTogUGFydGlhbDxET01SZWN0PiB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IFV0aWwuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbihkb2N1bWVudCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogc2Nyb2xsUG9zaXRpb24ueSxcbiAgICAgICAgICAgIGxlZnQ6IHNjcm9sbFBvc2l0aW9uLngsXG4gICAgICAgICAgICByaWdodDogc2Nyb2xsUG9zaXRpb24ueCArIHdpZHRoLFxuICAgICAgICAgICAgYm90dG9tOiBzY3JvbGxQb3NpdGlvbi55ICsgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKGRvY3VtZW50OiBEb2N1bWVudCk6IFBvaW50IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBkb2N1bWVudFJlY3QgPSBkb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uID1cbiAgICAgICAgICAgIC1kb2N1bWVudFJlY3QubGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgfHwgd2luZG93LnNjcm9sbFggfHwgZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgMDtcbiAgICAgICAgY29uc3QgdmVydGljYWxTY3JvbGxQb3NpdGlvbiA9IC1kb2N1bWVudFJlY3QudG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIHx8IHdpbmRvdy5zY3JvbGxZIHx8IGRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMDtcblxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KGhvcml6b250YWxTY3JvbGxQb3NpdGlvbiwgdmVydGljYWxTY3JvbGxQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjbG9uZUluc3RhbmNlKG9iamVjdCkge1xuICAgICAgICBjb25zdCBjbG9uZWRPYmogPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCkpLCBvYmplY3QpO1xuICAgICAgICBjbG9uZWRPYmouc2V0dGluZ3MgPSBjbG9uZVZhbHVlKGNsb25lZE9iai5zZXR0aW5ncyk7XG4gICAgICAgIHJldHVybiBjbG9uZWRPYmo7XG4gICAgfVxufVxuIl19
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBbUQsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBTS9HLGtEQUFrRDtBQUNsRCxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzNCLDhEQUFTLENBQUE7SUFDVCxvRUFBYSxDQUFBO0lBQ2IsK0RBQVMsQ0FBQTtBQUNiLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBTixJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDekIsd0RBQVEsQ0FBQTtJQUNSLGdFQUFhLENBQUE7SUFDYiw2REFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUpXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFJNUI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLHdCQUlYO0FBSkQsV0FBWSx3QkFBd0I7SUFDaEMsbURBQXVCLENBQUE7SUFDdkIseUNBQWEsQ0FBQTtJQUNiLCtDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBSW5DO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkFNWDtBQU5ELFdBQVksZ0JBQWdCO0lBQ3hCLG1DQUFlLENBQUE7SUFDZixtQ0FBZSxDQUFBO0lBQ2YscUNBQWlCLENBQUE7SUFDakIsbUNBQWUsQ0FBQTtJQUNmLHVDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQ3hCLHFDQUFp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YUFBYSxDQUFDLE1BQU07UUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RixTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3MsIGNsb25lVmFsdWUsIElCYXNlRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbmltYXRpb25QbGF5ZXIgfSBmcm9tICcuLi9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7IElQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9JUG9zaXRpb25TdHJhdGVneSc7XG5pbXBvcnQgeyBJU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuL3Njcm9sbCc7XG5cbi8qIGJsYXpvckFsdGVybmF0ZU5hbWU6IEdyaWRIb3Jpem9udGFsQWxpZ25tZW50ICovXG5leHBvcnQgZW51bSBIb3Jpem9udGFsQWxpZ25tZW50IHtcbiAgICBMZWZ0ID0gLTEsXG4gICAgQ2VudGVyID0gLTAuNSxcbiAgICBSaWdodCA9IDBcbn1cblxuLyogYmxhem9yQWx0ZXJuYXRlTmFtZTogR3JpZFZlcnRpY2FsQWxpZ25tZW50ICovXG5leHBvcnQgZW51bSBWZXJ0aWNhbEFsaWdubWVudCB7XG4gICAgVG9wID0gLTEsXG4gICAgTWlkZGxlID0gLTAuNSxcbiAgICBCb3R0b20gPSAwXG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSBvdmVybGF5cycgcG9zaXRpb24gc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBlbnVtIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSB7XG4gICAgQ29ubmVjdGVkID0gJ2Nvbm5lY3RlZCcsXG4gICAgQXV0byA9ICdhdXRvJyxcbiAgICBFbGFzdGljID0gJ2VsYXN0aWMnXG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgcmVsYXRpdmUgb3ZlcmxheSBzZXR0aW5ncyBwcmVzZXRzLlxuICovXG5leHBvcnQgZW51bSBSZWxhdGl2ZVBvc2l0aW9uIHtcbiAgICBBYm92ZSA9ICdhYm92ZScsXG4gICAgQmVsb3cgPSAnYmVsb3cnLFxuICAgIEJlZm9yZSA9ICdiZWZvcmUnLFxuICAgIEFmdGVyID0gJ2FmdGVyJyxcbiAgICBEZWZhdWx0ID0gJ2RlZmF1bHQnXG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgYWJzb2x1dGUgb3ZlcmxheSBzZXR0aW5ncyBwcmVzZXRzLlxuICovXG5leHBvcnQgZW51bSBBYnNvbHV0ZVBvc2l0aW9uIHtcbiAgICBCb3R0b20gPSAnYm90dG9tJyxcbiAgICBUb3AgPSAndG9wJyxcbiAgICBDZW50ZXIgPSAnY2VudGVyJ1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBhZGQgb3Igc2V0IHRoZSBvZmZzZXQgdmFsdWVzLlxuICovXG5leHBvcnQgZW51bSBPZmZzZXRNb2RlIHtcbiAgICBBZGQsXG4gICAgU2V0XG59XG5cbi8vIFRPRE86IG1ha2UgdGhpcyBpbnRlcmZhY2VcbmV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHg6IG51bWJlciwgcHVibGljIHk6IG51bWJlcikgeyB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgaW50ZXJmYWNlIE91dE9mVmlld1BvcnQge1xuICAgIC8qKiBPdXQgb2YgdmlldyBwb3J0IGF0IFRvcCBvciBMZWZ0ICovXG4gICAgYmFjazogbnVtYmVyO1xuICAgIC8qKiBPdXQgb2YgdmlldyBwb3J0IGF0IEJvdHRvbSBvciBSaWdodCAqL1xuICAgIGZvcndhcmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvblNldHRpbmdzIHtcbiAgICAvKiogRGlyZWN0aW9uIGluIHdoaWNoIHRoZSBjb21wb25lbnQgc2hvdWxkIHNob3cgKi9cbiAgICBob3Jpem9udGFsRGlyZWN0aW9uPzogSG9yaXpvbnRhbEFsaWdubWVudDtcbiAgICAvKiogRGlyZWN0aW9uIGluIHdoaWNoIHRoZSBjb21wb25lbnQgc2hvdWxkIHNob3cgKi9cbiAgICB2ZXJ0aWNhbERpcmVjdGlvbj86IFZlcnRpY2FsQWxpZ25tZW50O1xuICAgIC8qKiBUYXJnZXQncyBzdGFydGluZyBwb2ludCAqL1xuICAgIGhvcml6b250YWxTdGFydFBvaW50PzogSG9yaXpvbnRhbEFsaWdubWVudDtcbiAgICAvKiogVGFyZ2V0J3Mgc3RhcnRpbmcgcG9pbnQgKi9cbiAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ/OiBWZXJ0aWNhbEFsaWdubWVudDtcbiAgICAvKiBibGF6b3JTdXBwcmVzcyAqL1xuICAgIC8qKiBBbmltYXRpb24gYXBwbGllZCB3aGlsZSBvdmVybGF5IG9wZW5zICovXG4gICAgb3BlbkFuaW1hdGlvbj86IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhO1xuICAgIC8qIGJsYXpvclN1cHByZXNzICovXG4gICAgLyoqIEFuaW1hdGlvbiBhcHBsaWVkIHdoaWxlIG92ZXJsYXkgY2xvc2VzICovXG4gICAgY2xvc2VBbmltYXRpb24/OiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YTtcbiAgICAvKiogVGhlIHNpemUgdXAgdG8gd2hpY2ggZWxlbWVudCBtYXkgc2hyaW5rIHdoZW4gc2hvd24gaW4gZWxhc3RpYyBwb3NpdGlvbiBzdHJhdGVneSAqL1xuICAgIG1pblNpemU/OiBTaXplO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgLyoqIEF0dGFjaGluZyB0YXJnZXQgZm9yIHRoZSBjb21wb25lbnQgdG8gc2hvdyAqL1xuICAgIHRhcmdldD86IFBvaW50IHwgSFRNTEVsZW1lbnQ7XG4gICAgLyoqIFBvc2l0aW9uIHN0cmF0ZWd5IHRvIHVzZSB3aXRoIHRoZXNlIHNldHRpbmdzICovXG4gICAgcG9zaXRpb25TdHJhdGVneT86IElQb3NpdGlvblN0cmF0ZWd5O1xuICAgIC8qKiBTY3JvbGwgc3RyYXRlZ3kgdG8gdXNlIHdpdGggdGhlc2Ugc2V0dGluZ3MgKi9cbiAgICBzY3JvbGxTdHJhdGVneT86IElTY3JvbGxTdHJhdGVneTtcbiAgICAvKiogU2V0IGlmIHRoZSBvdmVybGF5IHNob3VsZCBiZSBpbiBtb2RhbCBtb2RlICovXG4gICAgbW9kYWw/OiBib29sZWFuO1xuICAgIC8qKiBTZXQgaWYgdGhlIG92ZXJsYXkgc2hvdWxkIGNsb3NlIG9uIG91dHNpZGUgY2xpY2sgKi9cbiAgICBjbG9zZU9uT3V0c2lkZUNsaWNrPzogYm9vbGVhbjtcbiAgICAvKiogU2V0IGlmIHRoZSBvdmVybGF5IHNob3VsZCBjbG9zZSB3aGVuIGBFc2NgIGtleSBpcyBwcmVzc2VkICovXG4gICAgY2xvc2VPbkVzY2FwZT86IGJvb2xlYW47XG4gICAgLyogYmxhem9yU3VwcHJlc3MgKi9cbiAgICAvKiogU2V0IHRoZSBvdXRsZXQgY29udGFpbmVyIHRvIGF0dGFjaCB0aGUgb3ZlcmxheSB0byAqL1xuICAgIG91dGxldD86IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogRWxlbWVudHMgdG8gYmUgZXhjbHVkZWQgZm9yIGNsb3NlT25PdXRzaWRlQ2xpY2suXG4gICAgICogQ2xpY2tpbmcgb24gdGhlIGVsZW1lbnRzIGluIHRoaXMgY29sbGVjdGlvbiB3aWxsIG5vdCBjbG9zZSB0aGUgb3ZlcmxheSB3aGVuIGNsb3NlT25PdXRzaWRlQ2xpY2sgPSB0cnVlLlxuICAgICAqL1xuICAgIGV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrPzogSFRNTEVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKiBJZCBvZiB0aGUgb3ZlcmxheSBnZW5lcmF0ZWQgd2l0aCBgYXR0YWNoKClgIG1ldGhvZCAqL1xuICAgIGlkOiBzdHJpbmc7XG4gICAgLyoqIEF2YWlsYWJsZSB3aGVuIGBUeXBlPFQ+YCBpcyBwcm92aWRlZCB0byB0aGUgYGF0dGFjaCgpYCBtZXRob2QgYW5kIGFsbG93cyBhY2Nlc3MgdG8gdGhlIGNyZWF0ZWQgQ29tcG9uZW50IGluc3RhbmNlICovXG4gICAgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XG4gICAgLyoqIFdpbGwgcHJvdmlkZSB0aGUgZWxlbWVudFJlZiBvZiB0aGUgbWFya3VwIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG92ZXJsYXkgKi9cbiAgICBlbGVtZW50UmVmPzogRWxlbWVudFJlZjxhbnk+O1xuICAgIC8qKiBXaWxsIHByb3ZpZGUgdGhlIG92ZXJsYXkgc2V0dGluZ3Mgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhdHRhY2hlZCAqL1xuICAgIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzO1xuICAgIC8qKiBXaWxsIHByb3ZpZGUgdGhlIG9yaWdpbmFsIGtleWJvYXJkIGV2ZW50IGlmIGNsb3NlZCBmcm9tIEVTQyBvciBjbGljayAqL1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MgZXh0ZW5kcyBPdmVybGF5RXZlbnRBcmdzLCBDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5Q2xvc2luZ0V2ZW50QXJncyBleHRlbmRzIE92ZXJsYXlFdmVudEFyZ3MsIENhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKiBJZCBvZiB0aGUgb3ZlcmxheSBnZW5lcmF0ZWQgd2l0aCBgYXR0YWNoKClgIG1ldGhvZCAqL1xuICAgIGlkOiBzdHJpbmc7XG4gICAgLyoqIEFuaW1hdGlvbiBwbGF5ZXIgdGhhdCB3aWxsIHBsYXkgdGhlIGFuaW1hdGlvbiAqL1xuICAgIGFuaW1hdGlvblBsYXllcjogQW5pbWF0aW9uUGxheWVyO1xuICAgIC8qKiBUeXBlIG9mIGFuaW1hdGlvbiB0byBiZSBwbGF5ZWQuIEl0IHNob3VsZCBiZSBlaXRoZXIgJ29wZW4nIG9yICdjbG9zZScgKi9cbiAgICBhbmltYXRpb25UeXBlOiAnb3BlbicgfCAnY2xvc2UnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpemUge1xuICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGhvcml6b250YWwgY29tcG9uZW50IG9mIFNpemUgKi9cbiAgICB3aWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgdmVydGljYWwgY29tcG9uZW50IG9mIFNpemUgKi9cbiAgICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheUluZm8ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHZpc2libGU/OiBib29sZWFuO1xuICAgIGRldGFjaGVkPzogYm9vbGVhbjtcbiAgICBlbGVtZW50UmVmPzogRWxlbWVudFJlZjtcbiAgICBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcbiAgICBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncztcbiAgICBpbml0aWFsU2l6ZT86IFNpemU7XG4gICAgaG9vaz86IEhUTUxFbGVtZW50O1xuICAgIG9wZW5BbmltYXRpb25QbGF5ZXI/OiBBbmltYXRpb25QbGF5ZXI7XG4gICAgLy8gY2FsbGluZyBhbmltYXRpb24uZGVzdHJveSBpbiBkZXRhY2ggZmlyZXMgYW5pbWF0aW9uLmRvbmUuIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW5cbiAgICAvLyB0aGlzIGlzIHdoeSB3ZSBzaG91bGQgdHJhY2UgaWYgYW5pbWF0aW9uIGV2ZXIgc3RhcnRlZFxuICAgIG9wZW5BbmltYXRpb25EZXRhY2hpbmc/OiBib29sZWFuO1xuICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyPzogQW5pbWF0aW9uUGxheWVyO1xuICAgIC8vIGNhbGxpbmcgYW5pbWF0aW9uLmRlc3Ryb3kgaW4gZGV0YWNoIGZpcmVzIGFuaW1hdGlvbi5kb25lLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuXG4gICAgLy8gdGhpcyBpcyB3aHkgd2Ugc2hvdWxkIHRyYWNlIGlmIGFuaW1hdGlvbiBldmVyIHN0YXJ0ZWRcbiAgICBjbG9zZUFuaW1hdGlvbkRldGFjaGluZz86IGJvb2xlYW47XG4gICAgbmdab25lOiBOZ1pvbmU7XG4gICAgdHJhbnNmb3JtWD86IG51bWJlcjtcbiAgICB0cmFuc2Zvcm1ZPzogbnVtYmVyO1xuICAgIGV2ZW50PzogRXZlbnQ7XG4gICAgd3JhcHBlckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGVkRml0IHtcbiAgICBjb250ZW50RWxlbWVudFJlY3Q/OiBQYXJ0aWFsPERPTVJlY3Q+O1xuICAgIHRhcmdldFJlY3Q/OiBQYXJ0aWFsPERPTVJlY3Q+O1xuICAgIHZpZXdQb3J0UmVjdD86IFBhcnRpYWw8RE9NUmVjdD47XG4gICAgZml0SG9yaXpvbnRhbD86IE91dE9mVmlld1BvcnQ7XG4gICAgZml0VmVydGljYWw/OiBPdXRPZlZpZXdQb3J0O1xuICAgIGxlZnQ/OiBudW1iZXI7XG4gICAgcmlnaHQ/OiBudW1iZXI7XG4gICAgdG9wPzogbnVtYmVyO1xuICAgIGJvdHRvbT86IG51bWJlcjtcbiAgICBob3Jpem9udGFsT2Zmc2V0PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsT2Zmc2V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlDcmVhdGVTZXR0aW5ncyBleHRlbmRzIE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogQW4gYEluamVjdG9yYCBpbnN0YW5jZSB0byBhZGQgaW4gdGhlIGNyZWF0ZWQgY29tcG9uZW50IHJlZidzIGluamVjdG9ycyB0cmVlLlxuICAgICAqL1xuICAgIGluamVjdG9yPzogSW5qZWN0b3Jcbn1cblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgVXRpbCB7XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcmVjdGFuZ2xlIG9mIHRhcmdldCBmb3IgcHJvdmlkZWQgb3ZlcmxheSBzZXR0aW5ncy4gRGVmYXVsdHMgdG8gMCwwLDAsMCwwLDAgcmVjdGFuZ2xlXG4gICAgICogaWYgbm8gdGFyZ2V0IGlzIHByb3ZpZGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgT3ZlcmxheSBzZXR0aW5ncyBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRhcmdldCByZWN0YW5nbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldFRhcmdldFJlY3QodGFyZ2V0PzogUG9pbnQgfCBIVE1MRWxlbWVudCk6IFBhcnRpYWw8RE9NUmVjdD4ge1xuICAgICAgICBsZXQgdGFyZ2V0UmVjdDogUGFydGlhbDxET01SZWN0PiA9IHtcbiAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIHdpZHRoOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgdGFyZ2V0UmVjdCA9ICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRhcmdldCBhcyBQb2ludDtcbiAgICAgICAgICAgIHRhcmdldFJlY3QgPSB7XG4gICAgICAgICAgICAgICAgYm90dG9tOiB0YXJnZXRQb2ludC55LFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0YXJnZXRQb2ludC54LFxuICAgICAgICAgICAgICAgIHJpZ2h0OiB0YXJnZXRQb2ludC54LFxuICAgICAgICAgICAgICAgIHRvcDogdGFyZ2V0UG9pbnQueSxcbiAgICAgICAgICAgICAgICB3aWR0aDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFZpZXdwb3J0UmVjdChkb2N1bWVudDogRG9jdW1lbnQpOiBQYXJ0aWFsPERPTVJlY3Q+IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gVXRpbC5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKGRvY3VtZW50KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wOiBzY3JvbGxQb3NpdGlvbi55LFxuICAgICAgICAgICAgbGVmdDogc2Nyb2xsUG9zaXRpb24ueCxcbiAgICAgICAgICAgIHJpZ2h0OiBzY3JvbGxQb3NpdGlvbi54ICsgd2lkdGgsXG4gICAgICAgICAgICBib3R0b206IHNjcm9sbFBvc2l0aW9uLnkgKyBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oZG9jdW1lbnQ6IERvY3VtZW50KTogUG9pbnQge1xuICAgICAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsUG9zaXRpb24gPVxuICAgICAgICAgICAgLWRvY3VtZW50UmVjdC5sZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCB8fCB3aW5kb3cuc2Nyb2xsWCB8fCBkb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCAwO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbFBvc2l0aW9uID0gLWRvY3VtZW50UmVjdC50b3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgd2luZG93LnNjcm9sbFkgfHwgZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCAwO1xuXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoaG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uLCB2ZXJ0aWNhbFNjcm9sbFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNsb25lSW5zdGFuY2Uob2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGNsb25lZE9iaiA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSksIG9iamVjdCk7XG4gICAgICAgIGNsb25lZE9iai5zZXR0aW5ncyA9IGNsb25lVmFsdWUoY2xvbmVkT2JqLnNldHRpbmdzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lZE9iajtcbiAgICB9XG59XG4iXX0=