@coolon/angular-ui-powerups 0.0.107 → 0.0.109

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.
@@ -3,8 +3,7 @@
3
3
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  import * as tslib_1 from "tslib";
6
- import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart } from '@angular/router';
7
- import { Dsl, GarbageCollector, lang, Logger, Trace } from '@coolon/pectin';
6
+ import { Dsl, GarbageCollector, lang, Logger } from '@coolon/pectin';
8
7
  import { PlaceComponentDeactivationHandler } from './place-component-deactivation-handler';
9
8
  /**
10
9
  * @abstract
@@ -499,6 +498,7 @@ if (false) {
499
498
  onRouterStarted(event) {
500
499
  return new InteractionTransition(this.context, event.url);
501
500
  }
501
+ // @Trace()
502
502
  /**
503
503
  * @param {?} event
504
504
  * @return {?}
@@ -507,12 +507,6 @@ if (false) {
507
507
  return new InteractionPopStateTransition(this.context, event.url);
508
508
  }
509
509
  }
510
- tslib_1.__decorate([
511
- Trace(),
512
- tslib_1.__metadata("design:type", Function),
513
- tslib_1.__metadata("design:paramtypes", [NavigationStart]),
514
- tslib_1.__metadata("design:returntype", NavigationState)
515
- ], IdleDuringInteraction.prototype, "onPopState", null);
516
510
  NavigationState.IdleDuringInteraction = IdleDuringInteraction;
517
511
  if (false) {
518
512
  /** @type {?} */
@@ -552,6 +546,7 @@ if (false) {
552
546
  super(...arguments);
553
547
  this.isPopState = false;
554
548
  }
549
+ // @Trace()
555
550
  /**
556
551
  * @param {?} event
557
552
  * @return {?}
@@ -567,6 +562,7 @@ if (false) {
567
562
  return new Idle(this.context);
568
563
  }
569
564
  }
565
+ // @Trace()
570
566
  /**
571
567
  * @param {?} event
572
568
  * @return {?}
@@ -575,6 +571,7 @@ if (false) {
575
571
  // navigation was aborted.
576
572
  return new IdleDuringInteraction(this.context, this.startingUrl);
577
573
  }
574
+ // @Trace()
578
575
  /**
579
576
  * @param {?} event
580
577
  * @return {?}
@@ -588,24 +585,6 @@ if (false) {
588
585
  }
589
586
  }
590
587
  }
591
- tslib_1.__decorate([
592
- Trace(),
593
- tslib_1.__metadata("design:type", Function),
594
- tslib_1.__metadata("design:paramtypes", [NavigationCancel]),
595
- tslib_1.__metadata("design:returntype", NavigationState)
596
- ], InteractionTransition.prototype, "onRouterCancelled", null);
597
- tslib_1.__decorate([
598
- Trace(),
599
- tslib_1.__metadata("design:type", Function),
600
- tslib_1.__metadata("design:paramtypes", [NavigationError]),
601
- tslib_1.__metadata("design:returntype", NavigationState)
602
- ], InteractionTransition.prototype, "onRouterError", null);
603
- tslib_1.__decorate([
604
- Trace(),
605
- tslib_1.__metadata("design:type", Function),
606
- tslib_1.__metadata("design:paramtypes", [NavigationEnd]),
607
- tslib_1.__metadata("design:returntype", NavigationState)
608
- ], InteractionTransition.prototype, "onRouterEnd", null);
609
588
  NavigationState.InteractionTransition = InteractionTransition;
610
589
  if (false) {
611
590
  /** @type {?} */
@@ -620,6 +599,7 @@ if (false) {
620
599
  super(...arguments);
621
600
  this.isPopState = true;
622
601
  }
602
+ // @Trace()
623
603
  /**
624
604
  * @param {?} event
625
605
  * @return {?}
@@ -635,6 +615,7 @@ if (false) {
635
615
  return new Idle(this.context);
636
616
  }
637
617
  }
618
+ // @Trace()
638
619
  /**
639
620
  * @param {?} event
640
621
  * @return {?}
@@ -648,18 +629,6 @@ if (false) {
648
629
  }
649
630
  }
650
631
  }
651
- tslib_1.__decorate([
652
- Trace(),
653
- tslib_1.__metadata("design:type", Function),
654
- tslib_1.__metadata("design:paramtypes", [NavigationCancel]),
655
- tslib_1.__metadata("design:returntype", NavigationState)
656
- ], InteractionPopStateTransition.prototype, "onRouterCancelled", null);
657
- tslib_1.__decorate([
658
- Trace(),
659
- tslib_1.__metadata("design:type", Function),
660
- tslib_1.__metadata("design:paramtypes", [NavigationEnd]),
661
- tslib_1.__metadata("design:returntype", NavigationState)
662
- ], InteractionPopStateTransition.prototype, "onRouterEnd", null);
663
632
  NavigationState.InteractionPopStateTransition = InteractionPopStateTransition;
664
633
  if (false) {
665
634
  /** @type {?} */
@@ -693,16 +662,21 @@ if (false) {
693
662
  onRouterStarted(event) {
694
663
  return this.ignore(event);
695
664
  }
665
+ // @Trace()
696
666
  /**
697
667
  * @param {?} event
698
668
  * @return {?}
699
669
  */
700
670
  onRouterCancelled(event) {
701
671
  // Depending on the state of the router and what was done we get a different
702
- // sequence of events. I.e. If they just clicked a link we'll get a cancel
703
- // with the locationChangeTriggerUrl as the final event. However the user
704
- // started the initial navigation with a pop state then we'll get one of
705
- // those with the locationChangeTriggerUrl but no cancel event with it.
672
+ // sequence of events.
673
+ // If the navigation change was triggered by clicking a link we'll get a cancel with the locationChangeTriggerUrl as the final event.
674
+ // If the navigation change was triggered with a pop state then we'll get an onPopState with the locationChangeTriggerUrl but no cancel event with it.
675
+ if (this.gotPopStateWithLeavingUrl && this.interactionService.isActive()) {
676
+ /** @type {?} */
677
+ const interactionIds = this.interactionService.activeInteractionContextIds.value;
678
+ this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);
679
+ }
706
680
  return this.gotPopStateWithLeavingUrl || this.locationChangeTriggerUrl === event.url ? this.createIdleState() : this.ignore(event);
707
681
  }
708
682
  /**
@@ -756,12 +730,6 @@ if (false) {
756
730
  return `${this.constructor.name}(isIdl: ${this.idle}, startingUrl: ${this.startingUrl}, locationChangeTriggerUrl:${this.locationChangeTriggerUrl})`;
757
731
  }
758
732
  }
759
- tslib_1.__decorate([
760
- Trace(),
761
- tslib_1.__metadata("design:type", Function),
762
- tslib_1.__metadata("design:paramtypes", [NavigationCancel]),
763
- tslib_1.__metadata("design:returntype", NavigationState)
764
- ], CancelledDuringNavigationInteraction.prototype, "onRouterCancelled", null);
765
733
  NavigationState.CancelledDuringNavigationInteraction = CancelledDuringNavigationInteraction;
766
734
  if (false) {
767
735
  /** @type {?} */
@@ -779,4 +747,4 @@ if (false) {
779
747
  CancelledDuringNavigationInteraction.prototype.locationChangeTriggerUrl;
780
748
  }
781
749
  })(NavigationState || (NavigationState = {}));
782
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE1RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUUzRixNQUFNLE9BQWdCLGVBQWdCLFNBQVEsZ0JBQWdCOzs7O0lBUTVELFlBQStCLE9BQWdDO1FBQzdELEtBQUssRUFBRSxDQUFDO1FBRHFCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBTnZELFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQVFwRCxDQUFDOzs7O0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDOzs7O0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDOUIsQ0FBQzs7OztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbEMsQ0FBQzs7OztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUN6QyxDQUFDOzs7O0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFZO1FBQ3JCLElBQUksQ0FBQyxPQUFP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QjtnREFBRyxlQUFlO2lGQU8xRDtJQTVCVSxvREFBb0MsdUNBMERoRCxDQUFBOzs7UUF4REMsMERBQTRCOzs7OztRQUM1Qix5RUFBMEM7O1FBRzlCLDJEQUE0Qjs7UUFDNUIseUVBQTJDOztRQUMzQyx3RUFBeUM7O0FBbUR6RCxDQUFDLEVBMVRnQixlQUFlLEtBQWYsZUFBZSxRQTBUL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyRXZlbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNsLCBHYXJiYWdlQ29sbGVjdG9yLCBsYW5nLCBMb2dnZXIsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgUGxhY2VSb3V0ZXIgfSBmcm9tICcuLi9wbGFjZS1yb3V0ZXInO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuLi92aXNpdCc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIgfSBmcm9tICcuL3BsYWNlLWNvbXBvbmVudC1kZWFjdGl2YXRpb24taGFuZGxlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIF92aXNpdHMgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXQ+KCk7XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWw6IGJvb2xlYW47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmc7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzUG9wU3RhdGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIGdldCBpZGxlKCkge1xuICAgIHJldHVybiAhdGhpcy5pc1RyYW5zaXRpb25hbDtcbiAgfVxuXG4gIGdldCBwbGFjZVJvdXRlcigpOiBQbGFjZVJvdXRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5wbGFjZVJvdXRlcjtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvblNlcnZpY2UoKTogSW50ZXJhY3Rpb25TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZTtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0b3JlVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5fdmlzaXRzLnNldCh2aXNpdC5wbGFjZURlZmluaXRpb24sIHZpc2l0KTtcbiAgfVxuXG4gIGdldFZpc2l0Rm9yKHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaXRzLmdldChwbGFjZURlZik7XG4gIH1cblxuICBvblBsYWNlTmF2aWdhdGlvblN0YXJ0KHZpc2l0OiBWaXNpdCwgaW5pdGlhbFVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignb25QbGFjZU5hdmlnYXRpb25TdGFydCcpO1xuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24obmV3VXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKCdvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignY2FuRGVhY3RpdmF0ZVBsYWNlJyk7XG4gIH1cblxuICBnZXRWaXNpdHMoKTogVmlzaXRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdmlzaXRzLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbGxlZ2FsVHJhbnNpdGlvbjxSPihtZXNzYWdlOiBzdHJpbmcgfCBSb3V0ZXJFdmVudCk6IFIge1xuICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgJHttZXNzYWdlLnRvU3RyaW5nKCl9IG5vdCBzdXBwb3J0ZWQgYnkgJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBsYWNlUm91dGVyLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2l0aW9uU3RhdGVGb3IoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGNvbnN0IHBvcHN0YXRlID0gZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZSc7XG4gICAgcmV0dXJuIHBvcHN0YXRlID9cbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5Qb3BTdGF0ZVRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgIDpcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKSA6XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuTmF2aWdhdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSWRsZVN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpID9cbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZSh0aGlzLmNvbnRleHQpO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsKSB7XG4gICAgdGhpcy5wbGFjZVJvdXRlci5yZXNldEJyb3dzZXJMb2NhdGlvbih1cmwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTmF2aWdhdGlvblN0YXRlIHtcblxuICBleHBvcnQgY2xhc3MgQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBwbGFjZVJvdXRlcjogUGxhY2VSb3V0ZXIsXG4gICAgICByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSxcbiAgICAgIHJlYWRvbmx5IG5vdGlmeVN1Y2Nlc3M6IChzdWNjZXNzOiBOYXZpZ2F0aW9uU3RhdGUpID0+IHZvaWQpIHtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZSBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSBmYWxzZTtcbiAgICByZWFkb25seSBzdGFydGluZ1VybCA9IG51bGw7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdDogVmlzaXQsIGluaXRpYWxVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uVHJhbnNpdGlvbiA9IG5ldyBOYXZpZ2F0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGluaXRpYWxVcmwpO1xuICAgICAgbmF2aWdhdGlvblRyYW5zaXRpb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgICAvLyBjYWxsaW5nIGFuZ3VsYXJMb2NhdGlvbi5nbygpIHRvIGNsZWFyIGJhY2sgc3RhdGUgY2FuIHRyaWdnZXIgcm91dGVyIGN5Y2xlcyB0byB0aGUgY3VycmVudCB1cmwgaWYgd2UgZG9uJ3QgaWdub3JlIHRoZW1cbiAgICAgIGlmIChldmVudC51cmwgPT09IHRoaXMuY3VycmVudFJvdXRlclVybCgpKSB7XG4gICAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgbmF2aWdhdGlvbiBzdGFydGVkIHRvIHNhbWUgdXJsIC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGxhY2VSb3V0ZXIuaGFzQWN0aXZlSW50ZXJhY3Rpb25JZHMoZXZlbnQudXJsKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG5hdmlnYXRpb24gc3RhcnRlZCB3aXRoIGludGVyYWN0aW9uIG91dGxldCAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBldmVudC51cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSB0cnVlO1xuICAgIHByaXZhdGUgY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFBsYWNlQ29tcG9uZW50LCBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXI+KCk7XG4gICAgcHJpdmF0ZSBfaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLl9jcmVhdGVFeGNsdXNpdmVNb2RhbEludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAvLyB0aGUgaW50ZXJhY3Rpb24gY29udGV4dCBjYW4gYmUgZGV0YWNoZWQgZHVyaW5nIHRoZSBiYWNrIGJ1dHRvbiBjYW5jZWxsYXRpb24gc3RhdGUgdHJhbnNpdGlvblxuICAgICAgICAvLyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgYWN0aXZpdHlDYW5jZWxsYXRpb24gaXNuJ3QuICBPdGhlcndpc2UgZGlzcG9zZSB3aWxsIGJlXG4gICAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBjYW5jZWwgaWYgdGhlIGNvbnRleHQgaXMgZGlzcG9zZWQgc28gd2UgZG9uJ3QgaGF2ZSB3b3JyeSBhYm91dCBkZXRhY2hpbmcgZXRjLlxuICAgICAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBhY3RpdmUgc2Vzc2lvbnMgY2FuIGhhdmUgbWFueSBjYW5jZWwgc3RhcnQgY3ljbGVzIGR1ZVxuICAgICAgLy8gdG8gcGxhY2UgZ3VhcmQgcmVkaXJlY3RzXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHN1Y2NlZWRlZFxuICAgICAgdGhpcy5jb250ZXh0Lm5vdGlmeVN1Y2Nlc3ModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKGxvY2F0aW9uVHJpZ2dlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2VgKTtcbiAgICAgIC8vIGRldGFjaCB0aGUgaW50ZXJhY3Rpb24gZnJvbSB0aGUgc2Vzc2lvbiBzbyBpdCBkb2Vzbid0IGdldCBkaXNwb3NlZCB1bnRpbCB0aGUgYWN0aXZpdHkgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnRlcmFjdGlvbiA9IHRoaXMuZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aChuYXZpZ2F0aW9uSW50ZXJhY3Rpb24pO1xuICAgICAgLy8gVE9ETzogSSBuZWVkIHRvIG1ha2UgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBjb250ZXh0IGRpc2FsbG93IG5lc3RlZCBhY3Rpdml0aWVzIG9yXG4gICAgICAvLyAgICAgICB0aGF0IHdvdWxkIG1lc3MgdGhpbmdzIHVwIGVudGlyZWx5LiBPciwgY2FuIEkgZG8gYSBjb250ZXh0LmFib3J0QWxsKCkudGhlbiguLilcbiAgICAgIG5hdmlnYXRpb25JbnRlcmFjdGlvbi5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uZGlzcG9zZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IENhbmNlbGxlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsXG4gICAgICAgIHRoaXMuc3RhcnRpbmdVcmwsXG4gICAgICAgIHRoaXMuaXNQb3BTdGF0ZSxcbiAgICAgICAgbG9jYXRpb25UcmlnZ2VyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgLy8gbG9va3VwIHRoZSBoYW5kbGVyIGFuZCBjcmVhdGUgaXQgaWYgd2UndmUgbm90IHNlZW4gaXQgeWV0XG4gICAgICBsZXQgaGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuZ2V0KGNvbXBvbmVudCk7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgaXNQcmltYXJ5SGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2l6ZSA9PT0gMDsgLy8gb25seSBwcmltYXJ5IGhhbmRsZXIgY2FuY2VscyB0aGUgYXBwIG1vZGVsIGludGVyYXRpb25zXG4gICAgICAgIGhhbmRsZXIgPSBuZXcgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyKGNvbXBvbmVudCwgdGhpcywgaXNQcmltYXJ5SGFuZGxlcik7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlci5jYW5EZWFjdGl2YXRlKGN1cnJlbnRVcmwsIG5leHRVcmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHdhcyBhYm9ydGVkLlxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9KWA7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIFBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSB0cnVlO1xuXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTg2I2lzc3VlY29tbWVudC00MzI3OTU3MjBcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbygnV09SSy1BUk9VTkQ6IFVwZGF0aW5nIGJyb3dzZXIgbG9jYXRpb24gYWZ0ZXIgcG9wIHN0YXRlIC0gc2VlIGFuZ3VsYXIgaXNzdWUgIzEzNTg2Jyk7XG4gICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICBpZiAodGhpcy5jdXJyZW50Um91dGVyVXJsKCkgIT09IHRoaXMuc3RhcnRpbmdVcmwpIHtcbiAgICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oJ1dPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NicpO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZUR1cmluZ0ludGVyYWN0aW9uIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQ6IFZpc2l0LCBpbml0aWFsVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblRyYW5zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgaW5pdGlhbFVybCk7XG4gICAgICBuYXZpZ2F0aW9uVHJhbnNpdGlvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBuYXZpZ2F0aW9uVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbnRlcmFjdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0LCBzdGFydGluZ1VybCk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzdGF0ZSBleGlzdHMgdG8gaGFuZGxlIGFsbCBldmVudHMgd2hpbGUgYW55IGtpbmQgb2YgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcy4gIFRoYXQgd2F5IGFsbCBvdGhlciBzdGF0ZXMgY2FuXG4gICAqIGhhcHBpbHkgaWdub3JlIGludGVyYWN0aW9uIGNvbnRleHRzLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc3RhdGUgZXhpc3RzIHRvIGhhbmRsZSBhbGwgZXZlbnRzIHdoaWxlIGFueSBraW5kIG9mIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICBUaGF0IHdheSBhbGwgb3RoZXIgc3RhdGVzIGNhblxuICAgKiBoYXBwaWx5IGlnbm9yZSBpbnRlcmFjdGlvbiBjb250ZXh0cy5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gdHJ1ZTtcblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuXG4gIGV4cG9ydCBjbGFzcyBDYW5jZWxsZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24gZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHN0YXJ0aW5nRXZlbnRXYXNBUG9wU3RhdGU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIGdldCBpc1RyYW5zaXRpb25hbCgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSByb3V0ZXIgYW5kIHdoYXQgd2FzIGRvbmUgd2UgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAvLyBzZXF1ZW5jZSBvZiBldmVudHMuICBJLmUuICBJZiB0aGV5IGp1c3QgY2xpY2tlZCBhIGxpbmsgd2UnbGwgZ2V0IGEgY2FuY2VsXG4gICAgICAvLyB3aXRoIHRoZSBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmwgYXMgdGhlIGZpbmFsIGV2ZW50LiBIb3dldmVyIHRoZSB1c2VyXG4gICAgICAvLyBzdGFydGVkIHRoZSBpbml0aWFsIG5hdmlnYXRpb24gd2l0aCBhIHBvcCBzdGF0ZSB0aGVuIHdlJ2xsIGdldCBvbmUgb2ZcbiAgICAgIC8vIHRob3NlIHdpdGggdGhlIGxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCBidXQgbm8gY2FuY2VsIGV2ZW50IHdpdGggaXQuXG4gICAgICByZXR1cm4gdGhpcy5nb3RQb3BTdGF0ZVdpdGhMZWF2aW5nVXJsIHx8IHRoaXMubG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsID09PSBldmVudC51cmwgPyB0aGlzLmNyZWF0ZUlkbGVTdGF0ZSgpIDogdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCB8fCBldmVudC51cmwgPT09IHRoaXMubG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsO1xuICAgICAgcmV0dXJuIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlnbm9yZShldmVudDogUm91dGVyRXZlbnQsIHJlYXNvbj86IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZWFzb24gPSByZWFzb24gPyBgIC0+ICR7cmVhc29ufWAgOiAnJztcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgaWdub3Jpbmcgcm91dGVyIGV2ZW50JHtyZWFzb259OiAke2V2ZW50LmNvbnN0cnVjdG9yLm5hbWV9IC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KGlzSWRsOiAke3RoaXMuaWRsZX0sIHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9LCBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmw6JHt0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybH0pYDtcbiAgICB9XG5cbiAgfVxufVxuIl19
750
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBUyxNQUFNLGdCQUFnQixDQUFDO0FBUTVFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7O0FBRTNGLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxnQkFBZ0I7Ozs7SUFRNUQsWUFBK0IsT0FBZ0M7UUFDN0QsS0FBSyxFQUFFLENBQUM7UUFEcUIsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFOdkQsWUFBTyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBUXBELENBQUM7Ozs7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7Ozs7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDOzs7O0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNsQyxDQUFDOzs7O0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0lBQ3pDLENBQUM7Ozs7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7O0lBRUQsVUFBVSxDQUFDLEtBQVk7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxRQUF5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Z2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyRXZlbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNsLCBHYXJiYWdlQ29sbGVjdG9yLCBsYW5nLCBMb2dnZXIsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgUGxhY2VSb3V0ZXIgfSBmcm9tICcuLi9wbGFjZS1yb3V0ZXInO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuLi92aXNpdCc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIgfSBmcm9tICcuL3BsYWNlLWNvbXBvbmVudC1kZWFjdGl2YXRpb24taGFuZGxlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIF92aXNpdHMgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXQ+KCk7XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWw6IGJvb2xlYW47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmc7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzUG9wU3RhdGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIGdldCBpZGxlKCkge1xuICAgIHJldHVybiAhdGhpcy5pc1RyYW5zaXRpb25hbDtcbiAgfVxuXG4gIGdldCBwbGFjZVJvdXRlcigpOiBQbGFjZVJvdXRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5wbGFjZVJvdXRlcjtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvblNlcnZpY2UoKTogSW50ZXJhY3Rpb25TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZTtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0b3JlVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5fdmlzaXRzLnNldCh2aXNpdC5wbGFjZURlZmluaXRpb24sIHZpc2l0KTtcbiAgfVxuXG4gIGdldFZpc2l0Rm9yKHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaXRzLmdldChwbGFjZURlZik7XG4gIH1cblxuICBvblBsYWNlTmF2aWdhdGlvblN0YXJ0KHZpc2l0OiBWaXNpdCwgaW5pdGlhbFVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignb25QbGFjZU5hdmlnYXRpb25TdGFydCcpO1xuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24obmV3VXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKCdvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignY2FuRGVhY3RpdmF0ZVBsYWNlJyk7XG4gIH1cblxuICBnZXRWaXNpdHMoKTogVmlzaXRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdmlzaXRzLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbGxlZ2FsVHJhbnNpdGlvbjxSPihtZXNzYWdlOiBzdHJpbmcgfCBSb3V0ZXJFdmVudCk6IFIge1xuICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgJHttZXNzYWdlLnRvU3RyaW5nKCl9IG5vdCBzdXBwb3J0ZWQgYnkgJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBsYWNlUm91dGVyLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2l0aW9uU3RhdGVGb3IoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGNvbnN0IHBvcHN0YXRlID0gZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZSc7XG4gICAgcmV0dXJuIHBvcHN0YXRlID9cbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5Qb3BTdGF0ZVRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgIDpcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKSA6XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuTmF2aWdhdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSWRsZVN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpID9cbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZSh0aGlzLmNvbnRleHQpO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsKSB7XG4gICAgdGhpcy5wbGFjZVJvdXRlci5yZXNldEJyb3dzZXJMb2NhdGlvbih1cmwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTmF2aWdhdGlvblN0YXRlIHtcblxuICBleHBvcnQgY2xhc3MgQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBwbGFjZVJvdXRlcjogUGxhY2VSb3V0ZXIsXG4gICAgICByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSxcbiAgICAgIHJlYWRvbmx5IG5vdGlmeVN1Y2Nlc3M6IChzdWNjZXNzOiBOYXZpZ2F0aW9uU3RhdGUpID0+IHZvaWQpIHtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZSBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSBmYWxzZTtcbiAgICByZWFkb25seSBzdGFydGluZ1VybCA9IG51bGw7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdDogVmlzaXQsIGluaXRpYWxVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uVHJhbnNpdGlvbiA9IG5ldyBOYXZpZ2F0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGluaXRpYWxVcmwpO1xuICAgICAgbmF2aWdhdGlvblRyYW5zaXRpb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgICAvLyBjYWxsaW5nIGFuZ3VsYXJMb2NhdGlvbi5nbygpIHRvIGNsZWFyIGJhY2sgc3RhdGUgY2FuIHRyaWdnZXIgcm91dGVyIGN5Y2xlcyB0byB0aGUgY3VycmVudCB1cmwgaWYgd2UgZG9uJ3QgaWdub3JlIHRoZW1cbiAgICAgIGlmIChldmVudC51cmwgPT09IHRoaXMuY3VycmVudFJvdXRlclVybCgpKSB7XG4gICAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgbmF2aWdhdGlvbiBzdGFydGVkIHRvIHNhbWUgdXJsIC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGxhY2VSb3V0ZXIuaGFzQWN0aXZlSW50ZXJhY3Rpb25JZHMoZXZlbnQudXJsKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG5hdmlnYXRpb24gc3RhcnRlZCB3aXRoIGludGVyYWN0aW9uIG91dGxldCAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBldmVudC51cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSB0cnVlO1xuICAgIHByaXZhdGUgY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFBsYWNlQ29tcG9uZW50LCBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXI+KCk7XG4gICAgcHJpdmF0ZSBfaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLl9jcmVhdGVFeGNsdXNpdmVNb2RhbEludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAvLyB0aGUgaW50ZXJhY3Rpb24gY29udGV4dCBjYW4gYmUgZGV0YWNoZWQgZHVyaW5nIHRoZSBiYWNrIGJ1dHRvbiBjYW5jZWxsYXRpb24gc3RhdGUgdHJhbnNpdGlvblxuICAgICAgICAvLyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgYWN0aXZpdHlDYW5jZWxsYXRpb24gaXNuJ3QuICBPdGhlcndpc2UgZGlzcG9zZSB3aWxsIGJlXG4gICAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBjYW5jZWwgaWYgdGhlIGNvbnRleHQgaXMgZGlzcG9zZWQgc28gd2UgZG9uJ3QgaGF2ZSB3b3JyeSBhYm91dCBkZXRhY2hpbmcgZXRjLlxuICAgICAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBhY3RpdmUgc2Vzc2lvbnMgY2FuIGhhdmUgbWFueSBjYW5jZWwgc3RhcnQgY3ljbGVzIGR1ZVxuICAgICAgLy8gdG8gcGxhY2UgZ3VhcmQgcmVkaXJlY3RzXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHN1Y2NlZWRlZFxuICAgICAgdGhpcy5jb250ZXh0Lm5vdGlmeVN1Y2Nlc3ModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKGxvY2F0aW9uVHJpZ2dlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2VgKTtcbiAgICAgIC8vIGRldGFjaCB0aGUgaW50ZXJhY3Rpb24gZnJvbSB0aGUgc2Vzc2lvbiBzbyBpdCBkb2Vzbid0IGdldCBkaXNwb3NlZCB1bnRpbCB0aGUgYWN0aXZpdHkgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnRlcmFjdGlvbiA9IHRoaXMuZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aChuYXZpZ2F0aW9uSW50ZXJhY3Rpb24pO1xuICAgICAgLy8gVE9ETzogSSBuZWVkIHRvIG1ha2UgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBjb250ZXh0IGRpc2FsbG93IG5lc3RlZCBhY3Rpdml0aWVzIG9yXG4gICAgICAvLyAgICAgICB0aGF0IHdvdWxkIG1lc3MgdGhpbmdzIHVwIGVudGlyZWx5LiBPciwgY2FuIEkgZG8gYSBjb250ZXh0LmFib3J0QWxsKCkudGhlbiguLilcbiAgICAgIG5hdmlnYXRpb25JbnRlcmFjdGlvbi5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uZGlzcG9zZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IENhbmNlbGxlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsXG4gICAgICAgIHRoaXMuc3RhcnRpbmdVcmwsXG4gICAgICAgIHRoaXMuaXNQb3BTdGF0ZSxcbiAgICAgICAgbG9jYXRpb25UcmlnZ2VyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgLy8gbG9va3VwIHRoZSBoYW5kbGVyIGFuZCBjcmVhdGUgaXQgaWYgd2UndmUgbm90IHNlZW4gaXQgeWV0XG4gICAgICBsZXQgaGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuZ2V0KGNvbXBvbmVudCk7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgaXNQcmltYXJ5SGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2l6ZSA9PT0gMDsgLy8gb25seSBwcmltYXJ5IGhhbmRsZXIgY2FuY2VscyB0aGUgYXBwIG1vZGVsIGludGVyYXRpb25zXG4gICAgICAgIGhhbmRsZXIgPSBuZXcgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyKGNvbXBvbmVudCwgdGhpcywgaXNQcmltYXJ5SGFuZGxlcik7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlci5jYW5EZWFjdGl2YXRlKGN1cnJlbnRVcmwsIG5leHRVcmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHdhcyBhYm9ydGVkLlxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9KWA7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIFBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSB0cnVlO1xuXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTg2I2lzc3VlY29tbWVudC00MzI3OTU3MjBcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbygnV09SSy1BUk9VTkQ6IFVwZGF0aW5nIGJyb3dzZXIgbG9jYXRpb24gYWZ0ZXIgcG9wIHN0YXRlIC0gc2VlIGFuZ3VsYXIgaXNzdWUgIzEzNTg2Jyk7XG4gICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICBpZiAodGhpcy5jdXJyZW50Um91dGVyVXJsKCkgIT09IHRoaXMuc3RhcnRpbmdVcmwpIHtcbiAgICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oJ1dPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NicpO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZUR1cmluZ0ludGVyYWN0aW9uIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQ6IFZpc2l0LCBpbml0aWFsVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblRyYW5zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgaW5pdGlhbFVybCk7XG4gICAgICBuYXZpZ2F0aW9uVHJhbnNpdGlvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBuYXZpZ2F0aW9uVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbnRlcmFjdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0LCBzdGFydGluZ1VybCk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzdGF0ZSBleGlzdHMgdG8gaGFuZGxlIGFsbCBldmVudHMgd2hpbGUgYW55IGtpbmQgb2YgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcy4gIFRoYXQgd2F5IGFsbCBvdGhlciBzdGF0ZXMgY2FuXG4gICAqIGhhcHBpbHkgaWdub3JlIGludGVyYWN0aW9uIGNvbnRleHRzLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgIH1cblxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc3RhdGUgZXhpc3RzIHRvIGhhbmRsZSBhbGwgZXZlbnRzIHdoaWxlIGFueSBraW5kIG9mIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICBUaGF0IHdheSBhbGwgb3RoZXIgc3RhdGVzIGNhblxuICAgKiBoYXBwaWx5IGlnbm9yZSBpbnRlcmFjdGlvbiBjb250ZXh0cy5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gdHJ1ZTtcblxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuXG4gIGV4cG9ydCBjbGFzcyBDYW5jZWxsZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24gZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHN0YXJ0aW5nRXZlbnRXYXNBUG9wU3RhdGU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIGdldCBpc1RyYW5zaXRpb25hbCgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSByb3V0ZXIgYW5kIHdoYXQgd2FzIGRvbmUgd2UgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAvLyBzZXF1ZW5jZSBvZiBldmVudHMuXG4gICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBjaGFuZ2Ugd2FzIHRyaWdnZXJlZCBieSBjbGlja2luZyBhIGxpbmsgd2UnbGwgZ2V0IGEgY2FuY2VsIHdpdGggdGhlIGxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCBhcyB0aGUgZmluYWwgZXZlbnQuXG4gICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBjaGFuZ2Ugd2FzIHRyaWdnZXJlZCB3aXRoIGEgcG9wIHN0YXRlIHRoZW4gd2UnbGwgZ2V0IGFuIG9uUG9wU3RhdGUgd2l0aCB0aGUgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsIGJ1dCBubyBjYW5jZWwgZXZlbnQgd2l0aCBpdC5cbiAgICAgIGlmICh0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgJiYgdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbklkcyA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcy52YWx1ZTtcbiAgICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnBsYWNlUm91dGVyLnBhcnNlVXJsKHRoaXMuc3RhcnRpbmdVcmwpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGludGVyYWN0aW9uSWRzKS51cmwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCB8fCB0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCA9PT0gZXZlbnQudXJsID8gdGhpcy5jcmVhdGVJZGxlU3RhdGUoKSA6IHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICB0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgPSB0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgfHwgZXZlbnQudXJsID09PSB0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybDtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZ25vcmUoZXZlbnQ6IFJvdXRlckV2ZW50LCByZWFzb24/OiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmVhc29uID0gcmVhc29uID8gYCAtPiAke3JlYXNvbn1gIDogJyc7XG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGlnbm9yaW5nIHJvdXRlciBldmVudCR7cmVhc29ufTogJHtldmVudC5jb25zdHJ1Y3Rvci5uYW1lfSAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfShpc0lkbDogJHt0aGlzLmlkbGV9LCBzdGFydGluZ1VybDogJHt0aGlzLnN0YXJ0aW5nVXJsfSwgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiR7dGhpcy5sb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmx9KWA7XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==
@@ -6,7 +6,7 @@ import * as tslib_1 from "tslib";
6
6
  import { Location } from '@angular/common';
7
7
  import { Injectable } from '@angular/core';
8
8
  import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, UrlSerializer } from '@angular/router';
9
- import { assert, Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableStream, MutableValueModel, Trace } from '@coolon/pectin';
9
+ import { assert, Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableStream, MutableValueModel } from '@coolon/pectin';
10
10
  import _ from 'lodash';
11
11
  import { InteractionService } from '../interaction/services/interaction.service';
12
12
  import { NavigationState } from './guards/navigation-state';
@@ -363,6 +363,7 @@ export class PlaceRouter extends GarbageCollector {
363
363
  hasActiveInteractionIds(url) {
364
364
  return this.getActiveInteractionIdsFromUrl(url).length > 0;
365
365
  }
366
+ // @Trace()
366
367
  /**
367
368
  * @param {?} urlSnapshot
368
369
  * @param {?=} navigationExtras
@@ -438,12 +439,6 @@ PlaceRouter.ctorParameters = () => [
438
439
  { type: InteractionService }
439
440
  ];
440
441
  /** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.UrlSerializer), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i4.InteractionService)); }, token: PlaceRouter, providedIn: "root" });
441
- tslib_1.__decorate([
442
- Trace(),
443
- tslib_1.__metadata("design:type", Function),
444
- tslib_1.__metadata("design:paramtypes", [UrlSnapshot, Object]),
445
- tslib_1.__metadata("design:returntype", Promise)
446
- ], PlaceRouter.prototype, "navigateByUrl", null);
447
442
  if (false) {
448
443
  /**
449
444
  * @type {?}
@@ -495,4 +490,4 @@ if (false) {
495
490
  */
496
491
  PlaceRouter.prototype.interactionService;
497
492
  }
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUNOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBRU4sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLEtBQUssRUFHTixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBTzdDLE1BQU0sT0FBTyxXQUFZLFNBQVEsZ0JBQWdCOzs7Ozs7OztJQVUvQyxZQUE2QixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsZUFBeUIsRUFDekIsWUFBMEIsRUFDMUIsa0JBQXNDO1FBQ2pFLEtBQUssRUFBRSxDQUFDO1FBTG1CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBVTtRQUN6QixpQkFBWSxHQUFaLFlB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Q0FBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgTmF2aWdhdGlvbkNhbmNlbCxcbiAgTmF2aWdhdGlvbkVuZCxcbiAgTmF2aWdhdGlvbkVycm9yLFxuICBOYXZpZ2F0aW9uRXh0cmFzLFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIFJvdXRlcixcbiAgVXJsU2VyaWFsaXplclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBDb25zdHJ1Y3RhYmxlLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIEhhc09uZUluZGV4Q2hhaW4sXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTG9nZ2VyLFxuICBNdXRhYmxlTGlzdE1vZGVsLFxuICBNdXRhYmxlU3RyZWFtLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgVHJhY2UsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhdGUgfSBmcm9tICcuL2d1YXJkcy9uYXZpZ2F0aW9uLXN0YXRlJztcbmltcG9ydCB7IFBsYWNlSGlzdG9yeSB9IGZyb20gJy4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBVcmxTbmFwc2hvdCB9IGZyb20gJy4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi92aXNpdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0aW9uU3RhdGVNb2RlbCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0cyA9IG5ldyBNdXRhYmxlTGlzdE1vZGVsPFZpc2l0PigpO1xuXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25JblByb2dyZXNzOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuICByZWFkb25seSBhY3RpdmVWaXNpdEluZGV4OiBIYXNPbmVJbmRleENoYWluPCdwbGFjZURlZmluaXRpb24nLCBWaXNpdD47XG4gIHByaXZhdGUgX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dDogTmF2aWdhdGlvblN0YXRlLkNvbnRleHQ7XG4gIHByaXZhdGUgX25hdmlnYXRpb25TdGF0ZVR5cGVNb2RlbDogVmFsdWVNb2RlbENoYWluPENvbnN0cnVjdGFibGU8TmF2aWdhdGlvblN0YXRlPj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJpYWxpemVyOiBVcmxTZXJpYWxpemVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9uIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5hY3RpdmVWaXNpdEluZGV4ID0gY2hhaW4odGhpcy5fYWN0aXZlVmlzaXRzKS5pbmRleEJ5KCdwbGFjZURlZmluaXRpb24nKTtcbiAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU3RhdGVNb2RlbCkucGx1Y2soJ2lzVHJhbnNpdGlvbmFsJyk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0ID0gbmV3IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0KHRoaXMsIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLCBzZXNzaW9uID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb24pO1xuICAgIH0pO1xuICAgIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlID0gbmV3IE5hdmlnYXRpb25TdGF0ZS5JZGxlKHRoaXMuX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dCk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlVHlwZU1vZGVsID0gY2hhaW4odGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwpLm1hcChzdGF0ZSA9PiBzdGF0ZS5jb25zdHJ1Y3RvciBhcyBDb25zdHJ1Y3RhYmxlPE5hdmlnYXRpb25TdGF0ZT4pO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGFib3J0ZWQsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICBpZiAoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpIHtcbiAgICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblBvcFN0YXRlKGV2ZW50KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Sb3V0ZXJTdGFydGVkKGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblJvdXRlckVuZChldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Sb3V0ZXJFcnJvcihldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBQdXNoIGRpYWxvZyBzdGF0ZSB0byB0aGUgdXJsIHNvIHdlIGNhbiBjYXB0dXJlIHRoZSBiYWNrIGJ1dHRvbi5cbiAgICB3aGVuLmxpc3RPZih0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMpLmNoYW5nZXMoKGlkcywgcHJldmlvdXMpID0+IHtcbiAgICAgIHRoaXMuc3luY0ludGVyYWN0aW9uSWRzV2l0aFJvdXRlcihpZHMsIHByZXZpb3VzKTtcbiAgICB9LCB7IHVubGVzczogdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyB9KTsgLy8gVE9ETzogSSB0aGluayB0aGUgZXhjbHVzaXZlIGludGVyYWN0aW9uIHByZXZlbnRzIGludGVyYWN0aW9ucyBzdGFydGluZyB3aGlsZSBpdCdzIGFjdGl2ZSBzbyB3ZSBtaWdodCBub3QgbmVlZCB0aGlzLlxuXG4gICAgY29uc3QgdXJsQ2hhbmdlcyA9IG5ldyBNdXRhYmxlU3RyZWFtPHsgdXJsOiBzdHJpbmcsIHN0YXRlOiBOYXZpZ2F0aW9uU3RhdGUgfT4oKTtcblxuICAgIC8vIFRoZSBhbmd1bGFyIHJvdXRlciBkb2Vzbid0IGFsd2F5cyBmaXJlIHJvdXRlciBldmVudHMgd2hlbiB0aGUgYmFjayBidXR0b24gaXMgcHVzaGVkIHdoaWxlIGEgbmF2aWdhdGlvblxuICAgIC8vIHNlc3Npb24gaXMgaW4gcHJvZ3Jlc3MuICBTb21ldGltZXMgd2Ugb25seSBrbm93IGFib3V0IGl0IGZyb20gdGhlIHVybCBjaGFuZ2UuXG4gICAgLy8gSU1QT1JUQU5UIE9SREVSIERFUEVOREVOQ1lcbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgYmVjYXVzZSB3ZSdyZSBub3RpZmllZCBvZiB0aGUgY2hhbmdlIGFmdGVyIHRoZSByb3V0ZXIgaGFzIHN0YXJ0ZWQgcmVhY3RpbmcgdG8gaXQuICBUaGlzXG4gICAgLy8gd2UgY2FuIGNhbiB1c2Ugb3VyIG5hdmlnYXRpb25TdGF0ZSB0byBkZXRlcm1pbmUgdGhpbmdzLlxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblN0YXRlID0gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gICAgICBjb25zb2xlLmxvZyhgVVJMQ2hhbmdlIC0+ICR7dXJsfWAsIHsgc3RhdGU6IG5hdmlnYXRpb25TdGF0ZSB9KTtcbiAgICAgIHVybENoYW5nZXMucHVibGlzaCh7IHVybCwgc3RhdGU6IG5hdmlnYXRpb25TdGF0ZSB9KTtcblxuICAgICAgLy8gVGhlIHVybCBoYXMgY2hhbmdlZCB3aGlsZSB3ZSdyZSBpbiBhIHRyYW5zaXRpb25hbCBzdGF0ZVxuICAgICAgaWYgKG5hdmlnYXRpb25TdGF0ZS5pc1RyYW5zaXRpb25hbCkge1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24gPSB0aGlzLm5hdmlnYXRpb25TdGF0ZS5pbnRlcmFjdGlvbkNvbnRleHQ7XG4gICAgICAgIGlmIChuYXZpZ2F0aW9uSW50ZXJhY3Rpb24gJiYgbmF2aWdhdGlvbkludGVyYWN0aW9uLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKHVybCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NOYXZpZ2F0aW9uU3VjY2VzcyhzZXNzaW9uOiBOYXZpZ2F0aW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgdmlzaXRzIGJlZm9yZSB0aGUgc2Vzc2lvbiBmaW5pc2hlcy4gIFRoaXMgYWxsb3dzIHRoZSBwbGFjZU91dGV0cyB0byBpZ25vcmUgdmlzaXRcbiAgICAvLyBjaGFuZ2VzIHRoYXQgb2NjdXIgd2hpbGUgcm91dGVyTmF2aWdhdGlvbkFjdGl2ZSBpcyB0cnVlLlxuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKTtcbiAgICBjb25zdCB2aXNpdHMgPSBzZXNzaW9uLmdldFZpc2l0cygpO1xuICAgIHZpc2l0cy5mb3JFYWNoKHYgPT4gdGhpcy5wbGFjZUhpc3RvcnkuYWRkKHYpKTtcbiAgICB0aGlzLl9hY3RpdmVWaXNpdHMudmFsdWUgPSB2aXNpdHM7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblN0YXRlKCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TdGF0ZU1vZGVsKCk6IFZhbHVlTW9kZWw8TmF2aWdhdGlvblN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnJlYWRvbmx5O1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVZpc2l0cygpOiBMaXN0TW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXRzLnJlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqICBwbGFjZVJvdXRlci5uYXZpZ2F0ZShwbGFjZURlc3RpbmF0aW9ucy5zb21lUGxhY2UuY3JlYXRlVmlzaXQocm91dGVJZCwgLi4udmlzaXRQYXJhbXMpKTtcbiAgICogQHBhcmFtIHZpc2l0XG4gICAqL1xuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdDogVmlzaXQsIG9wdGlvbnM/OiB7IHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlIH0pIHtcbiAgICB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgcm91dGVyID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgICB2aXNpdC5wbGFjZURlZmluaXRpb24ucGF0aCxcbiAgICAgICAgLi4udGhpcy5jcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQpXG4gICAgICBdO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVsYXRpdmVUbzogb3B0aW9ucyA/IG9wdGlvbnMucmVsYXRpdmVUbyA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgYXN5bmMgcHVzaFZpc2l0Q2hhbmdlc1RvUm91dGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcmV2aW91czogVmlzaXQsIG5leHQ6IFZpc2l0KSB7XG4gICAgLy8gd2UgaGF2ZSB0byBwdXNoIHRvIGhpc3Rvcnkgc28gb3VyIHJlbWVtYmVyIHNhbml0aXNlcnMgZG9uJ3QgcGljayB1cCB0aGUgcHJldmlvdXMgdmFsdWVcbiAgICAvLyB3aGVuIGl0J3MgYmVlbiBjbGVhcmVkIGJ5IHRoZSB1c2VyLlxuICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZChuZXh0KTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBpZiAobmV4dC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24obmV4dCwgcm91dGVyID0+IHtcbiAgICAgICAgY29uc3QgdXJsU25hcHNob3QgPSB0aGlzLnBhcnNlVXJsKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCkudXBkYXRlVmlzaXRTZWdtZW50cyhuZXh0KTtcbiAgICAgICAgY29uc29sZS5sb2coJyMjIyBQdXNoIENoYW5nZXMgdG8gcm91dGUgUmVkaXJlY3QnLCB7IGNvbW1hbmRzOiB1cmxTbmFwc2hvdC51cmwgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9OYXZpZ2F0aW9uKHZpc2l0OiBWaXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IGFueSkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgfVxuICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblN0YXRlLm9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQsIHRoaXMuZ2V0Q3VycmVudFJvdXRlclVybCgpKTtcbiAgICAgIHNlc3Npb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKHRoaXMucm91dGVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUm91dGVyIGhhcyBmaW5pc2hlZCAoc2luY2UgdGhlcmUgd2FzIG5vIHJvdXRlciBjaGFuZ2UgcmVxdWlyZWQpIHNvIHdlXG4gICAgICAvLyBuZWVkIHRvIGVuZCB0aGUgbmF2aWdhdGlvbiBzZXNzaW9uLlxuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblN0YXRlLmlzVHJhbnNpdGlvbmFsICYmICF0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpKSB7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHNlc3Npb24gPT4gc2Vzc2lvbi5vblJvdXRlckVuZChuZXcgTmF2aWdhdGlvbkVuZCgtMSwgJycsICcnKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHByb3RlY3RlZCBydW5TdGF0ZVRyYW5zaXRpb24odHJhbnNpdGlvbjogKG5hdmlnYXRpb25TZXNzaW9uOiBOYXZpZ2F0aW9uU3RhdGUpID0+IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gICAgY29uc3QgbmV4dCA9IHRyYW5zaXRpb24odGhpcy5uYXZpZ2F0aW9uU3RhdGUpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlID0gbmV4dDtcbiAgICBpZiAobmV4dCAhPT0gcHJldmlvdXMpIHtcbiAgICAgIHByZXZpb3VzLmRpc3Bvc2UoKTtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMudG9TdHJpbmcoKX0gLT4gJHtuZXh0LnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQ6IFZpc2l0KSB7XG4gICAgY29uc3QgZGVmID0gdmlzaXQucGxhY2VEZWZpbml0aW9uO1xuICAgIHJldHVybiB2aXNpdC5oYXNSb3V0ZUlkKCkgP1xuICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZUlkKHZpc2l0KSwgZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldIDpcbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHZpc2l0KV07XG4gIH1cblxuICBleHRyYWN0Q2hpbGRQYXRoKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYW55W10ge1xuICAgIHJldHVybiBfLmZsYXR0ZW4oYWN0aXZhdGVkUm91dGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnVybCkpO1xuICB9XG5cbiAgcGFyc2VVcmwodXJsOiBzdHJpbmcpOiBVcmxTbmFwc2hvdCB7XG4gICAgcmV0dXJuIG5ldyBVcmxTbmFwc2hvdCh0aGlzLnVybFNlcmlhbGl6ZXIsIHVybCk7XG4gIH1cblxuICByZXNldEJyb3dzZXJMb2NhdGlvbih1cmw6IHN0cmluZykge1xuICAgIHRoaXMuYW5ndWxhckxvY2F0aW9uLmdvKHVybCk7XG4gIH1cblxuICBjcmVhdGVVcmxTbmFwc2hvdCguLi52aXNpdHM6IFZpc2l0W10pOiBVcmxTbmFwc2hvdCB7XG4gICAgY29uc3QgYml0cyA9IFtdO1xuICAgIHZpc2l0cy5mb3JFYWNoKHYgPT4ge1xuICAgICAgYml0cy5wdXNoKHRoaXMucGFyc2VVcmwoYCR7di5wbGFjZURlZmluaXRpb24ucGF0aH1gKS51cGRhdGVWaXNpdFNlZ21lbnRzKHYpLnVybCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VVcmwoYml0cy5qb2luKCcnKSk7XG4gIH1cblxuICBnZXRDdXJyZW50Um91dGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnJvdXRlclN0YXRlID8gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsIDogbnVsbDtcbiAgfVxuXG4gIGdldEN1cnJlbnRSb3V0ZVNuYXBzaG90KCk6IFVybFNuYXBzaG90IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gIH1cblxuICBnZXRBY3RpdmVJbnRlcmFjdGlvbklkc0Zyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VVcmwodXJsKS5nZXRJbnRlcmFjdGlvbklkcygpO1xuICB9XG5cblxuICAvLyBAVHJhY2UoKVxuICBoYXNBY3RpdmVJbnRlcmFjdGlvbklkcyh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUludGVyYWN0aW9uSWRzRnJvbVVybCh1cmwpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBAVHJhY2UoKVxuICBuYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCwgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdC51cmxUcmVlLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgfVxuXG4gIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG1vdmVkIHRvIHRoZSBuYXZpZ2F0aW9uIHN0YXRlcz9cbiAgc3luY0ludGVyYWN0aW9uSWRzV2l0aFJvdXRlcihjdXJyZW50SWRzOiBzdHJpbmdbXSwgcHJldmlvdXM6IHN0cmluZ1tdKSB7XG4gICAgYXNzZXJ0LmlzRmFsc2V5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpOyAvLyBVcGRhdGluZyBpbnRlcmFjdGlvbiByb3V0ZXMgZHVyaW5nIGFuIGV4aXN0aW5nIG5hdmlnYXRpb24gYnJlYWtzIGFsbCB0aGUgdGhpbmdzLlxuICAgIGNvbnNvbGUubG9nKHtcbiAgICAgIHN0YXJ0aW5nQWN0aXZpdHk6IGN1cnJlbnRJZHMubGVuZ3RoID4gcHJldmlvdXMubGVuZ3RoLFxuICAgICAgd2FzQmFja0J1dHRvbjogdGhpcy5uYXZpZ2F0aW9uU3RhdGUuaXNQb3BTdGF0ZVxuICAgIH0pO1xuXG4gICAgaWYgKF8uaXNFcXVhbChjdXJyZW50SWRzLCBwcmV2aW91cykpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdhY3Rpdml0eSBpZHMgd2VyZSB0aGUgc2FtZSwgc2tpcHBpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT01HLCB0aGlzIGlzIG51dHMuXG4gICAgICBjb25zdCBhZGRpbmdBY3Rpdml0eSA9IGN1cnJlbnRJZHMubGVuZ3RoID4gcHJldmlvdXMubGVuZ3RoO1xuICAgICAgY29uc3QgaXNGaXJzdEFjdGl2aXR5ID0gYWRkaW5nQWN0aXZpdHkgJiYgcHJldmlvdXMubGVuZ3RoIDwgMTtcbiAgICAgIGNvbnN0IHJlbW92aW5nTGFzdEFjdGl2aXR5ID0gY3VycmVudElkcy5sZW5ndGggPCAxO1xuICAgICAgaWYgKGFkZGluZ0FjdGl2aXR5KSB7Ly8gd2UncmUgc3RhcnRpbmcgYSBuZXcgYWN0aXZpdHksIHB1c2ggdGhlIGNoYW5nZSB0byB0aGUgaGlzdG9yeSBhbmQgdXBkYXRlIHRoZSB1cmxcbiAgICAgICAgY29uc29sZS5sb2coJ2FkZGluZyBhY3Rpdml0eScpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5nZXRDdXJyZW50Um91dGVTbmFwc2hvdCgpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGN1cnJlbnRJZHMpLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogIWlzRmlyc3RBY3Rpdml0eSAvLyB3ZSBkb24ndCBsZXQgdGhlIGhpc3RvcnkgcGlsZSB1cFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy5nZXRDdXJyZW50Um91dGVTbmFwc2hvdCgpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGN1cnJlbnRJZHMpO1xuICAgICAgICBpZiAocmVtb3ZpbmdMYXN0QWN0aXZpdHkpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QsIHtcbiAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWVcbiAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHBvcCB0aGUgbGFzdCBoaXN0b3J5IG9mZiB0aGUgc3RhY2sgd2hlbiBsZWF2aW5nIHRoZVxuICAgICAgICAgICAgLy8gYWN0aXZlIGFjdGl2aXR5IHN0YXRlLlxuICAgICAgICAgICAgdGhpcy5hbmd1bGFyTG9jYXRpb24uYmFjaygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCwge1xuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUNOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBRU4sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsaUJBQWlCLEVBSWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPN0MsTUFBTSxPQUFPLFdBQVksU0FBUSxnQkFBZ0I7Ozs7Ozs7O0lBVS9DLFlBQTZCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixlQUF5QixFQUN6QixZQUEwQixFQUMxQixrQkFBc0M7UUFDakUsS0FBSyxFQUFFLENBQUM7UUFMbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFVO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FB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QGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBVcmxTZXJpYWxpemVyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIENvbnN0cnVjdGFibGUsXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgSGFzT25lSW5kZXhDaGFpbixcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBMb2dnZXIsXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIE11dGFibGVTdHJlYW0sXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBUcmFjZSxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TdGF0ZSB9IGZyb20gJy4vZ3VhcmRzL25hdmlnYXRpb24tc3RhdGUnO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFVybFNuYXBzaG90IH0gZnJvbSAnLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuL3Zpc2l0JztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlciBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TdGF0ZU1vZGVsID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPE5hdmlnYXRpb25TdGF0ZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVmlzaXRzID0gbmV3IE11dGFibGVMaXN0TW9kZWw8VmlzaXQ+KCk7XG5cbiAgcmVhZG9ubHkgbmF2aWdhdGlvbkluUHJvZ3Jlc3M6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGFjdGl2ZVZpc2l0SW5kZXg6IEhhc09uZUluZGV4Q2hhaW48J3BsYWNlRGVmaW5pdGlvbicsIFZpc2l0PjtcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvblNlc3Npb25Db250ZXh0OiBOYXZpZ2F0aW9uU3RhdGUuQ29udGV4dDtcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvblN0YXRlVHlwZU1vZGVsOiBWYWx1ZU1vZGVsQ2hhaW48Q29uc3RydWN0YWJsZTxOYXZpZ2F0aW9uU3RhdGU+PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVybFNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT24gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmFjdGl2ZVZpc2l0SW5kZXggPSBjaGFpbih0aGlzLl9hY3RpdmVWaXNpdHMpLmluZGV4QnkoJ3BsYWNlRGVmaW5pdGlvbicpO1xuICAgIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TdGF0ZU1vZGVsKS5wbHVjaygnaXNUcmFuc2l0aW9uYWwnKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQgPSBuZXcgTmF2aWdhdGlvblN0YXRlLkNvbnRleHQodGhpcywgdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UsIHNlc3Npb24gPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzTmF2aWdhdGlvblN1Y2Nlc3Moc2Vzc2lvbik7XG4gICAgfSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWUgPSBuZXcgTmF2aWdhdGlvblN0YXRlLklkbGUodGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0KTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVUeXBlTW9kZWwgPSBjaGFpbih0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbCkubWFwKHN0YXRlID0+IHN0YXRlLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdGFibGU8TmF2aWdhdGlvblN0YXRlPik7XG5cbiAgICAvLyBUT0RPOiBtYWtlIHNldHVwIHRoZSBjYWxsYmFja3MgaW4gZHVyaW5nIG1vZHVsZSBpbml0aWF0aW9uIHRvIG1ha2UgdGhpcyB0ZXN0YWJsZS5cbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIC8vIFJvdXRpbmcgZXZlbnQgc2VxdWVuY2VcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgLS0+IHJlZGlyZWN0LCBnbyBhcm91bmQgYWdhaW4gaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVuZCAtLT4gbmF2aWdhdGlvbiBjb21wbGV0ZSwgZW5kIHNlc3Npb24uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgLS0+IG5hdmlnYXRpb24gYWJvcnRlZCwgZW5kIHNlc3Npb24uXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIGlmIChldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJykge1xuICAgICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uUG9wU3RhdGUoZXZlbnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uUm91dGVyRW5kKGV2ZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblJvdXRlckVycm9yKGV2ZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFB1c2ggZGlhbG9nIHN0YXRlIHRvIHRoZSB1cmwgc28gd2UgY2FuIGNhcHR1cmUgdGhlIGJhY2sgYnV0dG9uLlxuICAgIHdoZW4ubGlzdE9mKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcykuY2hhbmdlcygoaWRzLCBwcmV2aW91cykgPT4ge1xuICAgICAgdGhpcy5zeW5jSW50ZXJhY3Rpb25JZHNXaXRoUm91dGVyKGlkcywgcHJldmlvdXMpO1xuICAgIH0sIHsgdW5sZXNzOiB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzIH0pOyAvLyBUT0RPOiBJIHRoaW5rIHRoZSBleGNsdXNpdmUgaW50ZXJhY3Rpb24gcHJldmVudHMgaW50ZXJhY3Rpb25zIHN0YXJ0aW5nIHdoaWxlIGl0J3MgYWN0aXZlIHNvIHdlIG1pZ2h0IG5vdCBuZWVkIHRoaXMuXG5cbiAgICBjb25zdCB1cmxDaGFuZ2VzID0gbmV3IE11dGFibGVTdHJlYW08eyB1cmw6IHN0cmluZywgc3RhdGU6IE5hdmlnYXRpb25TdGF0ZSB9PigpO1xuXG4gICAgLy8gVGhlIGFuZ3VsYXIgcm91dGVyIGRvZXNuJ3QgYWx3YXlzIGZpcmUgcm91dGVyIGV2ZW50cyB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBwdXNoZWQgd2hpbGUgYSBuYXZpZ2F0aW9uXG4gICAgLy8gc2Vzc2lvbiBpcyBpbiBwcm9ncmVzcy4gIFNvbWV0aW1lcyB3ZSBvbmx5IGtub3cgYWJvdXQgaXQgZnJvbSB0aGUgdXJsIGNoYW5nZS5cbiAgICAvLyBJTVBPUlRBTlQgT1JERVIgREVQRU5ERU5DWVxuICAgIC8vIFRoaXMgb25seSB3b3JrcyBiZWNhdXNlIHdlJ3JlIG5vdGlmaWVkIG9mIHRoZSBjaGFuZ2UgYWZ0ZXIgdGhlIHJvdXRlciBoYXMgc3RhcnRlZCByZWFjdGluZyB0byBpdC4gIFRoaXNcbiAgICAvLyB3ZSBjYW4gY2FuIHVzZSBvdXIgbmF2aWdhdGlvblN0YXRlIHRvIGRldGVybWluZSB0aGluZ3MuXG4gICAgYW5ndWxhckxvY2F0aW9uLm9uVXJsQ2hhbmdlKHVybCA9PiB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uU3RhdGUgPSB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbC52YWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKGBVUkxDaGFuZ2UgLT4gJHt1cmx9YCwgeyBzdGF0ZTogbmF2aWdhdGlvblN0YXRlIH0pO1xuICAgICAgdXJsQ2hhbmdlcy5wdWJsaXNoKHsgdXJsLCBzdGF0ZTogbmF2aWdhdGlvblN0YXRlIH0pO1xuXG4gICAgICAvLyBUaGUgdXJsIGhhcyBjaGFuZ2VkIHdoaWxlIHdlJ3JlIGluIGEgdHJhbnNpdGlvbmFsIHN0YXRlXG4gICAgICBpZiAobmF2aWdhdGlvblN0YXRlLmlzVHJhbnNpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnRlcmFjdGlvbiA9IHRoaXMubmF2aWdhdGlvblN0YXRlLmludGVyYWN0aW9uQ29udGV4dDtcbiAgICAgICAgaWYgKG5hdmlnYXRpb25JbnRlcmFjdGlvbiAmJiBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uaXNBY3RpdmUoKSkge1xuICAgICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24odXJsKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSB2aXNpdHMgYmVmb3JlIHRoZSBzZXNzaW9uIGZpbmlzaGVzLiAgVGhpcyBhbGxvd3MgdGhlIHBsYWNlT3V0ZXRzIHRvIGlnbm9yZSB2aXNpdFxuICAgIC8vIGNoYW5nZXMgdGhhdCBvY2N1ciB3aGlsZSByb3V0ZXJOYXZpZ2F0aW9uQWN0aXZlIGlzIHRydWUuXG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpO1xuICAgIGNvbnN0IHZpc2l0cyA9IHNlc3Npb24uZ2V0VmlzaXRzKCk7XG4gICAgdmlzaXRzLmZvckVhY2godiA9PiB0aGlzLnBsYWNlSGlzdG9yeS5hZGQodikpO1xuICAgIHRoaXMuX2FjdGl2ZVZpc2l0cy52YWx1ZSA9IHZpc2l0cztcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU3RhdGUoKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblN0YXRlTW9kZWwoKTogVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXRzKCk6IExpc3RNb2RlbDxWaXNpdD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVWaXNpdHMucmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogIHBsYWNlUm91dGVyLm5hdmlnYXRlKHBsYWNlRGVzdGluYXRpb25zLnNvbWVQbGFjZS5jcmVhdGVWaXNpdChyb3V0ZUlkLCAuLi52aXNpdFBhcmFtcykpO1xuICAgKiBAcGFyYW0gdmlzaXRcbiAgICovXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCwgb3B0aW9ucz86IHsgcmVsYXRpdmVUbzogQWN0aXZhdGVkUm91dGUgfSkge1xuICAgIHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCBhc3luYyByb3V0ZXIgPT4ge1xuICAgICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAgIHZpc2l0LnBsYWNlRGVmaW5pdGlvbi5wYXRoLFxuICAgICAgICAuLi50aGlzLmNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2aXNpdClcbiAgICAgIF07XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZWxhdGl2ZVRvOiBvcHRpb25zID8gb3B0aW9ucy5yZWxhdGl2ZVRvIDogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBwdXNoVmlzaXRDaGFuZ2VzVG9Sb3V0ZShhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByZXZpb3VzOiBWaXNpdCwgbmV4dDogVmlzaXQpIHtcbiAgICAvLyB3ZSBoYXZlIHRvIHB1c2ggdG8gaGlzdG9yeSBzbyBvdXIgcmVtZW1iZXIgc2FuaXRpc2VycyBkb24ndCBwaWNrIHVwIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIC8vIHdoZW4gaXQncyBiZWVuIGNsZWFyZWQgYnkgdGhlIHVzZXIuXG4gICAgdGhpcy5wbGFjZUhpc3RvcnkuYWRkKG5leHQpO1xuXG4gICAgLy8gRklYTUU6IG5vIHJvdXRlIGlkIC0+IHJvdXRlIGlkIGR1cGxpY2F0ZXMgcm91dGUgcGFyYW1ldGVyc1xuICAgIGlmIChuZXh0Lmhhc1JvdXRpbmdDaGFuZ2VkRnJvbShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvTmF2aWdhdGlvbihuZXh0LCByb3V0ZXIgPT4ge1xuICAgICAgICBjb25zdCB1cmxTbmFwc2hvdCA9IHRoaXMucGFyc2VVcmwodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKS51cGRhdGVWaXNpdFNlZ21lbnRzKG5leHQpO1xuICAgICAgICBjb25zb2xlLmxvZygnIyMjIFB1c2ggQ2hhbmdlcyB0byByb3V0ZSBSZWRpcmVjdCcsIHsgY29tbWFuZHM6IHVybFNuYXBzaG90LnVybCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb05hdmlnYXRpb24odmlzaXQ6IFZpc2l0LCBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gYW55KSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oY3VycmVudCA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5uYXZpZ2F0aW9uU3RhdGUub25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdCwgdGhpcy5nZXRDdXJyZW50Um91dGVyVXJsKCkpO1xuICAgICAgc2Vzc2lvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5OYXZpZ2F0aW9uQ29tbWFuZHModGhpcy5yb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSb3V0ZXIgaGFzIGZpbmlzaGVkIChzaW5jZSB0aGVyZSB3YXMgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgc28gd2VcbiAgICAgIC8vIG5lZWQgdG8gZW5kIHRoZSBuYXZpZ2F0aW9uIHNlc3Npb24uXG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU3RhdGUuaXNUcmFuc2l0aW9uYWwgJiYgIXRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uUm91dGVyRW5kKG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgJycpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJvdGVjdGVkIHJ1blN0YXRlVHJhbnNpdGlvbih0cmFuc2l0aW9uOiAobmF2aWdhdGlvblNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkgPT4gTmF2aWdhdGlvblN0YXRlKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbC52YWx1ZTtcbiAgICBjb25zdCBuZXh0ID0gdHJhbnNpdGlvbih0aGlzLm5hdmlnYXRpb25TdGF0ZSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWUgPSBuZXh0O1xuICAgIGlmIChuZXh0ICE9PSBwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMuZGlzcG9zZSgpO1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBSb3V0ZXIgU3RhdGUgVHJhbnNpdGlvbjogJHtwcmV2aW91cy50b1N0cmluZygpfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXQpIHtcbiAgICBjb25zdCBkZWYgPSB2aXNpdC5wbGFjZURlZmluaXRpb247XG4gICAgcmV0dXJuIHZpc2l0Lmhhc1JvdXRlSWQoKSA/XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlSWQodmlzaXQpLCBkZWYuZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHZpc2l0KV0gOlxuICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXTtcbiAgfVxuXG4gIGV4dHJhY3RDaGlsZFBhdGgoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBhbnlbXSB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihhY3RpdmF0ZWRSb3V0ZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQudXJsKSk7XG4gIH1cblxuICBwYXJzZVVybCh1cmw6IHN0cmluZyk6IFVybFNuYXBzaG90IHtcbiAgICByZXR1cm4gbmV3IFVybFNuYXBzaG90KHRoaXMudXJsU2VyaWFsaXplciwgdXJsKTtcbiAgfVxuXG4gIHJlc2V0QnJvd3NlckxvY2F0aW9uKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5hbmd1bGFyTG9jYXRpb24uZ28odXJsKTtcbiAgfVxuXG4gIGNyZWF0ZVVybFNuYXBzaG90KC4uLnZpc2l0czogVmlzaXRbXSk6IFVybFNuYXBzaG90IHtcbiAgICBjb25zdCBiaXRzID0gW107XG4gICAgdmlzaXRzLmZvckVhY2godiA9PiB7XG4gICAgICBiaXRzLnB1c2godGhpcy5wYXJzZVVybChgJHt2LnBsYWNlRGVmaW5pdGlvbi5wYXRofWApLnVwZGF0ZVZpc2l0U2VnbWVudHModikudXJsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVybChiaXRzLmpvaW4oJycpKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRSb3V0ZXJVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUgPyB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwgOiBudWxsO1xuICB9XG5cbiAgZ2V0Q3VycmVudFJvdXRlU25hcHNob3QoKTogVXJsU25hcHNob3Qge1xuICAgIHJldHVybiB0aGlzLnBhcnNlVXJsKHRoaXMuZ2V0Q3VycmVudFJvdXRlclVybCgpKTtcbiAgfVxuXG4gIGdldEFjdGl2ZUludGVyYWN0aW9uSWRzRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVybCh1cmwpLmdldEludGVyYWN0aW9uSWRzKCk7XG4gIH1cblxuXG4gIC8vIEBUcmFjZSgpXG4gIGhhc0FjdGl2ZUludGVyYWN0aW9uSWRzKHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlSW50ZXJhY3Rpb25JZHNGcm9tVXJsKHVybCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG5hdmlnYXRlQnlVcmwodXJsU25hcHNob3Q6IFVybFNuYXBzaG90LCBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LnVybFRyZWUsIG5hdmlnYXRpb25FeHRyYXMpO1xuICB9XG5cbiAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbW92ZWQgdG8gdGhlIG5hdmlnYXRpb24gc3RhdGVzP1xuICBzeW5jSW50ZXJhY3Rpb25JZHNXaXRoUm91dGVyKGN1cnJlbnRJZHM6IHN0cmluZ1tdLCBwcmV2aW91czogc3RyaW5nW10pIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcy52YWx1ZSk7IC8vIFVwZGF0aW5nIGludGVyYWN0aW9uIHJvdXRlcyBkdXJpbmcgYW4gZXhpc3RpbmcgbmF2aWdhdGlvbiBicmVha3MgYWxsIHRoZSB0aGluZ3MuXG4gICAgY29uc29sZS5sb2coe1xuICAgICAgc3RhcnRpbmdBY3Rpdml0eTogY3VycmVudElkcy5sZW5ndGggPiBwcmV2aW91cy5sZW5ndGgsXG4gICAgICB3YXNCYWNrQnV0dG9uOiB0aGlzLm5hdmlnYXRpb25TdGF0ZS5pc1BvcFN0YXRlXG4gICAgfSk7XG5cbiAgICBpZiAoXy5pc0VxdWFsKGN1cnJlbnRJZHMsIHByZXZpb3VzKSkge1xuICAgICAgY29uc29sZS5sb2coJ2FjdGl2aXR5IGlkcyB3ZXJlIHRoZSBzYW1lLCBza2lwcGluZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPTUcsIHRoaXMgaXMgbnV0cy5cbiAgICAgIGNvbnN0IGFkZGluZ0FjdGl2aXR5ID0gY3VycmVudElkcy5sZW5ndGggPiBwcmV2aW91cy5sZW5ndGg7XG4gICAgICBjb25zdCBpc0ZpcnN0QWN0aXZpdHkgPSBhZGRpbmdBY3Rpdml0eSAmJiBwcmV2aW91cy5sZW5ndGggPCAxO1xuICAgICAgY29uc3QgcmVtb3ZpbmdMYXN0QWN0aXZpdHkgPSBjdXJyZW50SWRzLmxlbmd0aCA8IDE7XG4gICAgICBpZiAoYWRkaW5nQWN0aXZpdHkpIHsvLyB3ZSdyZSBzdGFydGluZyBhIG5ldyBhY3Rpdml0eSwgcHVzaCB0aGUgY2hhbmdlIHRvIHRoZSBoaXN0b3J5IGFuZCB1cGRhdGUgdGhlIHVybFxuICAgICAgICBjb25zb2xlLmxvZygnYWRkaW5nIGFjdGl2aXR5Jyk7XG4gICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZVNuYXBzaG90KCkudXBkYXRlSW50ZXJhY3Rpb25JZHMoY3VycmVudElkcyksIHtcbiAgICAgICAgICByZXBsYWNlVXJsOiAhaXNGaXJzdEFjdGl2aXR5IC8vIHdlIGRvbid0IGxldCB0aGUgaGlzdG9yeSBwaWxlIHVwXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXJsU25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRSb3V0ZVNuYXBzaG90KCkudXBkYXRlSW50ZXJhY3Rpb25JZHMoY3VycmVudElkcyk7XG4gICAgICAgIGlmIChyZW1vdmluZ0xhc3RBY3Rpdml0eSkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCwge1xuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIHdlIG5lZWQgdG8gcG9wIHRoZSBsYXN0IGhpc3Rvcnkgb2ZmIHRoZSBzdGFjayB3aGVuIGxlYXZpbmcgdGhlXG4gICAgICAgICAgICAvLyBhY3RpdmUgYWN0aXZpdHkgc3RhdGUuXG4gICAgICAgICAgICB0aGlzLmFuZ3VsYXJMb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LCB7XG4gICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==