@colijnit/product 257.1.4 → 257.1.6

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,43 +1,56 @@
1
- import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, ViewChild } from '@angular/core';
1
+ import { __awaiter } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, ViewChild } from '@angular/core';
2
3
  import { CoDocument } from '@colijnit/mainapi/build/model/co-document';
3
4
  import { ProductConnectorService } from '../../service/product-connector.service';
4
5
  import { ProductEventService } from '../../service/product-event.service';
5
- import { IconEnum } from '../../enum/icon.enum';
6
- import { IconCacheService } from '../../service/icon-cache.service';
7
6
  import { DomSanitizer } from '@angular/platform-browser';
7
+ export class ImageViewModel {
8
+ }
8
9
  export class ImageCarouselComponent {
9
- constructor(_ione, _appEventService, _changeDetector, _domSanitizer, iconCache) {
10
+ constructor(_ione, _appEventService, _changeDetector, _domSanitizer) {
10
11
  this._ione = _ione;
11
12
  this._appEventService = _appEventService;
12
13
  this._changeDetector = _changeDetector;
13
14
  this._domSanitizer = _domSanitizer;
14
- this.iconCache = iconCache;
15
- this.icons = IconEnum;
16
- this.showLoader = false;
17
15
  this.showRefresh = false;
18
16
  this.resizing = false;
17
+ this.imageViewModels = [];
18
+ this.showLoader = false;
19
19
  this._currentIndex = 0;
20
20
  this._images = [];
21
21
  this._subs = [];
22
+ this._resizeCanvasHeight = 500;
22
23
  this._subs.push(this._appEventService.onRenderStarted.subscribe(() => {
23
24
  this.showLoader = true;
24
- }), this._appEventService.onDraftRenderImageReceived.subscribe((url) => {
25
- if (this._images[0] instanceof CoDocument) {
26
- this._images.unshift(url);
27
- }
28
- else {
29
- this._images[0] = url;
25
+ this._changeDetector.detectChanges();
26
+ setTimeout(() => {
27
+ this.showLoader = false;
28
+ this._changeDetector.detectChanges();
29
+ }, 10000);
30
+ }), this._appEventService.onDraftRenderImageReceived.subscribe((event) => {
31
+ if (event && event.detail) {
32
+ if (this._images[0] instanceof CoDocument) {
33
+ this._images.unshift(event.detail);
34
+ }
35
+ else {
36
+ this._images[0] = event.detail;
37
+ }
38
+ this._loadAndRescaleImages();
30
39
  }
31
40
  this.showLoader = false;
41
+ this._changeDetector.detectChanges();
32
42
  }));
33
43
  }
34
44
  set images(value) {
35
45
  if (value && value.length > 0) {
36
46
  this._images = this._filterValidImages(value);
37
- this._loadImages();
47
+ this._loadAndRescaleImages();
38
48
  this._changeDetector.detectChanges();
39
49
  }
40
50
  }
51
+ get images() {
52
+ return this._images;
53
+ }
41
54
  handleWindowResize() {
42
55
  this.resizing = true;
43
56
  this._scrollCarouselToIndex();
@@ -62,11 +75,6 @@ export class ImageCarouselComponent {
62
75
  this._currentIndex = value;
63
76
  this._scrollCarouselToIndex();
64
77
  }
65
- get images() {
66
- return this._images;
67
- }
68
- ngOnInit() {
69
- }
70
78
  ngOnDestroy() {
71
79
  this.carousel = undefined;
72
80
  this._subs.forEach(s => s.unsubscribe());
@@ -77,43 +85,90 @@ export class ImageCarouselComponent {
77
85
  onForceRenderImage() {
78
86
  this._appEventService.onForceRenderImage.next();
79
87
  }
80
- getImageSrc(image) {
81
- let source = '';
82
- if (image instanceof CoDocument) {
83
- if (image.filePath) {
84
- source = image.filePath;
85
- }
86
- else {
87
- source = image.documentBodyAsDataUri;
88
- }
88
+ handleShowImage(imageViewModel) {
89
+ if (imageViewModel && imageViewModel.originalSource) {
90
+ let popupWindow = window.open('', 'Image zoom', 'width=600,height=400');
91
+ // Set the content of the popup window
92
+ popupWindow.document.write('<html><head><title>Image zoom</title></head><body>');
93
+ popupWindow.document.write(`<img src=${imageViewModel.originalSource} alt="Image" style="width:100%; height:auto;">`);
94
+ popupWindow.document.write('</body></html>');
95
+ // Close the document to render the popup window
96
+ popupWindow.document.close();
89
97
  }
90
- else if (image.detail !== undefined) {
91
- source = image.detail;
92
- }
93
- return this._domSanitizer.bypassSecurityTrustUrl(source);
94
98
  }
95
99
  _filterValidImages(value) {
96
100
  if (!value) {
97
101
  return [];
98
102
  }
99
- return value.filter(doc => {
103
+ return value.filter((doc) => {
100
104
  const pattern = /\.(jpg|jpeg|png|gif|bmp|tiff|webp)$/i;
101
- return pattern.test(doc.fileName) || !!doc.filePath;
105
+ return typeof doc === 'string' || (pattern.test(doc.fileName) || !!doc.filePath);
102
106
  });
103
107
  }
104
- _loadImages() {
108
+ _loadAndRescaleImages() {
109
+ this.imageViewModels.length = 0;
105
110
  if (this._images) {
106
111
  this._images.forEach((i) => {
107
- if (!i.documentBody && !i.filePath) {
108
- this._ione.getDocumentContent(i.documentId, false).then((content) => {
109
- if (content) {
110
- i.documentBody = content.documentContent;
111
- }
112
- });
112
+ let imageViewModel = new ImageViewModel();
113
+ imageViewModel.image = i;
114
+ if (typeof i === 'string') { // is a rendered image coming from configurator
115
+ this._resizeAndSanitizeSource(i, imageViewModel);
116
+ }
117
+ else {
118
+ if (i.filePath) {
119
+ this._resizeAndSanitizeSource(i.filePath, imageViewModel);
120
+ }
121
+ else if (i.documentBody) {
122
+ this._resizeAndSanitizeSource(i.documentBodyAsDataUri, imageViewModel);
123
+ }
124
+ else {
125
+ this._ione.getDocumentContent(i.documentId, false).then((content) => {
126
+ if (content) {
127
+ i.documentBody = content.documentContent;
128
+ this._resizeAndSanitizeSource(i.documentBodyAsDataUri, imageViewModel);
129
+ this._changeDetector.detectChanges();
130
+ }
131
+ });
132
+ }
113
133
  }
134
+ this.imageViewModels.push(imageViewModel);
135
+ this._changeDetector.detectChanges();
114
136
  });
115
137
  }
116
138
  }
139
+ _resizeAndSanitizeSource(source, imageViewModel) {
140
+ const resizeCanvas = document.createElement('canvas');
141
+ const resizeCanvasContext = resizeCanvas.getContext('2d');
142
+ const resizeImage = document.createElement('img');
143
+ resizeImage.onload = () => __awaiter(this, void 0, void 0, function* () {
144
+ resizeCanvasContext.imageSmoothingEnabled = true;
145
+ resizeCanvasContext.imageSmoothingQuality = 'high';
146
+ // Get the original image dimensions
147
+ const originalWidth = resizeImage.width;
148
+ const originalHeight = resizeImage.height;
149
+ // Calculate the aspect ratio
150
+ const aspectRatio = originalWidth / originalHeight;
151
+ // Calculate the new width and height while maintaining the aspect ratio
152
+ let newWidth = this._resizeCanvasHeight;
153
+ let newHeight = this._resizeCanvasHeight;
154
+ if (originalWidth > originalHeight) {
155
+ newHeight = this._resizeCanvasHeight / aspectRatio;
156
+ }
157
+ else {
158
+ newWidth = this._resizeCanvasHeight * aspectRatio;
159
+ }
160
+ // Set the canvas size to the new width and height
161
+ resizeCanvas.width = newWidth;
162
+ resizeCanvas.height = newHeight;
163
+ const imageWidth = this._resizeCanvasHeight * (resizeImage.height / resizeImage.width);
164
+ resizeCanvasContext.drawImage(resizeImage, 0, 0, newWidth, newHeight);
165
+ const resizedSource = resizeCanvas.toDataURL('image/jpeg');
166
+ imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
167
+ imageViewModel.originalSource = source;
168
+ });
169
+ // @ts-ignore
170
+ resizeImage.src = source;
171
+ }
117
172
  _scrollCarouselToIndex() {
118
173
  if (this.currentIndex > -1 && this.currentIndex <= this.images.length) {
119
174
  const movePx = this.currentIndex * this.carousel.nativeElement.clientWidth;
@@ -131,45 +186,47 @@ ImageCarouselComponent.decorators = [
131
186
  { type: Component, args: [{
132
187
  selector: 'app-image-carousel',
133
188
  template: `
134
- <div id="product_page_carousel">
135
- <div id="product_page_carousel_items">
136
- <co-loader [isShown]="showLoader"></co-loader>
137
- <div #carousel class="inner-carousel">
138
- <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
139
- <div *ngIf="images[0]" class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)">
140
- <img [src]="getImageSrc(images[0])">
189
+ <div id="product_page_carousel">
190
+ <div id="product_page_carousel_items">
191
+ <co-loader [isShown]="true" *ngIf="showLoader"></co-loader>
192
+ <div #carousel class="inner-carousel">
193
+ <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
194
+ <div *ngIf="imageViewModels[0]" class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
195
+ <img [src]="imageViewModels[0].source">
196
+ </div>
197
+ <div *ngFor="let imageViewModel of imageViewModels.slice(1); let index = index" class="carousel-item"
198
+ [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
199
+ <img [src]="imageViewModel.source">
200
+ </div>
201
+ <div class="carousel-scroller-layer" *ngIf="imageViewModels && imageViewModels.length > 1">
202
+ <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()" *ngIf="currentIndex > 0"></div>
203
+ <div class="carousel-item-scroller next" (click)="gotoNextSlide()" *ngIf="currentIndex < images.length - 1"></div>
204
+ </div>
205
+ </div>
206
+ <!--
207
+ <co-icon class="selector-type-icon refresh-button" [iconData]="iconCache.getIcon(icons.Refresh)" (click)="onForceRenderImage()" [class.loading]="showLoader" *ngIf="showRefresh"></co-icon>
208
+ -->
141
209
  </div>
142
- <div *ngFor="let image of images.slice(1); let index = index" class="carousel-item" [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))">
143
- <img [src]="getImageSrc(image)">
144
- </div>
145
- <div class="carousel-scroller-layer" *ngIf="images && images.length > 1">
146
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()" *ngIf="currentIndex > 0"></div>
147
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()" *ngIf="currentIndex < images.length - 1"></div>
148
- </div>
149
- </div>
150
- <!--
151
- <co-icon class="selector-type-icon refresh-button" [iconData]="iconCache.getIcon(icons.Refresh)" (click)="onForceRenderImage()" [class.loading]="showLoader" *ngIf="showRefresh"></co-icon>
152
- -->
153
- </div>
154
210
 
155
- <div id="product_page_carousel_thumbs">
156
- <co-scroll-container class="scroll-container" *ngIf="images && images.length > 1">
157
- <div *ngFor="let image of images; let index = index" class="carousel-thumb" [class.active]="index === currentIndex">
158
- <img [src]="getImageSrc(image)" (click)="handleThumbClick(index)"/>
211
+ <div id="product_page_carousel_thumbs">
212
+ <co-scroll-container class="scroll-container" *ngIf="imageViewModels && imageViewModels.length > 1">
213
+ <div *ngFor="let imageViewModel of imageViewModels; let index = index" class="carousel-thumb"
214
+ [class.active]="index === currentIndex">
215
+ <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
216
+ </div>
217
+ </co-scroll-container>
159
218
  </div>
160
- </co-scroll-container>
161
219
  </div>
162
- </div>
163
220
  `,
164
- styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74B77F;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;-o-object-fit:contain;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"]
221
+ changeDetection: ChangeDetectionStrategy.OnPush,
222
+ styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74B77F;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;cursor:zoom-in;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;-o-object-fit:contain;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"]
165
223
  },] }
166
224
  ];
167
225
  ImageCarouselComponent.ctorParameters = () => [
168
226
  { type: ProductConnectorService },
169
227
  { type: ProductEventService },
170
228
  { type: ChangeDetectorRef },
171
- { type: DomSanitizer },
172
- { type: IconCacheService }
229
+ { type: DomSanitizer }
173
230
  ];
174
231
  ImageCarouselComponent.propDecorators = {
175
232
  carousel: [{ type: ViewChild, args: ['carousel', { read: ElementRef },] }],
@@ -180,4 +237,4 @@ ImageCarouselComponent.propDecorators = {
180
237
  gotoPrevSlide: [{ type: HostListener, args: ['swiperight',] }],
181
238
  resizing: [{ type: HostBinding, args: ['class.resizing',] }]
182
239
  };
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2ltYWdlLWNhcm91c2VsL2ltYWdlLWNhcm91c2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFlBQVksRUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBc0NoRSxNQUFNLE9BQU8sc0JBQXNCO0lBb0VqQyxZQUNVLEtBQThCLEVBQzlCLGdCQUFxQyxFQUNyQyxlQUFrQyxFQUNsQyxhQUEyQixFQUM1QixTQUEyQjtRQUoxQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQXZFcEIsVUFBSyxHQUFvQixRQUFRLENBQUM7UUFFM0MsZUFBVSxHQUFZLEtBQUssQ0FBQztRQU01QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQTZDN0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVFoQixrQkFBYSxH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Q0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDckUsTUFBTSxNQUFNLEdBQVcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDbkYsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUNoRCx5Q0FBeUM7Z0JBQ3pDLGtCQUFrQjtnQkFDbEIsdUJBQXVCO2dCQUN2QixNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7OztZQWhNRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QlQ7O2FBRUY7OztZQTFDUSx1QkFBdUI7WUFDdkIsbUJBQW1CO1lBSG5CLGlCQUFpQjtZQU9sQixZQUFZO1lBRFgsZ0JBQWdCOzs7dUJBNkN0QixTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTswQkFHMUMsS0FBSztxQkFHTCxLQUFLO2lDQVNMLFlBQVksU0FBQyxlQUFlOzRCQVU1QixZQUFZLFNBQUMsV0FBVzs0QkFLeEIsWUFBWSxTQUFDLFlBQVk7dUJBa0J6QixXQUFXLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvRG9jdW1lbnQgfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudCc7XG5pbXBvcnQgeyBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvcHJvZHVjdC1jb25uZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWN0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJY29uRW51bSB9IGZyb20gJy4uLy4uL2VudW0vaWNvbi5lbnVtJztcbmltcG9ydCB7IEljb25DYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2ljb24tY2FjaGUuc2VydmljZSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbWFnZS1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbFwiPlxuICAgICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbF9pdGVtc1wiPlxuICAgICAgICA8Y28tbG9hZGVyIFtpc1Nob3duXT1cInNob3dMb2FkZXJcIj48L2NvLWxvYWRlcj5cbiAgICAgICAgPGRpdiAjY2Fyb3VzZWwgY2xhc3M9XCJpbm5lci1jYXJvdXNlbFwiPlxuICAgICAgICAgIDwhLS0gVGhpcyBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhlIGZvciBsb29wIHRvIHByZXZlbnQgZmxhc2hpbmcgaW1hZ2VzIHdoZW4gdXBkYXRpbmcuIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbWFnZXNbMF1cIiBjbGFzcz1cImNhcm91c2VsLWl0ZW1cIiBbaWRdPVwiJ3NsaWRlLTAnXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0N1cnJlbnRJbmRleCgwKVwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKGltYWdlc1swXSlcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpbWFnZXMuc2xpY2UoMSk7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC1pdGVtXCIgW2lkXT1cIidzbGlkZS0nICsgKGluZGV4ICsgMSlcIiBbY2xhc3MuYWN0aXZlXT1cImlzQ3VycmVudEluZGV4KChpbmRleCArIDEpKVwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKGltYWdlKVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1zY3JvbGxlci1sYXllclwiICpuZ0lmPVwiaW1hZ2VzICYmIGltYWdlcy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtaXRlbS1zY3JvbGxlciBwcmV2XCIgKGNsaWNrKT1cImdvdG9QcmV2U2xpZGUoKVwiICpuZ0lmPVwiY3VycmVudEluZGV4ID4gMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWl0ZW0tc2Nyb2xsZXIgbmV4dFwiIChjbGljayk9XCJnb3RvTmV4dFNsaWRlKClcIiAqbmdJZj1cImN1cnJlbnRJbmRleCA8IGltYWdlcy5sZW5ndGggLSAxXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuPCEtLVxuICAgICAgICA8Y28taWNvbiBjbGFzcz1cInNlbGVjdG9yLXR5cGUtaWNvbiByZWZyZXNoLWJ1dHRvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGUuZ2V0SWNvbihpY29ucy5SZWZyZXNoKVwiIChjbGljayk9XCJvbkZvcmNlUmVuZGVySW1hZ2UoKVwiIFtjbGFzcy5sb2FkaW5nXT1cInNob3dMb2FkZXJcIiAqbmdJZj1cInNob3dSZWZyZXNoXCI+PC9jby1pY29uPlxuLS0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbF90aHVtYnNcIj5cbiAgICAgICAgPGNvLXNjcm9sbC1jb250YWluZXIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpbWFnZXMgJiYgaW1hZ2VzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpbWFnZXM7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC10aHVtYlwiIFtjbGFzcy5hY3RpdmVdPVwiaW5kZXggPT09IGN1cnJlbnRJbmRleFwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKGltYWdlKVwiIChjbGljayk9XCJoYW5kbGVUaHVtYkNsaWNrKGluZGV4KVwiLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jby1zY3JvbGwtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWNhcm91c2VsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uRW51bSA9IEljb25FbnVtO1xuXG4gIHB1YmxpYyBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY2Fyb3VzZWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGNhcm91c2VsOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW1hZ2VzKHZhbHVlOiBDb0RvY3VtZW50W10pIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5faW1hZ2VzID0gdGhpcy5fZmlsdGVyVmFsaWRJbWFnZXModmFsdWUpO1xuICAgICAgdGhpcy5fbG9hZEltYWdlcygpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwdWJsaWMgaGFuZGxlV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXppbmcgPSB0cnVlO1xuICAgIHRoaXMuX3Njcm9sbENhcm91c2VsVG9JbmRleCgpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVUaW1lcik7XG4gICAgdGhpcy5fcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzaXppbmcgPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignc3dpcGVsZWZ0JylcbiAgcHVibGljIGdvdG9OZXh0U2xpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3N3aXBlcmlnaHQnKVxuICBwdWJsaWMgZ290b1ByZXZTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICB9XG5cbiAgcHVibGljIGlzQ3VycmVudEluZGV4KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPT09IGluZGV4O1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50SW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEluZGV4O1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50SW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IHZhbHVlO1xuICAgIHRoaXMuX3Njcm9sbENhcm91c2VsVG9JbmRleCgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXNpemluZycpXG4gIHB1YmxpYyByZXNpemluZyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgaW1hZ2VzKCk6IENvRG9jdW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlcztcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2l6ZVRpbWVyOiBhbnk7XG5cbiAgcHJpdmF0ZSBfY3VycmVudEluZGV4ID0gMDtcblxuICBwcml2YXRlIF9pbWFnZXMgPSBbXTtcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pb25lOiBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IFByb2R1Y3RFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHB1YmxpYyBpY29uQ2FjaGU6IEljb25DYWNoZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3N1YnMucHVzaChcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vblJlbmRlclN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uRHJhZnRSZW5kZXJJbWFnZVJlY2VpdmVkLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlc1swXSBpbnN0YW5jZW9mIENvRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9pbWFnZXMudW5zaGlmdCh1cmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2ltYWdlc1swXSA9IHVybDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jYXJvdXNlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVRodW1iQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JjZVJlbmRlckltYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkZvcmNlUmVuZGVySW1hZ2UubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGdldEltYWdlU3JjKGltYWdlOiBDb0RvY3VtZW50IHwgQ3VzdG9tRXZlbnQpOiBTYWZlVXJsIHtcbiAgICBsZXQgc291cmNlID0gJyc7XG4gICAgaWYgKGltYWdlIGluc3RhbmNlb2YgQ29Eb2N1bWVudCkge1xuICAgICAgaWYgKGltYWdlLmZpbGVQYXRoKSB7XG4gICAgICAgIHNvdXJjZSA9IGltYWdlLmZpbGVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlID0gaW1hZ2UuZG9jdW1lbnRCb2R5QXNEYXRhVXJpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1hZ2UuZGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvdXJjZSA9IGltYWdlLmRldGFpbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlclZhbGlkSW1hZ2VzKHZhbHVlOiBDb0RvY3VtZW50W10pOiBDb0RvY3VtZW50W10ge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcihkb2MgPT4ge1xuICAgICAgY29uc3QgcGF0dGVybiA9IC9cXC4oanBnfGpwZWd8cG5nfGdpZnxibXB8dGlmZnx3ZWJwKSQvaTtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoZG9jLmZpbGVOYW1lKSB8fCAhIWRvYy5maWxlUGF0aDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRJbWFnZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ltYWdlcykge1xuICAgICAgdGhpcy5faW1hZ2VzLmZvckVhY2goKGk6IENvRG9jdW1lbnQpID0+IHtcbiAgICAgICAgaWYgKCFpLmRvY3VtZW50Qm9keSAmJiAhaS5maWxlUGF0aCkge1xuICAgICAgICAgIHRoaXMuX2lvbmUuZ2V0RG9jdW1lbnRDb250ZW50KGkuZG9jdW1lbnRJZCwgZmFsc2UpLnRoZW4oKGNvbnRlbnQ6IERvY3VtZW50Q29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgaS5kb2N1bWVudEJvZHkgPSBjb250ZW50LmRvY3VtZW50Q29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+IC0xICYmIHRoaXMuY3VycmVudEluZGV4IDw9IHRoaXMuaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbW92ZVB4OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGlmICh0aGlzLmNhcm91c2VsICYmIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IG1vdmVQeDtcbiAgICAgICAgLy8gdGhpcy5jYXJvdXNlbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgLy8gICBsZWZ0OiBtb3ZlUHgsXG4gICAgICAgIC8vICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIC8vIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2ltYWdlLWNhcm91c2VsL2ltYWdlLWNhcm91c2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFFTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBR3hFLE9BQU8sRUFBQyxZQUFZLEVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUdoRSxNQUFNLE9BQU8sY0FBYztDQUkxQjtBQXdDRCxNQUFNLE9BQU8sc0JBQXNCO0lBa0VqQyxZQUNVLEtBQThCLEVBQzlCLGdCQUFxQyxFQUNyQyxlQUFrQyxFQUNsQyxhQUEyQjtRQUgzQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQWpFOUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFpRDdCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHM0Isa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsWUFBTyxHQUE0QixFQUFFLENBQUM7UUFDdEMsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFFM0Isd0JBQW1CLEdBQVcs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Tyx1QkFBdUI7WUFDdkIsbUJBQW1CO1lBWHpCLGlCQUFpQjtZQWNYLFlBQVk7Ozt1QkFnRGpCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDOzBCQUd4QyxLQUFLO3FCQUdMLEtBQUs7aUNBYUwsWUFBWSxTQUFDLGVBQWU7NEJBVTVCLFlBQVksU0FBQyxXQUFXOzRCQUt4QixZQUFZLFNBQUMsWUFBWTt1QkFrQnpCLFdBQVcsU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb0RvY3VtZW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudCc7XG5pbXBvcnQge1Byb2R1Y3RDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9kdWN0RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi9lbnVtL2ljb24uZW51bSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XG5cbmV4cG9ydCBjbGFzcyBJbWFnZVZpZXdNb2RlbCB7XG4gIHB1YmxpYyBpbWFnZTogQ29Eb2N1bWVudCB8IHN0cmluZztcbiAgcHVibGljIHNvdXJjZTogU2FmZVVybDtcbiAgcHVibGljIG9yaWdpbmFsU291cmNlOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbWFnZS1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IGlkPVwicHJvZHVjdF9wYWdlX2Nhcm91c2VsXCI+XG4gICAgICAgICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbF9pdGVtc1wiPlxuICAgICAgICAgICAgICA8Y28tbG9hZGVyIFtpc1Nob3duXT1cInRydWVcIiAqbmdJZj1cInNob3dMb2FkZXJcIj48L2NvLWxvYWRlcj5cbiAgICAgICAgICAgICAgPGRpdiAjY2Fyb3VzZWwgY2xhc3M9XCJpbm5lci1jYXJvdXNlbFwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBUaGlzIGhhcyBiZWVuIHRha2VuIG91dCBvZiB0aGUgZm9yIGxvb3AgdG8gcHJldmVudCBmbGFzaGluZyBpbWFnZXMgd2hlbiB1cGRhdGluZy4gLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW1hZ2VWaWV3TW9kZWxzWzBdXCIgY2xhc3M9XCJjYXJvdXNlbC1pdGVtXCIgW2lkXT1cIidzbGlkZS0wJ1wiIFtjbGFzcy5hY3RpdmVdPVwiaXNDdXJyZW50SW5kZXgoMClcIiAoY2xpY2spPVwiaGFuZGxlU2hvd0ltYWdlKGltYWdlVmlld01vZGVsc1swXSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VWaWV3TW9kZWxzWzBdLnNvdXJjZVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZVZpZXdNb2RlbCBvZiBpbWFnZVZpZXdNb2RlbHMuc2xpY2UoMSk7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidzbGlkZS0nICsgKGluZGV4ICsgMSlcIiBbY2xhc3MuYWN0aXZlXT1cImlzQ3VycmVudEluZGV4KChpbmRleCArIDEpKVwiIChjbGljayk9XCJoYW5kbGVTaG93SW1hZ2UoaW1hZ2VWaWV3TW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlVmlld01vZGVsLnNvdXJjZVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtc2Nyb2xsZXItbGF5ZXJcIiAqbmdJZj1cImltYWdlVmlld01vZGVscyAmJiBpbWFnZVZpZXdNb2RlbHMubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1pdGVtLXNjcm9sbGVyIHByZXZcIiAoY2xpY2spPVwiZ290b1ByZXZTbGlkZSgpXCIgKm5nSWY9XCJjdXJyZW50SW5kZXggPiAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWl0ZW0tc2Nyb2xsZXIgbmV4dFwiIChjbGljayk9XCJnb3RvTmV4dFNsaWRlKClcIiAqbmdJZj1cImN1cnJlbnRJbmRleCA8IGltYWdlcy5sZW5ndGggLSAxXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cInNlbGVjdG9yLXR5cGUtaWNvbiByZWZyZXNoLWJ1dHRvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGUuZ2V0SWNvbihpY29ucy5SZWZyZXNoKVwiIChjbGljayk9XCJvbkZvcmNlUmVuZGVySW1hZ2UoKVwiIFtjbGFzcy5sb2FkaW5nXT1cInNob3dMb2FkZXJcIiAqbmdJZj1cInNob3dSZWZyZXNoXCI+PC9jby1pY29uPlxuICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgaWQ9XCJwcm9kdWN0X3BhZ2VfY2Fyb3VzZWxfdGh1bWJzXCI+XG4gICAgICAgICAgICAgIDxjby1zY3JvbGwtY29udGFpbmVyIGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiICpuZ0lmPVwiaW1hZ2VWaWV3TW9kZWxzICYmIGltYWdlVmlld01vZGVscy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZVZpZXdNb2RlbCBvZiBpbWFnZVZpZXdNb2RlbHM7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC10aHVtYlwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaW5kZXggPT09IGN1cnJlbnRJbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVZpZXdNb2RlbC5zb3VyY2VcIiAoY2xpY2spPVwiaGFuZGxlVGh1bWJDbGljayhpbmRleClcIi8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jby1zY3JvbGwtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjYXJvdXNlbCcsIHtyZWFkOiBFbGVtZW50UmVmfSlcbiAgcHVibGljIGNhcm91c2VsOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW1hZ2VzKHZhbHVlOiAoQ29Eb2N1bWVudCB8IHN0cmluZylbXSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbWFnZXMgPSB0aGlzLl9maWx0ZXJWYWxpZEltYWdlcyh2YWx1ZSk7XG4gICAgICB0aGlzLl9sb2FkQW5kUmVzY2FsZUltYWdlcygpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW1hZ2VzKCk6IChDb0RvY3VtZW50IHwgc3RyaW5nKVtdIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VzO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBoYW5kbGVXaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemluZyA9IHRydWU7XG4gICAgdGhpcy5fc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVyKTtcbiAgICB0aGlzLl9yZXNpemVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemluZyA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdzd2lwZWxlZnQnKVxuICBwdWJsaWMgZ290b05leHRTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignc3dpcGVyaWdodCcpXG4gIHB1YmxpYyBnb3RvUHJldlNsaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEluZGV4LS07XG4gIH1cblxuICBwdWJsaWMgaXNDdXJyZW50SW5kZXgoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA9PT0gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50SW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2V0IGN1cnJlbnRJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudEluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5fc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJlc2l6aW5nJylcbiAgcHVibGljIHJlc2l6aW5nID0gZmFsc2U7XG5cbiAgcHVibGljIGltYWdlVmlld01vZGVsczogSW1hZ2VWaWV3TW9kZWxbXSA9IFtdO1xuICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Jlc2l6ZVRpbWVyOiBhbnk7XG4gIHByaXZhdGUgX2N1cnJlbnRJbmRleCA9IDA7XG4gIHByaXZhdGUgX2ltYWdlczogKENvRG9jdW1lbnQgfCBzdHJpbmcpW10gPSBbXTtcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIF9yZXNpemVDYW52YXNIZWlnaHQ6IG51bWJlciA9IDUwMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pb25lOiBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IFByb2R1Y3RFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkge1xuICAgIHRoaXMuX3N1YnMucHVzaChcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vblJlbmRlclN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uRHJhZnRSZW5kZXJJbWFnZVJlY2VpdmVkLnN1YnNjcmliZSgoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5kZXRhaWwpIHtcbiAgICAgICAgICBpZiAodGhpcy5faW1hZ2VzWzBdIGluc3RhbmNlb2YgQ29Eb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW1hZ2VzLnVuc2hpZnQoZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW1hZ2VzWzBdID0gZXZlbnQuZGV0YWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9sb2FkQW5kUmVzY2FsZUltYWdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhcm91c2VsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlVGh1bWJDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvcmNlUmVuZGVySW1hZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uRm9yY2VSZW5kZXJJbWFnZS5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlU2hvd0ltYWdlKGltYWdlVmlld01vZGVsOiBJbWFnZVZpZXdNb2RlbCk6IHZvaWQge1xuICAgIGlmIChpbWFnZVZpZXdNb2RlbCAmJiBpbWFnZVZpZXdNb2RlbC5vcmlnaW5hbFNvdXJjZSkge1xuICAgICAgbGV0IHBvcHVwV2luZG93OiBXaW5kb3cgPSB3aW5kb3cub3BlbignJywgJ0ltYWdlIHpvb20nLCAnd2lkdGg9NjAwLGhlaWdodD00MDAnKTtcbiAgICAgIC8vIFNldCB0aGUgY29udGVudCBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAgICBwb3B1cFdpbmRvdy5kb2N1bWVudC53cml0ZSgnPGh0bWw+PGhlYWQ+PHRpdGxlPkltYWdlIHpvb208L3RpdGxlPjwvaGVhZD48Ym9keT4nKTtcbiAgICAgIHBvcHVwV2luZG93LmRvY3VtZW50LndyaXRlKGA8aW1nIHNyYz0ke2ltYWdlVmlld01vZGVsLm9yaWdpbmFsU291cmNlfSBhbHQ9XCJJbWFnZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OmF1dG87XCI+YCk7XG4gICAgICBwb3B1cFdpbmRvdy5kb2N1bWVudC53cml0ZSgnPC9ib2R5PjwvaHRtbD4nKTtcbiAgICAgIC8vIENsb3NlIHRoZSBkb2N1bWVudCB0byByZW5kZXIgdGhlIHBvcHVwIHdpbmRvd1xuICAgICAgcG9wdXBXaW5kb3cuZG9jdW1lbnQuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJWYWxpZEltYWdlcyh2YWx1ZTogKENvRG9jdW1lbnQgfCBzdHJpbmcpW10pOiAoQ29Eb2N1bWVudCB8IHN0cmluZylbXSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuZmlsdGVyKChkb2M6IENvRG9jdW1lbnQgfCBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSAvXFwuKGpwZ3xqcGVnfHBuZ3xnaWZ8Ym1wfHRpZmZ8d2VicCkkL2k7XG4gICAgICByZXR1cm4gdHlwZW9mIGRvYyA9PT0gJ3N0cmluZycgfHwgKHBhdHRlcm4udGVzdChkb2MuZmlsZU5hbWUpIHx8ICEhZG9jLmZpbGVQYXRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRBbmRSZXNjYWxlSW1hZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW1hZ2VWaWV3TW9kZWxzLmxlbmd0aCA9IDA7XG4gICAgaWYgKHRoaXMuX2ltYWdlcykge1xuICAgICAgdGhpcy5faW1hZ2VzLmZvckVhY2goKGk6IENvRG9jdW1lbnQgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGltYWdlVmlld01vZGVsID0gbmV3IEltYWdlVmlld01vZGVsKCk7XG4gICAgICAgIGltYWdlVmlld01vZGVsLmltYWdlID0gaTtcbiAgICAgICAgaWYgKHR5cGVvZiBpID09PSAnc3RyaW5nJykgeyAvLyBpcyBhIHJlbmRlcmVkIGltYWdlIGNvbWluZyBmcm9tIGNvbmZpZ3VyYXRvclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZUFuZFNhbml0aXplU291cmNlKGksIGltYWdlVmlld01vZGVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaS5maWxlUGF0aCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplQW5kU2FuaXRpemVTb3VyY2UoaS5maWxlUGF0aCwgaW1hZ2VWaWV3TW9kZWwpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaS5kb2N1bWVudEJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZUFuZFNhbml0aXplU291cmNlKGkuZG9jdW1lbnRCb2R5QXNEYXRhVXJpLCBpbWFnZVZpZXdNb2RlbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lvbmUuZ2V0RG9jdW1lbnRDb250ZW50KGkuZG9jdW1lbnRJZCwgZmFsc2UpLnRoZW4oKGNvbnRlbnQ6IERvY3VtZW50Q29udGVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgICAgIGkuZG9jdW1lbnRCb2R5ID0gY29udGVudC5kb2N1bWVudENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplQW5kU2FuaXRpemVTb3VyY2UoaS5kb2N1bWVudEJvZHlBc0RhdGFVcmksIGltYWdlVmlld01vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlVmlld01vZGVscy5wdXNoKGltYWdlVmlld01vZGVsKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzaXplQW5kU2FuaXRpemVTb3VyY2Uoc291cmNlOiBzdHJpbmcsIGltYWdlVmlld01vZGVsOiBJbWFnZVZpZXdNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc2l6ZUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjb25zdCByZXNpemVDYW52YXNDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgPSByZXNpemVDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb25zdCByZXNpemVJbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHJlc2l6ZUltYWdlLm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHJlc2l6ZUNhbnZhc0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIHJlc2l6ZUNhbnZhc0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gJ2hpZ2gnO1xuICAgICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBpbWFnZSBkaW1lbnNpb25zXG4gICAgICBjb25zdCBvcmlnaW5hbFdpZHRoID0gcmVzaXplSW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHJlc2l6ZUltYWdlLmhlaWdodDtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhc3BlY3QgcmF0aW9cbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gb3JpZ2luYWxXaWR0aCAvIG9yaWdpbmFsSGVpZ2h0O1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHdoaWxlIG1haW50YWluaW5nIHRoZSBhc3BlY3QgcmF0aW9cbiAgICAgIGxldCBuZXdXaWR0aDogbnVtYmVyID0gdGhpcy5fcmVzaXplQ2FudmFzSGVpZ2h0O1xuICAgICAgbGV0IG5ld0hlaWdodDogbnVtYmVyID0gdGhpcy5fcmVzaXplQ2FudmFzSGVpZ2h0O1xuXG4gICAgICBpZiAob3JpZ2luYWxXaWR0aCA+IG9yaWdpbmFsSGVpZ2h0KSB7XG4gICAgICAgIG5ld0hlaWdodCA9IHRoaXMuX3Jlc2l6ZUNhbnZhc0hlaWdodCAvIGFzcGVjdFJhdGlvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3V2lkdGggPSB0aGlzLl9yZXNpemVDYW52YXNIZWlnaHQgKiBhc3BlY3RSYXRpbztcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBjYW52YXMgc2l6ZSB0byB0aGUgbmV3IHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgIHJlc2l6ZUNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgcmVzaXplQ2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcblxuICAgICAgY29uc3QgaW1hZ2VXaWR0aDogbnVtYmVyID0gdGhpcy5fcmVzaXplQ2FudmFzSGVpZ2h0ICogKHJlc2l6ZUltYWdlLmhlaWdodCAvIHJlc2l6ZUltYWdlLndpZHRoKTtcbiAgICAgIHJlc2l6ZUNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKHJlc2l6ZUltYWdlLCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICAgIGNvbnN0IHJlc2l6ZWRTb3VyY2UgPSByZXNpemVDYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XG5cbiAgICAgIGltYWdlVmlld01vZGVsLnNvdXJjZSA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHJlc2l6ZWRTb3VyY2UpO1xuICAgICAgaW1hZ2VWaWV3TW9kZWwub3JpZ2luYWxTb3VyY2UgPSBzb3VyY2U7XG4gICAgfTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmVzaXplSW1hZ2Uuc3JjID0gc291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+IC0xICYmIHRoaXMuY3VycmVudEluZGV4IDw9IHRoaXMuaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbW92ZVB4OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGlmICh0aGlzLmNhcm91c2VsICYmIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IG1vdmVQeDtcbiAgICAgICAgLy8gdGhpcy5jYXJvdXNlbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgLy8gICBsZWZ0OiBtb3ZlUHgsXG4gICAgICAgIC8vICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIC8vIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
@@ -16,6 +16,7 @@ export class ProductAddtocartComponent {
16
16
  this.createFrozenArticle = true;
17
17
  this.configurable = false;
18
18
  this.configuring = false;
19
+ this.showAddToCart = false;
19
20
  this.isReturn = false;
20
21
  this.fullscreen = false;
21
22
  this.startConfiguration = new EventEmitter();
@@ -105,18 +106,20 @@ ProductAddtocartComponent.decorators = [
105
106
  <co-number-picker *ngIf="!configurable && !configuring" class="quantity-select" [(model)]="quantity" [min]="1" horizontal></co-number-picker>
106
107
  </ng-container>
107
108
 
108
- <div class="button-wrapper">
109
- <co-button class="configure-button" *ngIf="configurable"
109
+ <div class="button-wrapper" *ngIf="configurable">
110
+ <co-button class="configure-button"
110
111
  [iconData]="iconCache.getIcon(icon.MagicWand)"
111
112
  [label]="'CONFIGURE' | localize"
112
113
  (onClick)="startConfiguration.emit()"
113
114
  ></co-button>
114
- <co-button #addtocartbutton class="cart-button" *ngIf="!configurable"
115
+ </div>
116
+ <div class="button-wrapper" *ngIf="showAddToCart && !configurable">
117
+ <co-button #addtocartbutton class="cart-button"
115
118
  [iconData]="iconCache.getIcon(icon.AddToCartDrop)"
116
119
  [label]="'SHOPPING_CART_IN' | localize"
117
120
  (onClick)="handleAddToCartClick(quantity)"
118
121
  ></co-button>
119
- <co-button class="cart-button quote" *ngIf="!configurable && showQuoteButton"
122
+ <co-button class="cart-button quote" *ngIf="showQuoteButton"
120
123
  [iconData]="iconCache.getIcon(icon.Quote)"
121
124
  [label]="'QUOTATION' | localize"
122
125
  (onClick)="handleAddToQuoteClick(quantity)"
@@ -140,6 +143,7 @@ ProductAddtocartComponent.propDecorators = {
140
143
  createFrozenArticle: [{ type: Input }],
141
144
  configurable: [{ type: Input }],
142
145
  configuring: [{ type: Input }],
146
+ showAddToCart: [{ type: Input }],
143
147
  isReturn: [{ type: Input }],
144
148
  fullscreen: [{ type: HostBinding, args: ['class.full-screen',] }, { type: Input }],
145
149
  quantity: [{ type: Input }],
@@ -148,4 +152,4 @@ ProductAddtocartComponent.propDecorators = {
148
152
  addToQuoteClick: [{ type: Output }],
149
153
  showRelatedPopup: [{ type: Output }]
150
154
  };
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1hZGR0b2NhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3Byb2R1Y3QtYWRkdG9jYXJ0L3Byb2R1Y3QtYWRkdG9jYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRzFFLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQ3ZILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBcUM5RSxNQUFNLE9BQU8seUJBQXlCO0lBOERwQyxZQUNTLFNBQTJCLEVBQzFCLHNCQUErQyxFQUMvQyxnQkFBcUMsRUFDckMsZ0JBQXdDO1FBSHpDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBeUI7UUFDL0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBaEVsQyxTQUFJLEdBQW9CLFFBQVEsQ0FBQztRQVkxQyx3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFHcEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHOUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHN0IsYUFBUSxHQUFZLEtBQUssQ0FBQztR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VSxFQUFFO3NCQUdqRCxLQUFLOzZCQUdMLEtBQUs7a0NBR0wsS0FBSzsyQkFHTCxLQUFLOzBCQUdMLEtBQUs7dUJBR0wsS0FBSzt5QkFHTCxXQUFXLFNBQUMsbUJBQW1CLGNBQy9CLEtBQUs7dUJBR0wsS0FBSztpQ0FpQkwsTUFBTTs2QkFHTixNQUFNOzhCQUdOLE1BQU07K0JBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkNhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7IEljb25FbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9pY29uLmVudW0nO1xuaW1wb3J0IHsgQXJ0aWNsZVF1YW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWwvYXJ0aWNsZS1xdWFudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvcHJvZHVjdC1jb25uZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWN0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJ0aWNsZUZ1bGxPYmplY3QgfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWV4dGVuZGVkLmJvJztcbmltcG9ydCB7Q29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XG5pbXBvcnQge1Byb2R1Y3RTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvcHJvZHVjdC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7QXJ0aWNsZUxpc3RPYmplY3RFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1saXN0LW9iamVjdC1leHRlbmRlZC5ibyc7XG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZHVjdC1hZGR0b2NhcnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhdGMtd3JhcHBlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmV0dXJuXCI+XG4gICAgICAgIDxjby1udW1iZXItcGlja2VyICpuZ0lmPVwiIWNvbmZpZ3VyYWJsZSAmJiAhY29uZmlndXJpbmdcIiBjbGFzcz1cInF1YW50aXR5LXNlbGVjdFwiIFsobW9kZWwpXT1cInF1YW50aXR5XCIgW21pbl09XCItMTAwXCIgaG9yaXpvbnRhbD48L2NvLW51bWJlci1waWNrZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1JldHVyblwiPlxuICAgICAgICA8Y28tbnVtYmVyLXBpY2tlciAqbmdJZj1cIiFjb25maWd1cmFibGUgJiYgIWNvbmZpZ3VyaW5nXCIgY2xhc3M9XCJxdWFudGl0eS1zZWxlY3RcIiBbKG1vZGVsKV09XCJxdWFudGl0eVwiIFttaW5dPVwiMVwiIGhvcml6b250YWw+PC9jby1udW1iZXItcGlja2VyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24td3JhcHBlclwiPlxuICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwiY29uZmlndXJlLWJ1dHRvblwiICpuZ0lmPVwiY29uZmlndXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlLmdldEljb24oaWNvbi5NYWdpY1dhbmQpXCJcbiAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic3RhcnRDb25maWd1cmF0aW9uLmVtaXQoKVwiXG4gICAgICAgID48L2NvLWJ1dHRvbj5cbiAgICAgICAgPGNvLWJ1dHRvbiAjYWRkdG9jYXJ0YnV0dG9uIGNsYXNzPVwiY2FydC1idXR0b25cIiAqbmdJZj1cIiFjb25maWd1cmFibGVcIlxuICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGUuZ2V0SWNvbihpY29uLkFkZFRvQ2FydERyb3ApXCJcbiAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1NIT1BQSU5HX0NBUlRfSU4nIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUFkZFRvQ2FydENsaWNrKHF1YW50aXR5KVwiXG4gICAgICAgID48L2NvLWJ1dHRvbj5cbiAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cImNhcnQtYnV0dG9uIHF1b3RlXCIgKm5nSWY9XCIhY29uZmlndXJhYmxlICYmIHNob3dRdW90ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZS5nZXRJY29uKGljb24uUXVvdGUpXCJcbiAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1FVT1RBVElPTicgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQWRkVG9RdW90ZUNsaWNrKHF1YW50aXR5KVwiXG4gICAgICAgID48L2NvLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWFkZHRvY2FydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RBZGR0b2NhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IGljb246IHR5cGVvZiBJY29uRW51bSA9IEljb25FbnVtO1xuXG4gIEBWaWV3Q2hpbGQoJ2FkZHRvY2FydGJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgYWRkVG9DYXJ0QnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcnRpY2xlOiBBcnRpY2xlRnVsbE9iamVjdDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZXh0ZXJuYWxTb3VyY2U6IEV4dGVybmFsU291cmNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjcmVhdGVGcm96ZW5BcnRpY2xlOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlndXJhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpZ3VyaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGlzUmV0dXJuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mdWxsLXNjcmVlbicpXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmdWxsc2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBxdWFudGl0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNSZXR1cm4pIHtcbiAgICAgIGlmICh0aGlzLl9xdWFudGl0eSA9PT0gMSkge1xuICAgICAgICB0aGlzLl9xdWFudGl0eSA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcXVhbnRpdHkgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9xdWFudGl0eSA9IE1hdGgubWF4KDEsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHF1YW50aXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1YW50aXR5O1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzdGFydENvbmZpZ3VyYXRpb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGFkZFRvQ2FydENsaWNrOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYWRkVG9RdW90ZUNsaWNrOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2hvd1JlbGF0ZWRQb3B1cDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG5cbiAgcHVibGljIHNob3dRdW90ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3F1YW50aXR5ID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaWNvbkNhY2hlOiBJY29uQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2lvbmVDb250cm9sbGVyU2VydmljZTogUHJvZHVjdENvbm5lY3RvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBQcm9kdWN0RXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogUHJvZHVjdFNldHRpbmdzU2VydmljZVxuICAgICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZFRvQ2FydEJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVBZGRUb0NhcnRDbGljayhxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3JlYXRlRnJvemVuQXJ0aWNsZSkge1xuICAgICAgaWYgKHRoaXMuYXJ0aWNsZS5nb29kVHlwZSA9PT0gJ0InKSB7XG4gICAgICAgIGNvbnN0IGFydGljbGUgPSBhd2FpdCB0aGlzLl9nZXRKU09ORnJvbUFydGljbGVPYmplY3Qoe2FydGljbGU6IHRoaXMuYXJ0aWNsZSwgcXVhbnRpdHk6IHF1YW50aXR5fSk7XG4gICAgICAgIGlmIChhcnRpY2xlKSB7XG4gICAgICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uQWRkVG9DYXJ0Lm5leHQoe2FydGljbGU6IGFydGljbGUsIHF1YW50aXR5OiBxdWFudGl0eX0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgYXJ0aWNsZTogQXJ0aWNsZUxpc3RPYmplY3RFeHRlbmRlZCB8IHN0cmluZztcbiAgICAgICAgaWYgKCEhdGhpcy5leHRlcm5hbFNvdXJjZSkge1xuICAgICAgICAgIGFydGljbGUgPSBhd2FpdCB0aGlzLl9nZXRKU09ORnJvbUFydGljbGVPYmplY3Qoe2FydGljbGU6IHRoaXMuYXJ0aWNsZSwgcXVhbnRpdHk6IHF1YW50aXR5fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJ0aWNsZSA9IHRoaXMuX2lvbmVDb250cm9sbGVyU2VydmljZS5jb252ZXJ0QXJ0aWNsZUZ1bGxPYmplY3RUb0FydGljbGVFeHRlbmRlZCh0aGlzLmFydGljbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnRpY2xlKSB7XG4gICAgICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uQWRkVG9DYXJ0Lm5leHQoe2FydGljbGU6IGFydGljbGUsIHF1YW50aXR5OiBxdWFudGl0eX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFydGljbGU6IEFydGljbGVMaXN0T2JqZWN0RXh0ZW5kZWQgPSB0aGlzLl9pb25lQ29udHJvbGxlclNlcnZpY2UuY29udmVydEFydGljbGVGdWxsT2JqZWN0VG9BcnRpY2xlRXh0ZW5kZWQodGhpcy5hcnRpY2xlKTtcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFkZFRvQ2FydC5uZXh0KHsgYXJ0aWNsZTogYXJ0aWNsZSwgcXVhbnRpdHk6IHF1YW50aXR5IH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVBZGRUb1F1b3RlQ2xpY2socXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFkZFRvUXVvdGUubmV4dChhd2FpdCB0aGlzLl9nZXRKU09ORnJvbUFydGljbGVPYmplY3Qoe2FydGljbGU6IHRoaXMuYXJ0aWNsZSwgcXVhbnRpdHk6IHF1YW50aXR5fSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0SlNPTkZyb21BcnRpY2xlT2JqZWN0KGFydGljbGU6IEFydGljbGVRdWFudGl0eSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY29uZmlndXJhdG9yU3RhdGlzdGljcyA9IG5ldyBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQoKTtcbiAgICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLnVzZXJUeXBlID0gJ2lPbmVQcm9kdWN0UGFnZSc7XG4gICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy50cmFuc2FjdGlvblR5cGUgPSAnU2FsZXMnO1xuICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MuYWN0aW9uRG9tYWluID0gJ2J1bmRsZSc7XG4gICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy5zZXNzaW9uSWQgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2Vzc2lvbiA/IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZXNzaW9uLnNlc3Npb25JZCA6ICd1bmtub3duJztcbiAgICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLndlYkhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcbiAgICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmJ1bmRsZUhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5faW9uZUNvbnRyb2xsZXJTZXJ2aWNlLmdldEpzb25BcnRpY2xlRmxhdFRyZWUoXG4gICAgICAgIGFydGljbGUuYXJ0aWNsZS5nb29kSWQsIGFydGljbGUuYXJ0aWNsZS5nb29kVHlwZSwgYXJ0aWNsZS5xdWFudGl0eSwgISF0aGlzLmV4dGVybmFsU291cmNlLCB0cnVlLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcbiAgfVxufVxuIl19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1hZGR0b2NhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3Byb2R1Y3QtYWRkdG9jYXJ0L3Byb2R1Y3QtYWRkdG9jYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRzFFLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQ3ZILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBdUM5RSxNQUFNLE9BQU8seUJBQXlCO0lBaUVwQyxZQUNTLFNBQTJCLEVBQzFCLHNCQUErQyxFQUMvQyxnQkFBcUMsRUFDckMsZ0JBQXdDO1FBSHpDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBeUI7UUFDL0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBbkVsQyxTQUFJLEdBQW9CLFFBQVEsQ0FBQztRQVkxQyx3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFHcEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHOUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHN0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7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QkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7c0JBR2pELEtBQUs7NkJBR0wsS0FBSztrQ0FHTCxLQUFLOzJCQUdMLEtBQUs7MEJBR0wsS0FBSzs0QkFHTCxLQUFLO3VCQUdMLEtBQUs7eUJBR0wsV0FBVyxTQUFDLG1CQUFtQixjQUMvQixLQUFLO3VCQUdMLEtBQUs7aUNBaUJMLE1BQU07NkJBR04sTUFBTTs4QkFHTixNQUFNOytCQUdOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25DYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2ljb24tY2FjaGUuc2VydmljZSc7XG5pbXBvcnQgeyBJY29uRW51bSB9IGZyb20gJy4uLy4uL2VudW0vaWNvbi5lbnVtJztcbmltcG9ydCB7IEFydGljbGVRdWFudGl0eSB9IGZyb20gJy4uLy4uL21vZGVsL2FydGljbGUtcXVhbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgUHJvZHVjdENvbm5lY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvcHJvZHVjdC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFydGljbGVGdWxsT2JqZWN0IH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvY29uZmlndXJhdG9yLXN0YXRpc3RpY3MtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtQcm9kdWN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge0FydGljbGVMaXN0T2JqZWN0RXh0ZW5kZWR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtbGlzdC1vYmplY3QtZXh0ZW5kZWQuYm8nO1xuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtc291cmNlLmJvJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtYWRkdG9jYXJ0JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYXRjLXdyYXBwZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JldHVyblwiPlxuICAgICAgICA8Y28tbnVtYmVyLXBpY2tlciAqbmdJZj1cIiFjb25maWd1cmFibGUgJiYgIWNvbmZpZ3VyaW5nXCIgY2xhc3M9XCJxdWFudGl0eS1zZWxlY3RcIiBbKG1vZGVsKV09XCJxdWFudGl0eVwiIFttaW5dPVwiLTEwMFwiIGhvcml6b250YWw+PC9jby1udW1iZXItcGlja2VyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNSZXR1cm5cIj5cbiAgICAgICAgPGNvLW51bWJlci1waWNrZXIgKm5nSWY9XCIhY29uZmlndXJhYmxlICYmICFjb25maWd1cmluZ1wiIGNsYXNzPVwicXVhbnRpdHktc2VsZWN0XCIgWyhtb2RlbCldPVwicXVhbnRpdHlcIiBbbWluXT1cIjFcIiBob3Jpem9udGFsPjwvY28tbnVtYmVyLXBpY2tlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXJcIiAqbmdJZj1cImNvbmZpZ3VyYWJsZVwiPlxuICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwiY29uZmlndXJlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZS5nZXRJY29uKGljb24uTWFnaWNXYW5kKVwiXG4gICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDT05GSUdVUkUnIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInN0YXJ0Q29uZmlndXJhdGlvbi5lbWl0KClcIlxuICAgICAgICA+PC9jby1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24td3JhcHBlclwiICpuZ0lmPVwic2hvd0FkZFRvQ2FydCAmJiAhY29uZmlndXJhYmxlXCI+XG4gICAgICAgIDxjby1idXR0b24gI2FkZHRvY2FydGJ1dHRvbiBjbGFzcz1cImNhcnQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlLmdldEljb24oaWNvbi5BZGRUb0NhcnREcm9wKVwiXG4gICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTSE9QUElOR19DQVJUX0lOJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVBZGRUb0NhcnRDbGljayhxdWFudGl0eSlcIlxuICAgICAgICA+PC9jby1idXR0b24+XG4gICAgICAgIDxjby1idXR0b24gY2xhc3M9XCJjYXJ0LWJ1dHRvbiBxdW90ZVwiICpuZ0lmPVwic2hvd1F1b3RlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlLmdldEljb24oaWNvbi5RdW90ZSlcIlxuICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUVVPVEFUSU9OJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVBZGRUb1F1b3RlQ2xpY2socXVhbnRpdHkpXCJcbiAgICAgICAgPjwvY28tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtYWRkdG9jYXJ0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdEFkZHRvY2FydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbjogdHlwZW9mIEljb25FbnVtID0gSWNvbkVudW07XG5cbiAgQFZpZXdDaGlsZCgnYWRkdG9jYXJ0YnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBhZGRUb0NhcnRCdXR0b246IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFydGljbGU6IEFydGljbGVGdWxsT2JqZWN0O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBleHRlcm5hbFNvdXJjZTogRXh0ZXJuYWxTb3VyY2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNyZWF0ZUZyb3plbkFydGljbGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maWd1cmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlndXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0FkZFRvQ2FydDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc1JldHVybjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnVsbC1zY3JlZW4nKVxuICBASW5wdXQoKVxuICBwdWJsaWMgZnVsbHNjcmVlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcXVhbnRpdHkodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XG4gICAgICBpZiAodGhpcy5fcXVhbnRpdHkgPT09IDEpIHtcbiAgICAgICAgdGhpcy5fcXVhbnRpdHkgPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3F1YW50aXR5ID0gdmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVhbnRpdHkgPSBNYXRoLm1heCgxLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBxdWFudGl0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWFudGl0eTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc3RhcnRDb25maWd1cmF0aW9uOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhZGRUb0NhcnRDbGljazogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGFkZFRvUXVvdGVDbGljazogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHNob3dSZWxhdGVkUG9wdXA6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKVxuXG4gIHB1YmxpYyBzaG93UXVvdGVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9xdWFudGl0eSA9IDE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGljb25DYWNoZTogSWNvbkNhY2hlU2VydmljZSxcbiAgICBwcml2YXRlIF9pb25lQ29udHJvbGxlclNlcnZpY2U6IFByb2R1Y3RDb25uZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogUHJvZHVjdEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IFByb2R1Y3RTZXR0aW5nc1NlcnZpY2VcbiAgICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hZGRUb0NhcnRCdXR0b24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQWRkVG9DYXJ0Q2xpY2socXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNyZWF0ZUZyb3plbkFydGljbGUpIHtcbiAgICAgIGlmICh0aGlzLmFydGljbGUuZ29vZFR5cGUgPT09ICdCJykge1xuICAgICAgICBjb25zdCBhcnRpY2xlID0gYXdhaXQgdGhpcy5fZ2V0SlNPTkZyb21BcnRpY2xlT2JqZWN0KHthcnRpY2xlOiB0aGlzLmFydGljbGUsIHF1YW50aXR5OiBxdWFudGl0eX0pO1xuICAgICAgICBpZiAoYXJ0aWNsZSkge1xuICAgICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFkZFRvQ2FydC5uZXh0KHthcnRpY2xlOiBhcnRpY2xlLCBxdWFudGl0eTogcXVhbnRpdHl9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGFydGljbGU6IEFydGljbGVMaXN0T2JqZWN0RXh0ZW5kZWQgfCBzdHJpbmc7XG4gICAgICAgIGlmICghIXRoaXMuZXh0ZXJuYWxTb3VyY2UpIHtcbiAgICAgICAgICBhcnRpY2xlID0gYXdhaXQgdGhpcy5fZ2V0SlNPTkZyb21BcnRpY2xlT2JqZWN0KHthcnRpY2xlOiB0aGlzLmFydGljbGUsIHF1YW50aXR5OiBxdWFudGl0eX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFydGljbGUgPSB0aGlzLl9pb25lQ29udHJvbGxlclNlcnZpY2UuY29udmVydEFydGljbGVGdWxsT2JqZWN0VG9BcnRpY2xlRXh0ZW5kZWQodGhpcy5hcnRpY2xlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJ0aWNsZSkge1xuICAgICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFkZFRvQ2FydC5uZXh0KHthcnRpY2xlOiBhcnRpY2xlLCBxdWFudGl0eTogcXVhbnRpdHl9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhcnRpY2xlOiBBcnRpY2xlTGlzdE9iamVjdEV4dGVuZGVkID0gdGhpcy5faW9uZUNvbnRyb2xsZXJTZXJ2aWNlLmNvbnZlcnRBcnRpY2xlRnVsbE9iamVjdFRvQXJ0aWNsZUV4dGVuZGVkKHRoaXMuYXJ0aWNsZSk7XG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2Uub25BZGRUb0NhcnQubmV4dCh7IGFydGljbGU6IGFydGljbGUsIHF1YW50aXR5OiBxdWFudGl0eSB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQWRkVG9RdW90ZUNsaWNrKHF1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2Uub25BZGRUb1F1b3RlLm5leHQoYXdhaXQgdGhpcy5fZ2V0SlNPTkZyb21BcnRpY2xlT2JqZWN0KHthcnRpY2xlOiB0aGlzLmFydGljbGUsIHF1YW50aXR5OiBxdWFudGl0eX0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldEpTT05Gcm9tQXJ0aWNsZU9iamVjdChhcnRpY2xlOiBBcnRpY2xlUXVhbnRpdHkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MgPSBuZXcgQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50KCk7XG4gICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy51c2VyVHlwZSA9ICdpT25lUHJvZHVjdFBhZ2UnO1xuICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MudHJhbnNhY3Rpb25UeXBlID0gJ1NhbGVzJztcbiAgICBjb25maWd1cmF0b3JTdGF0aXN0aWNzLmFjdGlvbkRvbWFpbiA9ICdidW5kbGUnO1xuICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3Muc2Vzc2lvbklkID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlc3Npb24gPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2Vzc2lvbi5zZXNzaW9uSWQgOiAndW5rbm93bic7XG4gICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy53ZWJIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XG4gICAgY29uZmlndXJhdG9yU3RhdGlzdGljcy5idW5kbGVIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2lvbmVDb250cm9sbGVyU2VydmljZS5nZXRKc29uQXJ0aWNsZUZsYXRUcmVlKFxuICAgICAgICBhcnRpY2xlLmFydGljbGUuZ29vZElkLCBhcnRpY2xlLmFydGljbGUuZ29vZFR5cGUsIGFydGljbGUucXVhbnRpdHksICEhdGhpcy5leHRlcm5hbFNvdXJjZSwgdHJ1ZSwgY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XG4gIH1cbn1cbiJdfQ==