ngx-histaff-alpha 4.6.9 → 4.7.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.
@@ -1,4 +1,4 @@
1
- import { AsyncPipe } from '@angular/common';
1
+ import { AsyncPipe, NgStyle } from '@angular/common';
2
2
  import { Component, ChangeDetectionStrategy, input, output, viewChild, signal } from '@angular/core';
3
3
  import { fromEvent } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
@@ -15,41 +15,47 @@ export class CorePaginationComponent {
15
15
  this.$onClickAdd = output();
16
16
  this.$container = viewChild('container');
17
17
  this.$current = viewChild('current');
18
+ this.$aperture = viewChild('aperture');
18
19
  this.$currentButtonContent = signal('1');
19
20
  this.$suspendCurrentPage = signal(true);
21
+ this.$navigationDirection = signal(1);
20
22
  this.subscriptions = [];
21
23
  }
22
24
  ngOnInit() { }
23
25
  goFirst() {
24
- this.$container()?.nativeElement.style.setProperty('--animation-name', 'rotate-current-content-bw');
26
+ this.$navigationDirection.set(-1);
25
27
  this.$suspendCurrentPage.set(false);
26
28
  setTimeout(() => {
27
29
  if (!!this.$pageCount())
28
30
  this.$currentPage().next(1);
31
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
29
32
  });
30
33
  }
31
34
  goLast() {
32
- this.$container()?.nativeElement.style.setProperty('--animation-name', 'rotate-current-content-fw');
35
+ this.$navigationDirection.set(1);
33
36
  this.$suspendCurrentPage.set(false);
34
37
  setTimeout(() => {
35
38
  if (!!this.$pageCount())
36
39
  this.$currentPage().next(this.$pageCount());
40
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
37
41
  });
38
42
  }
39
43
  goPrevious() {
40
- this.$container()?.nativeElement.style.setProperty('--animation-name', 'rotate-current-content-bw');
44
+ this.$navigationDirection.set(-1);
41
45
  this.$suspendCurrentPage.set(false);
42
46
  setTimeout(() => {
43
47
  if (!!this.$pageCount())
44
48
  this.$currentPage().next(this.$currentPage().value - 1);
49
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
45
50
  });
46
51
  }
47
52
  goNext() {
48
- this.$container()?.nativeElement.style.setProperty('--animation-name', 'rotate-current-content-fw');
53
+ this.$navigationDirection.set(1);
49
54
  this.$suspendCurrentPage.set(false);
50
55
  setTimeout(() => {
51
56
  if (!!this.$pageCount())
52
57
  this.$currentPage().next(this.$currentPage().value + 1);
58
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
53
59
  });
54
60
  }
55
61
  onClickAddLocal() {
@@ -91,12 +97,13 @@ export class CorePaginationComponent {
91
97
  this.touchEndSubscription$.unsubscribe();
92
98
  }
93
99
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CorePaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
94
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: CorePaginationComponent, isStandalone: true, selector: "core-pagination", inputs: { $currentPage: { classPropertyName: "$currentPage", publicName: "$currentPage", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $pageCount: { classPropertyName: "$pageCount", publicName: "$pageCount", isSignal: true, isRequired: true, transformFunction: null }, $loading: { classPropertyName: "$loading", publicName: "$loading", isSignal: true, isRequired: true, transformFunction: null }, $suspendCurrentPageSubscription: { classPropertyName: "$suspendCurrentPageSubscription", publicName: "$suspendCurrentPageSubscription", isSignal: true, isRequired: false, transformFunction: null }, $showAdd: { classPropertyName: "$showAdd", publicName: "$showAdd", isSignal: true, isRequired: false, transformFunction: null }, $background: { classPropertyName: "$background", publicName: "$background", isSignal: true, isRequired: false, transformFunction: null }, $fixedPageSize: { classPropertyName: "$fixedPageSize", publicName: "$fixedPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { $onClickAdd: "$onClickAdd" }, viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "$current", first: true, predicate: ["current"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n } @else {\r\n <i class=\"feather-aperture aperture\" [class.visible]=\"true\"></i>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 36px;--animation-name: rotate-current-content-fw}@keyframes rotate-current-content-fw{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotate-current-content-bw{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);animation:1s infinite linear;opacity:0;transition:.25s ease-out;animation-name:var(--animation-name)}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: CorePaginationComponent, isStandalone: true, selector: "core-pagination", inputs: { $currentPage: { classPropertyName: "$currentPage", publicName: "$currentPage", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $pageCount: { classPropertyName: "$pageCount", publicName: "$pageCount", isSignal: true, isRequired: true, transformFunction: null }, $loading: { classPropertyName: "$loading", publicName: "$loading", isSignal: true, isRequired: true, transformFunction: null }, $suspendCurrentPageSubscription: { classPropertyName: "$suspendCurrentPageSubscription", publicName: "$suspendCurrentPageSubscription", isSignal: true, isRequired: false, transformFunction: null }, $showAdd: { classPropertyName: "$showAdd", publicName: "$showAdd", isSignal: true, isRequired: false, transformFunction: null }, $background: { classPropertyName: "$background", publicName: "$background", isSignal: true, isRequired: false, transformFunction: null }, $fixedPageSize: { classPropertyName: "$fixedPageSize", publicName: "$fixedPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { $onClickAdd: "$onClickAdd" }, viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "$current", first: true, predicate: ["current"], descendants: true, isSignal: true }, { propertyName: "$aperture", first: true, predicate: ["aperture"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n <i #aperture class=\"feather-aperture aperture \" [class.visible]=\"$loading()\"></i>\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 30px}@keyframes rotateforwards{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotatebackwards{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);opacity:0;transition:.25s ease-out;animation:rotateforwards 1s linear infinite}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
95
101
  }
96
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CorePaginationComponent, decorators: [{
97
103
  type: Component,
98
104
  args: [{ selector: 'core-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
105
+ NgStyle,
99
106
  AsyncPipe,
100
- ], template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n } @else {\r\n <i class=\"feather-aperture aperture\" [class.visible]=\"true\"></i>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 36px;--animation-name: rotate-current-content-fw}@keyframes rotate-current-content-fw{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotate-current-content-bw{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);animation:1s infinite linear;opacity:0;transition:.25s ease-out;animation-name:var(--animation-name)}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"] }]
107
+ ], template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n <i #aperture class=\"feather-aperture aperture \" [class.visible]=\"$loading()\"></i>\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 30px}@keyframes rotateforwards{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotatebackwards{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);opacity:0;transition:.25s ease-out;animation:rotateforwards 1s linear infinite}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"] }]
101
108
  }], ctorParameters: () => [] });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2luYXRpb24vY29yZS1wYWdpbmF0aW9uL2NvcmUtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1wYWdpbmF0aW9uL2NvcmUtcGFnaW5hdGlvbi9jb3JlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQWdELHVCQUF1QixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkssT0FBTyxFQUE2QyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBVzVFLE1BQU0sT0FBTyx1QkFBdUI7SUErQmxDO1FBN0JBLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBMkIsQ0FBQztRQUN6RCxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ25DLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDdEMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUVyQyxvQ0FBK0IsR0FBRyxLQUFLLEVBQTRCLENBQUM7UUFDcEUsYUFBUSxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQzVCLGdCQUFXLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDOUIsbUJBQWMsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUVqQyxnQkFBVyxHQUFHLE1B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LGs5Q0NicEMsd3FDQXFCTSw0NkVEYkUsU0FBUzs7MkZBS0osdUJBQXVCO2tCQVRuQyxTQUFTOytCQUNJLGlCQUFpQixtQkFDVix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNMLFNBQVM7cUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5wdXQsIG91dHB1dCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb3JlLXBhZ2luYXRpb24nLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQXN5bmNQaXBlLFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29yZS1wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAkY3VycmVudFBhZ2UgPSBpbnB1dC5yZXF1aXJlZDxCZWhhdmlvclN1YmplY3Q8bnVtYmVyPj4oKTtcclxuICAkaGVpZ2h0ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xyXG4gICRwYWdlQ291bnQgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XHJcbiAgJGxvYWRpbmcgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICAkc3VzcGVuZEN1cnJlbnRQYWdlU3Vic2NyaXB0aW9uID0gaW5wdXQ8QmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+PigpO1xyXG4gICRzaG93QWRkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcclxuICAkYmFja2dyb3VuZCA9IGlucHV0PHN0cmluZz4oKTtcclxuICAkZml4ZWRQYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oKTtcclxuICBcclxuICAkb25DbGlja0FkZCA9IG91dHB1dCgpO1xyXG5cclxuICAkY29udGFpbmVyID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdjb250YWluZXInKTtcclxuICAkY3VycmVudCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY3VycmVudCcpO1xyXG5cclxuICAkY3VycmVudEJ1dHRvbkNvbnRlbnQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoJzEnKTtcclxuICAkc3VzcGVuZEN1cnJlbnRQYWdlOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbCh0cnVlKTtcclxuICBcclxuICBtb3VzZURvd25TdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHRvdWNoU3RhcnRTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIG1vdXNlVXBTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHRvdWNoRW5kU3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBtb3VzZURvd25TdWJzY3JpcHRpb24kITogU3Vic2NyaXB0aW9uO1xyXG4gIHRvdWNoU3RhcnRTdWJzY3JpcHRpb24kITogU3Vic2NyaXB0aW9uO1xyXG4gIG1vdXNlVXBTdWJzY3JpcHRpb24kITogU3Vic2NyaXB0aW9uO1xyXG4gIHRvdWNoRW5kU3Vic2NyaXB0aW9uJCE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcbiAgZ29GaXJzdCgpIHtcclxuICAgIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFuaW1hdGlvbi1uYW1lJywgJ3JvdGF0ZS1jdXJyZW50LWNvbnRlbnQtYncnKVxyXG4gICAgdGhpcy4kc3VzcGVuZEN1cnJlbnRQYWdlLnNldChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCEhdGhpcy4kcGFnZUNvdW50KCkpIHRoaXMuJGN1cnJlbnRQYWdlKCkubmV4dCgxKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnb0xhc3QoKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIoKT8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hbmltYXRpb24tbmFtZScsICdyb3RhdGUtY3VycmVudC1jb250ZW50LWZ3JylcclxuICAgIHRoaXMuJHN1c3BlbmRDdXJyZW50UGFnZS5zZXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghIXRoaXMuJHBhZ2VDb3VudCgpKSB0aGlzLiRjdXJyZW50UGFnZSgpLm5leHQodGhpcy4kcGFnZUNvdW50KCkpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdvUHJldmlvdXMoKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIoKT8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hbmltYXRpb24tbmFtZScsICdyb3RhdGUtY3VycmVudC1jb250ZW50LWJ3JylcclxuICAgIHRoaXMuJHN1c3BlbmRDdXJyZW50UGFnZS5zZXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghIXRoaXMuJHBhZ2VDb3VudCgpKSB0aGlzLiRjdXJyZW50UGFnZSgpLm5leHQodGhpcy4kY3VycmVudFBhZ2UoKS52YWx1ZSAtIDEpOyAgXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ29OZXh0KCkge1xyXG4gICAgdGhpcy4kY29udGFpbmVyKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYW5pbWF0aW9uLW5hbWUnLCAncm90YXRlLWN1cnJlbnQtY29udGVudC1mdycpXHJcbiAgICB0aGlzLiRzdXNwZW5kQ3VycmVudFBhZ2Uuc2V0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoISF0aGlzLiRwYWdlQ291bnQoKSkgdGhpcy4kY3VycmVudFBhZ2UoKS5uZXh0KHRoaXMuJGN1cnJlbnRQYWdlKCkudmFsdWUgKyAxKTsgICAgICBcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQWRkTG9jYWwoKSB7XHJcbiAgICB0aGlzLiRvbkNsaWNrQWRkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuJGN1cnJlbnRQYWdlKCkuc3Vic2NyaWJlKHggPT4gdGhpcy4kY3VycmVudEJ1dHRvbkNvbnRlbnQuc2V0KHgudG9TdHJpbmcoKSkpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMubW91c2VEb3duU3RyZWFtJCA9IGZyb21FdmVudCh0aGlzLiRjdXJyZW50KCkhLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nLCBfID0+IHtcclxuICAgICAgICB0aGlzLiRjdXJyZW50QnV0dG9uQ29udGVudC5zZXQoYCR7dGhpcy4kY3VycmVudFBhZ2UoKS52YWx1ZX0vJHt0aGlzLiRwYWdlQ291bnQoKX1gKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnRvdWNoU3RhcnRTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMuJGN1cnJlbnQoKSEubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBfID0+IHtcclxuICAgICAgICB0aGlzLiRjdXJyZW50QnV0dG9uQ29udGVudC5zZXQoYCR7dGhpcy4kY3VycmVudFBhZ2UoKS52YWx1ZX0vJHt0aGlzLiRwYWdlQ291bnQoKX1gKTtcclxuICAgICAgfSk7XHJcbiAgXHJcbiAgXHJcbiAgICAgIHRoaXMubW91c2VVcFN0cmVhbSQgPSBmcm9tRXZlbnQodGhpcy4kY3VycmVudCgpIS5uYXRpdmVFbGVtZW50LCAnbW91c2V1cCcsIF8gPT4ge1xyXG4gICAgICAgIHRoaXMuJGN1cnJlbnRCdXR0b25Db250ZW50LnNldChgJHt0aGlzLiRjdXJyZW50UGFnZSgpLnZhbHVlfWApO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50b3VjaEVuZFN0cmVhbSQgPSBmcm9tRXZlbnQodGhpcy4kY3VycmVudCgpIS5uYXRpdmVFbGVtZW50LCAndG91Y2hlbmQnLCBfID0+IHtcclxuICAgICAgICB0aGlzLiRjdXJyZW50QnV0dG9uQ29udGVudC5zZXQoYCR7dGhpcy4kY3VycmVudFBhZ2UoKS52YWx1ZX1gKTtcclxuICAgICAgfSk7XHJcbiAgXHJcbiAgXHJcbiAgICAgIHRoaXMubW91c2VEb3duU3Vic2NyaXB0aW9uJCA9IHRoaXMubW91c2VEb3duU3RyZWFtJC5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy50b3VjaFN0YXJ0U3Vic2NyaXB0aW9uJCA9IHRoaXMudG91Y2hTdGFydFN0cmVhbSQuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbiQgPSB0aGlzLm1vdXNlVXBTdHJlYW0kLnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnRvdWNoRW5kU3Vic2NyaXB0aW9uJCA9IHRoaXMudG91Y2hFbmRTdHJlYW0kLnN1YnNjcmliZSgpO1xyXG4gIFxyXG4gICAgICBpZiAodGhpcy4kYmFja2dyb3VuZCgpKSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuJGNvbnRhaW5lcigpIS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJnJywgdGhpcy4kYmFja2dyb3VuZCgpKSk7XHJcbiAgICAgIGlmICh0aGlzLiRoZWlnaHQoKSkgdGhpcy4kY29udGFpbmVyKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taGVpZ2h0JywgdGhpcy4kaGVpZ2h0KCkgKyAncHgnKVxyXG5cclxuICAgIH0pXHJcbiAgICBcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW91c2VEb3duU3Vic2NyaXB0aW9uJCkgdGhpcy5tb3VzZURvd25TdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy50b3VjaFN0YXJ0U3Vic2NyaXB0aW9uJCkgdGhpcy50b3VjaFN0YXJ0U3Vic2NyaXB0aW9uJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbiQpIHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbiQudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLnRvdWNoRW5kU3Vic2NyaXB0aW9uJCkgdGhpcy50b3VjaEVuZFN1YnNjcmlwdGlvbiQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cInBhZ2luYXRpb24tY29udGFpbmVyIGQtZmxleC1iZXR3ZWVuXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlyc3RcIiBbY2xhc3MuZGlzYWJsZV09XCIhJHBhZ2VDb3VudCgpIHx8ICRjdXJyZW50UGFnZSgpLnZhbHVlPT09MVwiIChjbGljayk9XCJnb0ZpcnN0KClcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlvdXNcIiBbY2xhc3MuZGlzYWJsZV09XCIhJHBhZ2VDb3VudCgpIHx8ICRjdXJyZW50UGFnZSgpLnZhbHVlPT09MVwiIChjbGljayk9XCJnb1ByZXZpb3VzKClcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2ICNjdXJyZW50IGNsYXNzPVwiY3VycmVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgQGlmICghJGxvYWRpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC10ZXh0XCI+e3sgJGN1cnJlbnRCdXR0b25Db250ZW50KCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItYXBlcnR1cmUgYXBlcnR1cmVcIiBbY2xhc3MudmlzaWJsZV09XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmV4dFwiIFtjbGFzcy5kaXNhYmxlXT1cIiEkcGFnZUNvdW50KCkgfHwgKCRjdXJyZW50UGFnZSgpIHwgYXN5bmMpPT09JHBhZ2VDb3VudCgpXCIgKGNsaWNrKT1cImdvTmV4dCgpXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxhc3RcIiBbY2xhc3MuZGlzYWJsZV09XCIhJHBhZ2VDb3VudCgpIHx8ICgkY3VycmVudFBhZ2UoKSB8IGFzeW5jKT09PSRwYWdlQ291bnQoKVwiIChjbGljayk9XCJnb0xhc3QoKVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKCRzaG93QWRkKCkpIHtcclxuICAgICAgICA8YSAoY2xpY2spPVwib25DbGlja0FkZExvY2FsKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZFwiPjwvZGl2PlxyXG4gICAgICAgIDwvYT5cclxuICAgIH1cclxuPC9kaXY+Il19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2luYXRpb24vY29yZS1wYWdpbmF0aW9uL2NvcmUtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1wYWdpbmF0aW9uL2NvcmUtcGFnaW5hdGlvbi9jb3JlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFnRCx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBa0IsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN0TCxPQUFPLEVBQTZDLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFZNUUsTUFBTSxPQUFPLHVCQUF1QjtJQWtDbEM7UUFoQ0EsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEyQixDQUFDO1FBQ3pELFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDbkMsZUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRXJDLG9DQUErQixHQUFHLEtBQUssRUFBNEIsQ0FBQztRQUNwRSxhQUFRLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUM5QixtQkFBYyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBRWpDLGdCQUFXLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFdkIsZUFBVSxHQUFHLFNBQVMsQ0FBYSxXQUFXLENBQUMsQ0FBQztRQUNoRCxhQUFRLEdBQUcsU0FBUyxDQUFhLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLGNBQVMsR0FBRyxTQUFTLENBQWEsVUFBVSxDQUFDLENBQUE7UUFFN0MsMEJBQXFCLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RCx3QkFBbUIsR0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVELHlCQUFvQixHQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFXekQsa0JBQWEsR0FBbUIsRUFBRSxDQUFBO0lBRW5CLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7SUFFbkIsT0FBTztRQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFDeEYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3ZGLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFDeEYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFDdkYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWU7UUFFYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBRWQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQ2pGLENBQUE7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUNqRixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFHLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDbkYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixDQUFDLENBQUMsQ0FBQztZQUdILElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUM3RSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDL0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxDQUFDO1lBR0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRTlELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pILElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUUzRyxDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsc0JBQXNCO1lBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNFLElBQUksSUFBSSxDQUFDLHVCQUF1QjtZQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3RSxJQUFJLElBQUksQ0FBQyxvQkFBb0I7WUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkUsSUFBSSxJQUFJLENBQUMscUJBQXFCO1lBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNFLENBQUM7OEdBeEhVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDBqRENkcEMsd3BDQW9CTSxxMUVEWEUsU0FBUzs7MkZBS0osdUJBQXVCO2tCQVZuQyxTQUFTOytCQUNJLGlCQUFpQixtQkFDVix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNMLE9BQU87d0JBQ1AsU0FBUztxQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBpbnB1dCwgb3V0cHV0LCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsLCBzaWduYWwsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb3JlLXBhZ2luYXRpb24nLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgTmdTdHlsZSxcclxuICAgICAgICBBc3luY1BpcGUsXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb3JlLXBhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVBhZ2luYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICRjdXJyZW50UGFnZSA9IGlucHV0LnJlcXVpcmVkPEJlaGF2aW9yU3ViamVjdDxudW1iZXI+PigpO1xyXG4gICRoZWlnaHQgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XHJcbiAgJHBhZ2VDb3VudCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuICAkbG9hZGluZyA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcblxyXG4gICRzdXNwZW5kQ3VycmVudFBhZ2VTdWJzY3JpcHRpb24gPSBpbnB1dDxCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4+KCk7XHJcbiAgJHNob3dBZGQgPSBpbnB1dDxib29sZWFuPigpO1xyXG4gICRiYWNrZ3JvdW5kID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gICRmaXhlZFBhZ2VTaXplID0gaW5wdXQ8bnVtYmVyPigpO1xyXG4gIFxyXG4gICRvbkNsaWNrQWRkID0gb3V0cHV0KCk7XHJcblxyXG4gICRjb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lcicpO1xyXG4gICRjdXJyZW50ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdjdXJyZW50Jyk7XHJcbiAgJGFwZXJ0dXJlID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdhcGVydHVyZScpXHJcblxyXG4gICRjdXJyZW50QnV0dG9uQ29udGVudDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCgnMScpO1xyXG4gICRzdXNwZW5kQ3VycmVudFBhZ2U6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKHRydWUpO1xyXG5cclxuICAkbmF2aWdhdGlvbkRpcmVjdGlvbjogV3JpdGFibGVTaWduYWw8bnVtYmVyPiA9IHNpZ25hbCgxKTtcclxuICBcclxuICBtb3VzZURvd25TdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHRvdWNoU3RhcnRTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIG1vdXNlVXBTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHRvdWNoRW5kU3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBtb3VzZURvd25TdWJzY3JpcHRpb24kITogU3Vic2NyaXB0aW9uO1xyXG4gIHRvdWNoU3RhcnRTdWJzY3JpcHRpb24kITogU3Vic2NyaXB0aW9uO1xyXG4gIG1vdXNlVXBTdWJzY3JpcHRpb24kITogU3Vic2NyaXB0aW9uO1xyXG4gIHRvdWNoRW5kU3Vic2NyaXB0aW9uJCE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcbiAgZ29GaXJzdCgpIHtcclxuICAgIHRoaXMuJG5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KC0xKTtcclxuICAgIHRoaXMuJHN1c3BlbmRDdXJyZW50UGFnZS5zZXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghIXRoaXMuJHBhZ2VDb3VudCgpKSB0aGlzLiRjdXJyZW50UGFnZSgpLm5leHQoMSk7XHJcbiAgICAgIHRoaXMuJGFwZXJ0dXJlKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2FuaW1hdGlvbi1uYW1lJywgJ3JvdGF0ZWJhY2t3YXJkcycpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ29MYXN0KCkge1xyXG4gICAgdGhpcy4kbmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoMSk7XHJcbiAgICB0aGlzLiRzdXNwZW5kQ3VycmVudFBhZ2Uuc2V0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoISF0aGlzLiRwYWdlQ291bnQoKSkgdGhpcy4kY3VycmVudFBhZ2UoKS5uZXh0KHRoaXMuJHBhZ2VDb3VudCgpKTtcclxuICAgICAgdGhpcy4kYXBlcnR1cmUoKT8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYW5pbWF0aW9uLW5hbWUnLCAncm90YXRlZm9yd2FyZHMnKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdvUHJldmlvdXMoKSB7XHJcbiAgICB0aGlzLiRuYXZpZ2F0aW9uRGlyZWN0aW9uLnNldCgtMSk7XHJcbiAgICB0aGlzLiRzdXNwZW5kQ3VycmVudFBhZ2Uuc2V0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoISF0aGlzLiRwYWdlQ291bnQoKSkgdGhpcy4kY3VycmVudFBhZ2UoKS5uZXh0KHRoaXMuJGN1cnJlbnRQYWdlKCkudmFsdWUgLSAxKTtcclxuICAgICAgdGhpcy4kYXBlcnR1cmUoKT8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYW5pbWF0aW9uLW5hbWUnLCAncm90YXRlYmFja3dhcmRzJylcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnb05leHQoKSB7XHJcbiAgICB0aGlzLiRuYXZpZ2F0aW9uRGlyZWN0aW9uLnNldCgxKTtcclxuICAgIHRoaXMuJHN1c3BlbmRDdXJyZW50UGFnZS5zZXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghIXRoaXMuJHBhZ2VDb3VudCgpKSB0aGlzLiRjdXJyZW50UGFnZSgpLm5leHQodGhpcy4kY3VycmVudFBhZ2UoKS52YWx1ZSArIDEpO1xyXG4gICAgICB0aGlzLiRhcGVydHVyZSgpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdhbmltYXRpb24tbmFtZScsICdyb3RhdGVmb3J3YXJkcycpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0FkZExvY2FsKCkge1xyXG4gICAgdGhpcy4kb25DbGlja0FkZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLiRjdXJyZW50UGFnZSgpLnN1YnNjcmliZSh4ID0+IHRoaXMuJGN1cnJlbnRCdXR0b25Db250ZW50LnNldCh4LnRvU3RyaW5nKCkpKVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLm1vdXNlRG93blN0cmVhbSQgPSBmcm9tRXZlbnQodGhpcy4kY3VycmVudCgpIS5uYXRpdmVFbGVtZW50LCAnbW91c2Vkb3duJywgXyA9PiB7XHJcbiAgICAgICAgdGhpcy4kY3VycmVudEJ1dHRvbkNvbnRlbnQuc2V0KGAke3RoaXMuJGN1cnJlbnRQYWdlKCkudmFsdWV9LyR7dGhpcy4kcGFnZUNvdW50KCl9YCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50b3VjaFN0YXJ0U3RyZWFtJCA9IGZyb21FdmVudCh0aGlzLiRjdXJyZW50KCkhLm5hdGl2ZUVsZW1lbnQsICd0b3VjaHN0YXJ0JywgXyA9PiB7XHJcbiAgICAgICAgdGhpcy4kY3VycmVudEJ1dHRvbkNvbnRlbnQuc2V0KGAke3RoaXMuJGN1cnJlbnRQYWdlKCkudmFsdWV9LyR7dGhpcy4kcGFnZUNvdW50KCl9YCk7XHJcbiAgICAgIH0pO1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLm1vdXNlVXBTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMuJGN1cnJlbnQoKSEubmF0aXZlRWxlbWVudCwgJ21vdXNldXAnLCBfID0+IHtcclxuICAgICAgICB0aGlzLiRjdXJyZW50QnV0dG9uQ29udGVudC5zZXQoYCR7dGhpcy4kY3VycmVudFBhZ2UoKS52YWx1ZX1gKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG91Y2hFbmRTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMuJGN1cnJlbnQoKSEubmF0aXZlRWxlbWVudCwgJ3RvdWNoZW5kJywgXyA9PiB7XHJcbiAgICAgICAgdGhpcy4kY3VycmVudEJ1dHRvbkNvbnRlbnQuc2V0KGAke3RoaXMuJGN1cnJlbnRQYWdlKCkudmFsdWV9YCk7XHJcbiAgICAgIH0pO1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLm1vdXNlRG93blN1YnNjcmlwdGlvbiQgPSB0aGlzLm1vdXNlRG93blN0cmVhbSQuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMudG91Y2hTdGFydFN1YnNjcmlwdGlvbiQgPSB0aGlzLnRvdWNoU3RhcnRTdHJlYW0kLnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24kID0gdGhpcy5tb3VzZVVwU3RyZWFtJC5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy50b3VjaEVuZFN1YnNjcmlwdGlvbiQgPSB0aGlzLnRvdWNoRW5kU3RyZWFtJC5zdWJzY3JpYmUoKTtcclxuICBcclxuICAgICAgaWYgKHRoaXMuJGJhY2tncm91bmQoKSkgc2V0VGltZW91dCgoKSA9PiB0aGlzLiRjb250YWluZXIoKSEubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1iZycsIHRoaXMuJGJhY2tncm91bmQoKSkpO1xyXG4gICAgICBpZiAodGhpcy4kaGVpZ2h0KCkpIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWhlaWdodCcsIHRoaXMuJGhlaWdodCgpICsgJ3B4JylcclxuXHJcbiAgICB9KVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vdXNlRG93blN1YnNjcmlwdGlvbiQpIHRoaXMubW91c2VEb3duU3Vic2NyaXB0aW9uJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMudG91Y2hTdGFydFN1YnNjcmlwdGlvbiQpIHRoaXMudG91Y2hTdGFydFN1YnNjcmlwdGlvbiQudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24kKSB0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy50b3VjaEVuZFN1YnNjcmlwdGlvbiQpIHRoaXMudG91Y2hFbmRTdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lciBkLWZsZXgtYmV0d2VlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpcnN0XCIgW2NsYXNzLmRpc2FibGVdPVwiISRwYWdlQ291bnQoKSB8fCAkY3VycmVudFBhZ2UoKS52YWx1ZT09PTFcIiAoY2xpY2spPVwiZ29GaXJzdCgpXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpb3VzXCIgW2NsYXNzLmRpc2FibGVdPVwiISRwYWdlQ291bnQoKSB8fCAkY3VycmVudFBhZ2UoKS52YWx1ZT09PTFcIiAoY2xpY2spPVwiZ29QcmV2aW91cygpXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiAjY3VycmVudCBjbGFzcz1cImN1cnJlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpICNhcGVydHVyZSBjbGFzcz1cImZlYXRoZXItYXBlcnR1cmUgYXBlcnR1cmUgXCIgW2NsYXNzLnZpc2libGVdPVwiJGxvYWRpbmcoKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIEBpZiAoISRsb2FkaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnJlbnQtdGV4dFwiPnt7ICRjdXJyZW50QnV0dG9uQ29udGVudCgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmV4dFwiIFtjbGFzcy5kaXNhYmxlXT1cIiEkcGFnZUNvdW50KCkgfHwgKCRjdXJyZW50UGFnZSgpIHwgYXN5bmMpPT09JHBhZ2VDb3VudCgpXCIgKGNsaWNrKT1cImdvTmV4dCgpXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxhc3RcIiBbY2xhc3MuZGlzYWJsZV09XCIhJHBhZ2VDb3VudCgpIHx8ICgkY3VycmVudFBhZ2UoKSB8IGFzeW5jKT09PSRwYWdlQ291bnQoKVwiIChjbGljayk9XCJnb0xhc3QoKVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKCRzaG93QWRkKCkpIHtcclxuICAgICAgICA8YSAoY2xpY2spPVwib25DbGlja0FkZExvY2FsKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZFwiPjwvZGl2PlxyXG4gICAgICAgIDwvYT5cclxuICAgIH1cclxuPC9kaXY+Il19