@elxjs/ui 0.0.179 → 0.0.181
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.
- package/assets/icons/History.svg +3 -0
- package/assets/styles/colors.scss +5 -1
- package/esm2022/lib/components/carousel/carousel.component.mjs +92 -8
- package/esm2022/lib/components/carousel-fixed/carousel-fixed.component.mjs +97 -14
- package/fesm2022/elxjs-ui.mjs +187 -20
- package/fesm2022/elxjs-ui.mjs.map +1 -1
- package/lib/components/carousel/carousel.component.d.ts +13 -1
- package/lib/components/carousel-fixed/carousel-fixed.component.d.ts +13 -1
- package/package.json +1 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M12.7499 5V11.25H16.9999V12.75H12.4999C11.8109 12.75 11.2499 12.189 11.2499 11.5V5H12.7499ZM11.9999 1.5C7.57593 1.5 3.68393 4.258 2.16893 8.324L1.37293 6.537L0.00292969 7.147L1.86693 11.334L6.05393 9.47L5.44393 8.1L3.53393 8.951C4.80493 5.409 8.17193 3.001 12.0009 3.001C16.9639 3.001 21.0009 7.039 21.0009 12.001C21.0009 16.963 16.9639 21.001 12.0009 21.001C7.31993 21.001 3.46693 17.408 3.04293 12.836H1.54293C1.97093 18.235 6.49293 22.501 12.0009 22.501C17.7909 22.501 22.5009 17.791 22.5009 12.001C22.5009 6.211 17.7899 1.5 11.9999 1.5Z" fill="black"/>
|
|
3
|
+
</svg>
|
|
@@ -35,7 +35,11 @@ $elux-colors: (
|
|
|
35
35
|
'red': ('base': #D21828),
|
|
36
36
|
'green': ('base': #16A748),
|
|
37
37
|
'violet-grey': ('base': #7C709B),
|
|
38
|
-
'violet-gray': ('base': #7C709B)
|
|
38
|
+
'violet-gray': ('base': #7C709B),
|
|
39
|
+
'violet-gray-200': ('base': #27233A),
|
|
40
|
+
'violet-gray-rich': ('base': #27233A),
|
|
41
|
+
'violet-gray-850': ('base': #DDD8E6),
|
|
42
|
+
'violet-gray-ligth': ('base': #DDD8E6),
|
|
39
43
|
);
|
|
40
44
|
|
|
41
45
|
@function color($color, $key: 'base') {
|
|
@@ -13,6 +13,7 @@ export class EluxCarouselComponent {
|
|
|
13
13
|
this.previousClickEventEmitter = new EventEmitter();
|
|
14
14
|
this.nextClickEventEmitter = new EventEmitter();
|
|
15
15
|
this.dotClickEventEmitter = new EventEmitter();
|
|
16
|
+
this.itemClickEventEmitter = new EventEmitter();
|
|
16
17
|
this.currentIndex = 0;
|
|
17
18
|
this.currentStepIndex = 0;
|
|
18
19
|
this.offset = 0;
|
|
@@ -29,11 +30,17 @@ export class EluxCarouselComponent {
|
|
|
29
30
|
this.velocity = 0;
|
|
30
31
|
this.lastMoveTime = 0;
|
|
31
32
|
this.lastMoveX = 0;
|
|
33
|
+
this.wasDragging = false;
|
|
34
|
+
this.touchStartTime = 0;
|
|
35
|
+
this.touchStartX = 0;
|
|
36
|
+
this.touchStartY = 0;
|
|
37
|
+
this.isVerticalScroll = false;
|
|
32
38
|
}
|
|
33
39
|
ngAfterContentInit() {
|
|
34
40
|
this.calculateDimensions();
|
|
35
41
|
this.setItemWidths();
|
|
36
42
|
this.updateLimits();
|
|
43
|
+
this.setupItemClickListeners();
|
|
37
44
|
if (this.autoPlayInterval) {
|
|
38
45
|
this.startAutoPlay();
|
|
39
46
|
}
|
|
@@ -42,6 +49,7 @@ export class EluxCarouselComponent {
|
|
|
42
49
|
this.setItemWidths();
|
|
43
50
|
this.updateLimits();
|
|
44
51
|
this.goToFirstSlide();
|
|
52
|
+
this.setupItemClickListeners();
|
|
45
53
|
});
|
|
46
54
|
// Listen for window resize to recalculate dimensions
|
|
47
55
|
window.addEventListener('resize', () => this.onResize());
|
|
@@ -111,22 +119,87 @@ export class EluxCarouselComponent {
|
|
|
111
119
|
}
|
|
112
120
|
// Touch events
|
|
113
121
|
onTouchStart(event) {
|
|
114
|
-
|
|
122
|
+
this.touchStartTime = Date.now();
|
|
123
|
+
this.touchStartX = event.touches[0].clientX;
|
|
124
|
+
this.touchStartY = event.touches[0].clientY;
|
|
125
|
+
this.isVerticalScroll = false;
|
|
115
126
|
this.startDrag(event.touches[0].clientX);
|
|
116
127
|
}
|
|
117
128
|
onTouchMove(event) {
|
|
118
|
-
if (this.isDragging)
|
|
129
|
+
if (!this.isDragging)
|
|
130
|
+
return;
|
|
131
|
+
const currentX = event.touches[0].clientX;
|
|
132
|
+
const currentY = event.touches[0].clientY;
|
|
133
|
+
const deltaX = Math.abs(currentX - this.touchStartX);
|
|
134
|
+
const deltaY = Math.abs(currentY - this.touchStartY);
|
|
135
|
+
// Check if this is a vertical scroll
|
|
136
|
+
if (deltaY > deltaX && deltaY > 10) {
|
|
137
|
+
this.isVerticalScroll = true;
|
|
138
|
+
this.isDragging = false;
|
|
139
|
+
this.wasDragging = false;
|
|
140
|
+
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.4s ease-out');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Only prevent default if it's a horizontal drag
|
|
144
|
+
if (deltaX > 10) {
|
|
119
145
|
event.preventDefault();
|
|
120
146
|
this.updateDrag(event.touches[0].clientX);
|
|
121
147
|
}
|
|
122
148
|
}
|
|
123
149
|
onTouchEnd(event) {
|
|
150
|
+
if (this.isVerticalScroll) {
|
|
151
|
+
this.isVerticalScroll = false;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const touchDuration = Date.now() - this.touchStartTime;
|
|
155
|
+
const touchDistance = Math.abs(this.currentX - this.startX);
|
|
156
|
+
// Consider it a tap if duration < 300ms and distance < 10px
|
|
157
|
+
if (touchDuration < 300 && touchDistance < 10) {
|
|
158
|
+
this.wasDragging = false;
|
|
159
|
+
this.isDragging = false;
|
|
160
|
+
}
|
|
124
161
|
if (this.isDragging) {
|
|
125
162
|
this.endDrag();
|
|
126
163
|
}
|
|
127
164
|
}
|
|
165
|
+
setupItemClickListeners() {
|
|
166
|
+
this.items.forEach((item, index) => {
|
|
167
|
+
// Remove any existing listeners
|
|
168
|
+
const newItem = item.nativeElement.cloneNode(true);
|
|
169
|
+
item.nativeElement.parentNode?.replaceChild(newItem, item.nativeElement);
|
|
170
|
+
// Add both click and touchend listeners for better mobile support
|
|
171
|
+
this.renderer.listen(newItem, 'click', (event) => {
|
|
172
|
+
this.handleItemClick(event, index, newItem);
|
|
173
|
+
});
|
|
174
|
+
this.renderer.listen(newItem, 'touchend', (event) => {
|
|
175
|
+
// Only handle touchend if it wasn't a drag
|
|
176
|
+
if (!this.wasDragging && !this.isVerticalScroll) {
|
|
177
|
+
const touchDuration = Date.now() - this.touchStartTime;
|
|
178
|
+
const touchDistance = Math.abs(event.changedTouches[0].clientX - this.touchStartX);
|
|
179
|
+
if (touchDuration < 300 && touchDistance < 10) {
|
|
180
|
+
event.preventDefault();
|
|
181
|
+
this.handleItemClick(event, index, newItem);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
handleItemClick(event, index, element) {
|
|
188
|
+
// Prevent click if it was preceded by a drag
|
|
189
|
+
if (this.wasDragging) {
|
|
190
|
+
event.preventDefault();
|
|
191
|
+
event.stopPropagation();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
this.itemClickEventEmitter.emit({
|
|
195
|
+
event,
|
|
196
|
+
index,
|
|
197
|
+
element
|
|
198
|
+
});
|
|
199
|
+
}
|
|
128
200
|
startDrag(clientX) {
|
|
129
201
|
this.isDragging = true;
|
|
202
|
+
this.wasDragging = false;
|
|
130
203
|
this.startX = clientX;
|
|
131
204
|
this.currentX = clientX;
|
|
132
205
|
this.initialOffset = this.offset;
|
|
@@ -142,8 +215,13 @@ export class EluxCarouselComponent {
|
|
|
142
215
|
updateDrag(clientX) {
|
|
143
216
|
if (!this.isDragging)
|
|
144
217
|
return;
|
|
218
|
+
// More lenient threshold for mobile - mark as dragging only for significant movement
|
|
219
|
+
const deltaX = Math.abs(this.currentX - this.startX);
|
|
220
|
+
if (deltaX > 15) { // Increased from 5px to 15px for mobile
|
|
221
|
+
this.wasDragging = true;
|
|
222
|
+
}
|
|
145
223
|
this.currentX = clientX;
|
|
146
|
-
const
|
|
224
|
+
const totalDeltaX = this.currentX - this.startX;
|
|
147
225
|
// Calculate velocity for momentum
|
|
148
226
|
const now = Date.now();
|
|
149
227
|
const timeDelta = now - this.lastMoveTime;
|
|
@@ -153,7 +231,7 @@ export class EluxCarouselComponent {
|
|
|
153
231
|
this.lastMoveTime = now;
|
|
154
232
|
this.lastMoveX = clientX;
|
|
155
233
|
// Convert pixel movement to percentage
|
|
156
|
-
const dragPercentage = (
|
|
234
|
+
const dragPercentage = (totalDeltaX / this.containerWidth) * 100;
|
|
157
235
|
// Apply resistance at boundaries
|
|
158
236
|
let resistedDragPercentage = dragPercentage;
|
|
159
237
|
const potentialOffset = this.initialOffset + dragPercentage;
|
|
@@ -176,13 +254,17 @@ export class EluxCarouselComponent {
|
|
|
176
254
|
if (!this.isDragging)
|
|
177
255
|
return;
|
|
178
256
|
this.isDragging = false;
|
|
257
|
+
// Clear the wasDragging flag after a shorter delay for mobile
|
|
258
|
+
setTimeout(() => {
|
|
259
|
+
this.wasDragging = false;
|
|
260
|
+
}, 50); // Reduced from 100ms to 50ms
|
|
179
261
|
// Re-enable CSS transitions
|
|
180
262
|
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.4s ease-out');
|
|
181
263
|
const finalOffset = this.initialOffset + this.dragOffset;
|
|
182
|
-
const threshold =
|
|
264
|
+
const threshold = 40; // Reduced from 50px to 40px for mobile
|
|
183
265
|
const dragDistance = Math.abs(this.currentX - this.startX);
|
|
184
266
|
// Check for momentum (velocity-based slide change)
|
|
185
|
-
const momentumThreshold = 0.5
|
|
267
|
+
const momentumThreshold = 0.3; // Reduced from 0.5 to 0.3
|
|
186
268
|
const hasSignificantVelocity = Math.abs(this.velocity) > momentumThreshold;
|
|
187
269
|
if (dragDistance > threshold || hasSignificantVelocity) {
|
|
188
270
|
if (this.dragOffset > 0 || (hasSignificantVelocity && this.velocity > 0)) {
|
|
@@ -283,7 +365,7 @@ export class EluxCarouselComponent {
|
|
|
283
365
|
});
|
|
284
366
|
}
|
|
285
367
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EluxCarouselComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
286
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EluxCarouselComponent, isStandalone: true, selector: "lib-elux-carousel", inputs: { itemsPerSlide: "itemsPerSlide", removeArrows: "removeArrows", removeDots: "removeDots", autoPlayInterval: "autoPlayInterval" }, outputs: { previousClickEventEmitter: "previousClickEventEmitter", nextClickEventEmitter: "nextClickEventEmitter", dotClickEventEmitter: "dotClickEventEmitter" }, queries: [{ propertyName: "items", predicate: ["carouselItem"], read: ElementRef }], viewQueries: [{ propertyName: "dotsContainer", first: true, predicate: ["dotsContainer"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }], ngImport: i0, template: "<div class=\"c-carousel-container\">\n <div \n class=\"c-carousel-slides\" \n #slidesContainer\n [style.transform]=\"'translateX(' + offset + '%)'\" \n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (touchstart)=\"onTouchStart($event)\" \n (touchmove)=\"onTouchMove($event)\" \n (touchend)=\"onTouchEnd($event)\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"c-carousel-footer\">\n <button [hidden]=\"removeArrows\" class=\"c-carousel-nav prev\" title=\"Slide anterior\" aria-label=\"Slide anterior\" (click)=\"prevSlide()\">\n <lib-elux-icon [icon]=\"'Chevron_Left.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n\n <div [hidden]=\"removeDots\" class=\"c-carousel-dots\" #dotsContainer>\n <span\n role=\"button\"\n class=\"dot\"\n *ngFor=\"let index of getStepIndexCount()\"\n (click)=\"goToSlide(index)\"\n (keyup)=\"goToSlide(index)\"\n [class.active]=\"index === getCurrentStepIndex()\"\n [attr.aria-disabled]=\"true\"\n [attr.aria-label]=\"'pagina' + (index + 1)\"\n >\n </span>\n </div>\n\n <button [hidden]=\"removeArrows\" class=\"c-carousel-nav next\" title=\"Pr\u00F3ximo slide\" aria-label=\"Pr\u00F3ximo slide\" (click)=\"nextSlide()\">\n <lib-elux-icon [icon]=\"'Chevron_Right.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n </div>\n</div>\n", styles: [".display{font-family:Electrolux Sans;font-size:48px;font-weight:700;line-height:56px}.heading-1{font-family:Electrolux Sans;font-size:34px;font-weight:700;line-height:40px}.heading-2{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}@media screen and (max-width: 768px){.display{font-family:Electrolux Sans;font-size:40px;font-weight:700;line-height:46px}.heading-1{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-2{font-family:Electrolux Sans;font-size:24px;font-weight:600;line-height:28px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}}.c-carousel-container{position:relative;width:100%}.c-carousel-slides{display:flex;transition:transform .4s ease-out;touch-action:pan-y;cursor:grab;-webkit-user-select:none;user-select:none;will-change:transform}.c-carousel-slides:active{cursor:grabbing}.c-carousel-item{display:flex;flex-direction:column;text-align:center;align-items:center;justify-content:center;gap:16px;height:150px;margin:6px;border:1px solid #dee7ea;border-radius:2px;cursor:pointer;pointer-events:auto}.c-carousel-item .c-span{font-weight:400;font-size:18px;color:#011e41}.c-carousel-footer{width:min-content;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:16px 0 24px}.c-carousel-footer .c-carousel-nav{background:none;border:none;cursor:pointer;padding:8px;border-radius:50px;background-color:#dfe7ea;transition:all ease-in-out .2s;z-index:2}.c-carousel-footer .c-carousel-nav:hover{transform:scale(1.1)}.c-carousel-footer .c-carousel-nav ::ng-deep span{display:block}.c-carousel-footer .c-carousel-dots{padding:6px;display:flex;text-align:center;border:1px solid #020f2e;border-radius:16px;margin:0 16px;max-width:120px;overflow:hidden;position:relative}@media (max-width: 768px){.c-carousel-footer .c-carousel-dots{margin:0 12px;max-width:100px}}.c-carousel-footer .dot{height:10px;width:10px;margin:0 5px;background-color:#dfe7ea;border-radius:50%;display:inline-block;cursor:pointer;transition:all ease-in-out .2s;flex-shrink:0}.c-carousel-footer .dot:hover,.c-carousel-footer .dot.active{background-color:#011e41}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: EluxIcon, selector: "lib-elux-icon", inputs: ["color", "useSubscription", "icon", "description", "size", "height", "width", "sizeType"] }] }); }
|
|
368
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EluxCarouselComponent, isStandalone: true, selector: "lib-elux-carousel", inputs: { itemsPerSlide: "itemsPerSlide", removeArrows: "removeArrows", removeDots: "removeDots", autoPlayInterval: "autoPlayInterval" }, outputs: { previousClickEventEmitter: "previousClickEventEmitter", nextClickEventEmitter: "nextClickEventEmitter", dotClickEventEmitter: "dotClickEventEmitter", itemClickEventEmitter: "itemClickEventEmitter" }, queries: [{ propertyName: "items", predicate: ["carouselItem"], read: ElementRef }], viewQueries: [{ propertyName: "dotsContainer", first: true, predicate: ["dotsContainer"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }], ngImport: i0, template: "<div class=\"c-carousel-container\">\n <div \n class=\"c-carousel-slides\" \n #slidesContainer\n [style.transform]=\"'translateX(' + offset + '%)'\" \n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (touchstart)=\"onTouchStart($event)\" \n (touchmove)=\"onTouchMove($event)\" \n (touchend)=\"onTouchEnd($event)\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"c-carousel-footer\">\n <button [hidden]=\"removeArrows\" class=\"c-carousel-nav prev\" title=\"Slide anterior\" aria-label=\"Slide anterior\" (click)=\"prevSlide()\">\n <lib-elux-icon [icon]=\"'Chevron_Left.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n\n <div [hidden]=\"removeDots\" class=\"c-carousel-dots\" #dotsContainer>\n <span\n role=\"button\"\n class=\"dot\"\n *ngFor=\"let index of getStepIndexCount()\"\n (click)=\"goToSlide(index)\"\n (keyup)=\"goToSlide(index)\"\n [class.active]=\"index === getCurrentStepIndex()\"\n [attr.aria-disabled]=\"true\"\n [attr.aria-label]=\"'pagina' + (index + 1)\"\n >\n </span>\n </div>\n\n <button [hidden]=\"removeArrows\" class=\"c-carousel-nav next\" title=\"Pr\u00F3ximo slide\" aria-label=\"Pr\u00F3ximo slide\" (click)=\"nextSlide()\">\n <lib-elux-icon [icon]=\"'Chevron_Right.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n </div>\n</div>\n", styles: [".display{font-family:Electrolux Sans;font-size:48px;font-weight:700;line-height:56px}.heading-1{font-family:Electrolux Sans;font-size:34px;font-weight:700;line-height:40px}.heading-2{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}@media screen and (max-width: 768px){.display{font-family:Electrolux Sans;font-size:40px;font-weight:700;line-height:46px}.heading-1{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-2{font-family:Electrolux Sans;font-size:24px;font-weight:600;line-height:28px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}}.c-carousel-container{position:relative;width:100%}.c-carousel-slides{display:flex;transition:transform .4s ease-out;touch-action:pan-y;cursor:grab;-webkit-user-select:none;user-select:none;will-change:transform}.c-carousel-slides:active{cursor:grabbing}.c-carousel-item{display:flex;flex-direction:column;text-align:center;align-items:center;justify-content:center;gap:16px;height:150px;margin:6px;border:1px solid #dee7ea;border-radius:2px;cursor:pointer;pointer-events:auto}.c-carousel-item .c-span{font-weight:400;font-size:18px;color:#011e41}.c-carousel-footer{width:min-content;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:16px 0 24px}.c-carousel-footer .c-carousel-nav{background:none;border:none;cursor:pointer;padding:8px;border-radius:50px;background-color:#dfe7ea;transition:all ease-in-out .2s;z-index:2}.c-carousel-footer .c-carousel-nav:hover{transform:scale(1.1)}.c-carousel-footer .c-carousel-nav ::ng-deep span{display:block}.c-carousel-footer .c-carousel-dots{padding:6px;display:flex;text-align:center;border:1px solid #020f2e;border-radius:16px;margin:0 16px;max-width:120px;overflow:hidden;position:relative}@media (max-width: 768px){.c-carousel-footer .c-carousel-dots{margin:0 12px;max-width:100px}}.c-carousel-footer .dot{height:10px;width:10px;margin:0 5px;background-color:#dfe7ea;border-radius:50%;display:inline-block;cursor:pointer;transition:all ease-in-out .2s;flex-shrink:0}.c-carousel-footer .dot:hover,.c-carousel-footer .dot.active{background-color:#011e41}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: EluxIcon, selector: "lib-elux-icon", inputs: ["color", "useSubscription", "icon", "description", "size", "height", "width", "sizeType"] }] }); }
|
|
287
369
|
}
|
|
288
370
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EluxCarouselComponent, decorators: [{
|
|
289
371
|
type: Component,
|
|
@@ -311,5 +393,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
311
393
|
type: Output
|
|
312
394
|
}], dotClickEventEmitter: [{
|
|
313
395
|
type: Output
|
|
396
|
+
}], itemClickEventEmitter: [{
|
|
397
|
+
type: Output
|
|
314
398
|
}] } });
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFjbkMsTUFBTSxPQUFPLHFCQUFxQjtJQWlDaEMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQTVCOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRXRDLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDdEQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNsRCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBRTNELGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRUgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsYUFBUSxHQUFHLENBQUMsQ0FB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REF1Q0Esdy9GRHpCWSxZQUFZLDRKQUFFLFFBQVE7OzRGQUVyQixxQkFBcUI7a0JBUGpDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLG1CQUFtQixXQUdwQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7OEVBR3NCLEtBQUs7c0JBQTNELGVBQWU7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDekIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNJLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUVuQixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUkseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbHV4SWNvbiB9IGZyb20gJy4uL2ljb24nO1xuXG5leHBvcnQgdHlwZSBQcm9kdWN0SXRlbSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbWFnZTogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbGliLWVsdXgtY2Fyb3VzZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFbHV4SWNvbl0sXG59KVxuZXhwb3J0IGNsYXNzIEVsdXhDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGRyZW4oJ2Nhcm91c2VsSXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpdGVtcyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnZG90c0NvbnRhaW5lcicpIGRvdHNDb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzbGlkZXNDb250YWluZXInKSBzbGlkZXNDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGl0ZW1zUGVyU2xpZGU6IG51bWJlciA9IDQ7XG4gIEBJbnB1dCgpIHJlbW92ZUFycm93czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZW1vdmVEb3RzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9QbGF5SW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIEBPdXRwdXQoKSBwcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG5leHRDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkb3RDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7ICBcblxuICBjdXJyZW50SW5kZXggPSAwO1xuICBjdXJyZW50U3RlcEluZGV4ID0gMDtcbiAgb2Zmc2V0ID0gMDtcblxuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xuICBwcml2YXRlIGN1cnJlbnRYID0gMDtcbiAgcHJpdmF0ZSBpbml0aWFsT2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBkcmFnT2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBjb250YWluZXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgaXRlbVdpZHRoID0gMDtcbiAgcHJpdmF0ZSBtYXhPZmZzZXQgPSAwO1xuICBwcml2YXRlIG1pbk9mZnNldCA9IDA7XG4gIHByaXZhdGUgYXV0b1BsYXlUaW1lcjogYW55O1xuICBwcml2YXRlIGFuaW1hdGlvbklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2ZWxvY2l0eSA9IDA7XG4gIHByaXZhdGUgbGFzdE1vdmVUaW1lID0gMDtcbiAgcHJpdmF0ZSBsYXN0TW92ZVggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zZXRJdGVtV2lkdGhzKCk7XG4gICAgdGhpcy51cGRhdGVMaW1pdHMoKTtcblxuICAgIGlmICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RhcnRBdXRvUGxheSgpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcbiAgICAgIHRoaXMudXBkYXRlTGltaXRzKCk7XG4gICAgICB0aGlzLmdvVG9GaXJzdFNsaWRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHdpbmRvdyByZXNpemUgdG8gcmVjYWxjdWxhdGUgZGltZW5zaW9uc1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICBpZiAodGhpcy5hbmltYXRpb25JZCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25JZCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKCkge1xuICAgIGlmICh0aGlzLnNsaWRlc0NvbnRhaW5lcikge1xuICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLml0ZW1XaWR0aCA9IHRoaXMuY29udGFpbmVyV2lkdGggLyB0aGlzLml0ZW1zUGVyU2xpZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW1pdHMoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgdGhpcy5tYXhPZmZzZXQgPSAwO1xuICAgIHRoaXMubWluT2Zmc2V0ID0gLSgodG90YWxTdGVwcyAtIDEpICogMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbVdpZHRocygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG1pbldpZHRoID0gYGNhbGMoMTAwJSAvICR7dGhpcy5pdGVtc1BlclNsaWRlfSlgO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQsICdtaW5XaWR0aCcsIG1pbldpZHRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0QXV0b1BsYXkoKSB7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICB0aGlzLmF1dG9QbGF5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgICB0aGlzLm5leHRTbGlkZSgpO1xuICAgICAgfVxuICAgIH0sICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwgfHwgMCkgKiAxMDAwKTtcbiAgfVxuXG4gIHN0b3BBdXRvUGxheSgpIHtcbiAgICBpZiAodGhpcy5hdXRvUGxheVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1BsYXlUaW1lcik7XG4gICAgICB0aGlzLmF1dG9QbGF5VGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdXNlIGV2ZW50c1xuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQuY2xpZW50WCk7XG4gIH1cblxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYWcoZXZlbnQuY2xpZW50WCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG91Y2ggZXZlbnRzXG4gIG9uVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQudG91Y2hlc1swXS5jbGllbnRYKTtcbiAgfVxuXG4gIG9uVG91Y2hNb3ZlKGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudXBkYXRlRHJhZyhldmVudC50b3VjaGVzWzBdLmNsaWVudFgpO1xuICAgIH1cbiAgfVxuXG4gIG9uVG91Y2hFbmQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzLmVuZERyYWcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHJhZyhjbGllbnRYOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmN1cnJlbnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmluaXRpYWxPZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB0aGlzLmRyYWdPZmZzZXQgPSAwO1xuICAgIHRoaXMudmVsb2NpdHkgPSAwO1xuICAgIHRoaXMubGFzdE1vdmVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmxhc3RNb3ZlWCA9IGNsaWVudFg7XG4gICAgXG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICBcbiAgICAvLyBEaXNhYmxlIENTUyB0cmFuc2l0aW9ucyBkdXJpbmcgZHJhZ1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZXNDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnKGNsaWVudFg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRYID0gY2xpZW50WDtcbiAgICBjb25zdCBkZWx0YVggPSB0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHZlbG9jaXR5IGZvciBtb21lbnR1bVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZURlbHRhID0gbm93IC0gdGhpcy5sYXN0TW92ZVRpbWU7XG4gICAgaWYgKHRpbWVEZWx0YSA+IDApIHtcbiAgICAgIHRoaXMudmVsb2NpdHkgPSAoY2xpZW50WCAtIHRoaXMubGFzdE1vdmVYKSAvIHRpbWVEZWx0YTtcbiAgICB9XG4gICAgdGhpcy5sYXN0TW92ZVRpbWUgPSBub3c7XG4gICAgdGhpcy5sYXN0TW92ZVggPSBjbGllbnRYO1xuXG4gICAgLy8gQ29udmVydCBwaXhlbCBtb3ZlbWVudCB0byBwZXJjZW50YWdlXG4gICAgY29uc3QgZHJhZ1BlcmNlbnRhZ2UgPSAoZGVsdGFYIC8gdGhpcy5jb250YWluZXJXaWR0aCkgKiAxMDA7XG4gICAgXG4gICAgLy8gQXBwbHkgcmVzaXN0YW5jZSBhdCBib3VuZGFyaWVzXG4gICAgbGV0IHJlc2lzdGVkRHJhZ1BlcmNlbnRhZ2UgPSBkcmFnUGVyY2VudGFnZTtcbiAgICBjb25zdCBwb3RlbnRpYWxPZmZzZXQgPSB0aGlzLmluaXRpYWxPZmZzZXQgKyBkcmFnUGVyY2VudGFnZTtcbiAgICBcbiAgICBpZiAocG90ZW50aWFsT2Zmc2V0ID4gdGhpcy5tYXhPZmZzZXQpIHtcbiAgICAgIGNvbnN0IG92ZXJEcmFnID0gcG90ZW50aWFsT2Zmc2V0IC0gdGhpcy5tYXhPZmZzZXQ7XG4gICAgICByZXNpc3RlZERyYWdQZXJjZW50YWdlID0gZHJhZ1BlcmNlbnRhZ2UgLSAob3ZlckRyYWcgKiAwLjMpO1xuICAgIH0gZWxzZSBpZiAocG90ZW50aWFsT2Zmc2V0IDwgdGhpcy5taW5PZmZzZXQpIHtcbiAgICAgIGNvbnN0IG92ZXJEcmFnID0gdGhpcy5taW5PZmZzZXQgLSBwb3RlbnRpYWxPZmZzZXQ7XG4gICAgICByZXNpc3RlZERyYWdQZXJjZW50YWdlID0gZHJhZ1BlcmNlbnRhZ2UgKyAob3ZlckRyYWcgKiAwLjMpO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ09mZnNldCA9IHJlc2lzdGVkRHJhZ1BlcmNlbnRhZ2U7XG4gICAgdGhpcy51cGRhdGVEcmFnUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRHJhZ1Bvc2l0aW9uKCkge1xuICAgIGNvbnN0IG5ld09mZnNldCA9IHRoaXMuaW5pdGlhbE9mZnNldCArIHRoaXMuZHJhZ09mZnNldDtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIubmF0aXZlRWxlbWVudCwgXG4gICAgICAndHJhbnNmb3JtJywgXG4gICAgICBgdHJhbnNsYXRlWCgke25ld09mZnNldH0lKWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmREcmFnKCkge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBSZS1lbmFibGUgQ1NTIHRyYW5zaXRpb25zXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICd0cmFuc2Zvcm0gMC40cyBlYXNlLW91dCcpO1xuXG4gICAgY29uc3QgZmluYWxPZmZzZXQgPSB0aGlzLmluaXRpYWxPZmZzZXQgKyB0aGlzLmRyYWdPZmZzZXQ7XG4gICAgY29uc3QgdGhyZXNob2xkID0gNTA7IC8vIE1pbmltdW0gZHJhZyBkaXN0YW5jZSBpbiBwaXhlbHMgdG8gdHJpZ2dlciBzbGlkZSBjaGFuZ2VcbiAgICBjb25zdCBkcmFnRGlzdGFuY2UgPSBNYXRoLmFicyh0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFgpO1xuICAgIFxuICAgIC8vIENoZWNrIGZvciBtb21lbnR1bSAodmVsb2NpdHktYmFzZWQgc2xpZGUgY2hhbmdlKVxuICAgIGNvbnN0IG1vbWVudHVtVGhyZXNob2xkID0gMC41O1xuICAgIGNvbnN0IGhhc1NpZ25pZmljYW50VmVsb2NpdHkgPSBNYXRoLmFicyh0aGlzLnZlbG9jaXR5KSA+IG1vbWVudHVtVGhyZXNob2xkO1xuICAgIFxuICAgIGlmIChkcmFnRGlzdGFuY2UgPiB0aHJlc2hvbGQgfHwgaGFzU2lnbmlmaWNhbnRWZWxvY2l0eSkge1xuICAgICAgaWYgKHRoaXMuZHJhZ09mZnNldCA+IDAgfHwgKGhhc1NpZ25pZmljYW50VmVsb2NpdHkgJiYgdGhpcy52ZWxvY2l0eSA+IDApKSB7XG4gICAgICAgIC8vIERyYWdnZWQgcmlnaHQgb3IgaGFzIHBvc2l0aXZlIHZlbG9jaXR5IC0gZ28gdG8gcHJldmlvdXMgc2xpZGVcbiAgICAgICAgdGhpcy5wcmV2U2xpZGUoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnT2Zmc2V0IDwgMCB8fCAoaGFzU2lnbmlmaWNhbnRWZWxvY2l0eSAmJiB0aGlzLnZlbG9jaXR5IDwgMCkpIHtcbiAgICAgICAgLy8gRHJhZ2dlZCBsZWZ0IG9yIGhhcyBuZWdhdGl2ZSB2ZWxvY2l0eSAtIGdvIHRvIG5leHQgc2xpZGVcbiAgICAgICAgdGhpcy5uZXh0U2xpZGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNtYWxsIGRyYWcsIHNuYXAgYmFjayB0byBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNtYWxsIGRyYWcsIHNuYXAgYmFjayB0byBjdXJyZW50IHBvc2l0aW9uXG4gICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICB0aGlzLmRyYWdPZmZzZXQgPSAwO1xuICAgIHRoaXMudmVsb2NpdHkgPSAwO1xuICAgIFxuICAgIC8vIFJlc3RhcnQgYXV0b3BsYXkgaWYgaXQgd2FzIGVuYWJsZWRcbiAgICBpZiAodGhpcy5hdXRvUGxheUludGVydmFsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RhcnRBdXRvUGxheSgpLCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGVwSW5kZXhDb3VudCgpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHRvdGFsU3RlcHMgfSwgKF8sIGkpID0+IGkpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFN0ZXBJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGVwSW5kZXg7IFxuICB9XG5cbiAgZ29Ub0ZpcnN0U2xpZGUoKSB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IDA7XG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB0aGlzLnNjcm9sbEFjdGl2ZURvdEludG9WaWV3KDApO1xuICB9XG5cbiAgZ29Ub1NsaWRlKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IE1hdGgubWluKGluZGV4ICogdGhpcy5pdGVtc1BlclNsaWRlLCB0aGlzLml0ZW1zLmxlbmd0aCAtIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB0aGlzLnNjcm9sbEFjdGl2ZURvdEludG9WaWV3KGluZGV4KTtcbiAgICB0aGlzLmRvdENsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgfVxuXG4gIHByZXZTbGlkZSgpIHtcbiAgICBjb25zdCB0b3RhbFN0ZXBzID0gTWF0aC5jZWlsKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICBcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcEluZGV4ID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4LS07XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFN0ZXBJbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gdG90YWxTdGVwcyAtIDE7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IE1hdGgubWluKHRoaXMuY3VycmVudFN0ZXBJbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZSwgdGhpcy5pdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcodGhpcy5jdXJyZW50U3RlcEluZGV4KTtcbiAgICB0aGlzLnByZXZpb3VzQ2xpY2tFdmVudEVtaXR0ZXIuZW1pdCgpO1xuICB9XG5cbiAgbmV4dFNsaWRlKCkge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwSW5kZXggPj0gdG90YWxTdGVwcyAtIDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCsrO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBNYXRoLm1pbih0aGlzLmN1cnJlbnRTdGVwSW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGUsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB0aGlzLnNjcm9sbEFjdGl2ZURvdEludG9WaWV3KHRoaXMuY3VycmVudFN0ZXBJbmRleCk7XG4gICAgdGhpcy5uZXh0Q2xpY2tFdmVudEVtaXR0ZXIuZW1pdCgpO1xuICB9XG5cbiAgdXBkYXRlT2Zmc2V0KCkge1xuICAgIHRoaXMub2Zmc2V0ID0gLTEwMCAqICh0aGlzLmN1cnJlbnRJbmRleCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgJiYgdGhpcy5zbGlkZXNDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIFxuICAgICAgICAndHJhbnNmb3JtJywgXG4gICAgICAgIGB0cmFuc2xhdGVYKCR7dGhpcy5vZmZzZXR9JSlgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcoaW5kZXg6IG51bWJlcikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZG90c0NvbnRhaW5lciA9IHRoaXMuZG90c0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghZG90c0NvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBkb3RzID0gZG90c0NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkb3QnKTtcbiAgICAgIGlmICghZG90cyB8fCAhZG90c1tpbmRleF0pIHJldHVybjtcblxuICAgICAgY29uc3QgYWN0aXZlRG90ID0gZG90c1tpbmRleF07XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGRvdHNDb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBkb3RXaWR0aCA9IGFjdGl2ZURvdC5vZmZzZXRXaWR0aCArIDEwO1xuICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBkb3RXaWR0aCAqIGluZGV4IC0gY29udGFpbmVyV2lkdGggLyAyICsgZG90V2lkdGggLyAyO1xuXG4gICAgICBkb3RzQ29udGFpbmVyLnNjcm9sbFRvKHtcbiAgICAgICAgbGVmdDogTWF0aC5tYXgoMCwgc2Nyb2xsUG9zaXRpb24pLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImMtY2Fyb3VzZWwtY29udGFpbmVyXCI+XG4gIDxkaXYgXG4gICAgY2xhc3M9XCJjLWNhcm91c2VsLXNsaWRlc1wiIFxuICAgICNzbGlkZXNDb250YWluZXJcbiAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAnJSknXCIgXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKCRldmVudClcIlxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaFN0YXJ0KCRldmVudClcIiBcbiAgICAodG91Y2htb3ZlKT1cIm9uVG91Y2hNb3ZlKCRldmVudClcIiBcbiAgICAodG91Y2hlbmQpPVwib25Ub3VjaEVuZCgkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYy1jYXJvdXNlbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIFtoaWRkZW5dPVwicmVtb3ZlQXJyb3dzXCIgY2xhc3M9XCJjLWNhcm91c2VsLW5hdiBwcmV2XCIgdGl0bGU9XCJTbGlkZSBhbnRlcmlvclwiIGFyaWEtbGFiZWw9XCJTbGlkZSBhbnRlcmlvclwiIChjbGljayk9XCJwcmV2U2xpZGUoKVwiPlxuICAgICAgPGxpYi1lbHV4LWljb24gW2ljb25dPVwiJ0NoZXZyb25fTGVmdC5zdmcnXCIgW3NpemVdPVwiJzE2J1wiIFtzaXplVHlwZV09XCIncHgnXCIgW2NvbG9yXT1cIicjMDIwRjJFJ1wiPjwvbGliLWVsdXgtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgW2hpZGRlbl09XCJyZW1vdmVEb3RzXCIgY2xhc3M9XCJjLWNhcm91c2VsLWRvdHNcIiAjZG90c0NvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImRvdFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpbmRleCBvZiBnZXRTdGVwSW5kZXhDb3VudCgpXCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9TbGlkZShpbmRleClcIlxuICAgICAgICAoa2V5dXApPVwiZ29Ub1NsaWRlKGluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaW5kZXggPT09IGdldEN1cnJlbnRTdGVwSW5kZXgoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BhZ2luYScgKyAoaW5kZXggKyAxKVwiXG4gICAgICA+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIFtoaWRkZW5dPVwicmVtb3ZlQXJyb3dzXCIgY2xhc3M9XCJjLWNhcm91c2VsLW5hdiBuZXh0XCIgdGl0bGU9XCJQcsOzeGltbyBzbGlkZVwiIGFyaWEtbGFiZWw9XCJQcsOzeGltbyBzbGlkZVwiIChjbGljayk9XCJuZXh0U2xpZGUoKVwiPlxuICAgICAgPGxpYi1lbHV4LWljb24gW2ljb25dPVwiJ0NoZXZyb25fUmlnaHQuc3ZnJ1wiIFtzaXplXT1cIicxNidcIiBbc2l6ZVR5cGVdPVwiJ3B4J1wiIFtjb2xvcl09XCInIzAyMEYyRSdcIj48L2xpYi1lbHV4LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFjbkMsTUFBTSxPQUFPLHFCQUFxQjtJQXVDaEMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWxDOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRXRDLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDdEQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNsRCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ2pELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUF1RCxDQUFDO1FBRTFHLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRUgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFN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TSxjQUFjLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGNBQWMsR0FBRyxRQUFRLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUU1RSxhQUFhLENBQUMsUUFBUSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO2dCQUNqQyxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBN2FVLHFCQUFxQjttR0FBckIscUJBQXFCLHdkQUNTLFVBQVUsa1BDakJyRCwrakRBdUNBLHcvRkR6QlksWUFBWSw0SkFBRSxRQUFROzs0RkFFckIscUJBQXFCO2tCQVBqQyxTQUFTO2lDQUNJLElBQUksWUFDTixtQkFBbUIsV0FHcEIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDOzhFQUdzQixLQUFLO3NCQUEzRCxlQUFlO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ3pCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFbkIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVsdXhJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RJdGVtID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGltYWdlOiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdsaWItZWx1eC1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhcm91c2VsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEVsdXhJY29uXSxcbn0pXG5leHBvcnQgY2xhc3MgRWx1eENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQENvbnRlbnRDaGlsZHJlbignY2Fyb3VzZWxJdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGl0ZW1zITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkb3RzQ29udGFpbmVyJykgZG90c0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NsaWRlc0NvbnRhaW5lcicpIHNsaWRlc0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCkgaXRlbXNQZXJTbGlkZTogbnVtYmVyID0gNDtcbiAgQElucHV0KCkgcmVtb3ZlQXJyb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlbW92ZURvdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1BsYXlJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIHByZXZpb3VzQ2xpY2tFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbmV4dENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRvdENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1DbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e2V2ZW50OiBFdmVudCwgaW5kZXg6IG51bWJlciwgZWxlbWVudDogSFRNTEVsZW1lbnR9PigpO1xuXG4gIGN1cnJlbnRJbmRleCA9IDA7XG4gIGN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICBvZmZzZXQgPSAwO1xuXG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXJ0WCA9IDA7XG4gIHByaXZhdGUgY3VycmVudFggPSAwO1xuICBwcml2YXRlIGluaXRpYWxPZmZzZXQgPSAwO1xuICBwcml2YXRlIGRyYWdPZmZzZXQgPSAwO1xuICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gMDtcbiAgcHJpdmF0ZSBpdGVtV2lkdGggPSAwO1xuICBwcml2YXRlIG1heE9mZnNldCA9IDA7XG4gIHByaXZhdGUgbWluT2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBhdXRvUGxheVRpbWVyOiBhbnk7XG4gIHByaXZhdGUgYW5pbWF0aW9uSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHZlbG9jaXR5ID0gMDtcbiAgcHJpdmF0ZSBsYXN0TW92ZVRpbWUgPSAwO1xuICBwcml2YXRlIGxhc3RNb3ZlWCA9IDA7XG4gIHByaXZhdGUgd2FzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0b3VjaFN0YXJ0VGltZSA9IDA7XG4gIHByaXZhdGUgdG91Y2hTdGFydFggPSAwO1xuICBwcml2YXRlIHRvdWNoU3RhcnRZID0gMDtcbiAgcHJpdmF0ZSBpc1ZlcnRpY2FsU2Nyb2xsID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbWl0cygpO1xuICAgIHRoaXMuc2V0dXBJdGVtQ2xpY2tMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RhcnRBdXRvUGxheSgpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcbiAgICAgIHRoaXMudXBkYXRlTGltaXRzKCk7XG4gICAgICB0aGlzLmdvVG9GaXJzdFNsaWRlKCk7XG4gICAgICB0aGlzLnNldHVwSXRlbUNsaWNrTGlzdGVuZXJzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHdpbmRvdyByZXNpemUgdG8gcmVjYWxjdWxhdGUgZGltZW5zaW9uc1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICBpZiAodGhpcy5hbmltYXRpb25JZCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25JZCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKCkge1xuICAgIGlmICh0aGlzLnNsaWRlc0NvbnRhaW5lcikge1xuICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLml0ZW1XaWR0aCA9IHRoaXMuY29udGFpbmVyV2lkdGggLyB0aGlzLml0ZW1zUGVyU2xpZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW1pdHMoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgdGhpcy5tYXhPZmZzZXQgPSAwO1xuICAgIHRoaXMubWluT2Zmc2V0ID0gLSgodG90YWxTdGVwcyAtIDEpICogMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbVdpZHRocygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG1pbldpZHRoID0gYGNhbGMoMTAwJSAvICR7dGhpcy5pdGVtc1BlclNsaWRlfSlgO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQsICdtaW5XaWR0aCcsIG1pbldpZHRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0QXV0b1BsYXkoKSB7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICB0aGlzLmF1dG9QbGF5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgICB0aGlzLm5leHRTbGlkZSgpO1xuICAgICAgfVxuICAgIH0sICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwgfHwgMCkgKiAxMDAwKTtcbiAgfVxuXG4gIHN0b3BBdXRvUGxheSgpIHtcbiAgICBpZiAodGhpcy5hdXRvUGxheVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1BsYXlUaW1lcik7XG4gICAgICB0aGlzLmF1dG9QbGF5VGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdXNlIGV2ZW50c1xuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQuY2xpZW50WCk7XG4gIH1cblxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYWcoZXZlbnQuY2xpZW50WCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG91Y2ggZXZlbnRzXG4gIG9uVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIHRoaXMudG91Y2hTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy50b3VjaFN0YXJ0WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICB0aGlzLmlzVmVydGljYWxTY3JvbGwgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0RHJhZyhldmVudC50b3VjaGVzWzBdLmNsaWVudFgpO1xuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGN1cnJlbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgIGNvbnN0IGN1cnJlbnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKGN1cnJlbnRYIC0gdGhpcy50b3VjaFN0YXJ0WCk7XG4gICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMoY3VycmVudFkgLSB0aGlzLnRvdWNoU3RhcnRZKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgdmVydGljYWwgc2Nyb2xsXG4gICAgaWYgKGRlbHRhWSA+IGRlbHRhWCAmJiBkZWx0YVkgPiAxMCkge1xuICAgICAgdGhpcy5pc1ZlcnRpY2FsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICd0cmFuc2Zvcm0gMC40cyBlYXNlLW91dCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBPbmx5IHByZXZlbnQgZGVmYXVsdCBpZiBpdCdzIGEgaG9yaXpvbnRhbCBkcmFnXG4gICAgaWYgKGRlbHRhWCA+IDEwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51cGRhdGVEcmFnKGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCk7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaEVuZChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVmVydGljYWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuaXNWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0b3VjaER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHRoaXMudG91Y2hTdGFydFRpbWU7XG4gICAgY29uc3QgdG91Y2hEaXN0YW5jZSA9IE1hdGguYWJzKHRoaXMuY3VycmVudFggLSB0aGlzLnN0YXJ0WCk7XG4gICAgXG4gICAgLy8gQ29uc2lkZXIgaXQgYSB0YXAgaWYgZHVyYXRpb24gPCAzMDBtcyBhbmQgZGlzdGFuY2UgPCAxMHB4XG4gICAgaWYgKHRvdWNoRHVyYXRpb24gPCAzMDAgJiYgdG91Y2hEaXN0YW5jZSA8IDEwKSB7XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEl0ZW1DbGlja0xpc3RlbmVycygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpc3RlbmVyc1xuICAgICAgY29uc3QgbmV3SXRlbSA9IGl0ZW0ubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBpdGVtLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKG5ld0l0ZW0sIGl0ZW0ubmF0aXZlRWxlbWVudCk7XG4gICAgICBcbiAgICAgIC8vIEFkZCBib3RoIGNsaWNrIGFuZCB0b3VjaGVuZCBsaXN0ZW5lcnMgZm9yIGJldHRlciBtb2JpbGUgc3VwcG9ydFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4obmV3SXRlbSwgJ2NsaWNrJywgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUl0ZW1DbGljayhldmVudCwgaW5kZXgsIG5ld0l0ZW0pO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG5ld0l0ZW0sICd0b3VjaGVuZCcsIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0b3VjaGVuZCBpZiBpdCB3YXNuJ3QgYSBkcmFnXG4gICAgICAgIGlmICghdGhpcy53YXNEcmFnZ2luZyAmJiAhdGhpcy5pc1ZlcnRpY2FsU2Nyb2xsKSB7XG4gICAgICAgICAgY29uc3QgdG91Y2hEdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlzLnRvdWNoU3RhcnRUaW1lO1xuICAgICAgICAgIGNvbnN0IHRvdWNoRGlzdGFuY2UgPSBNYXRoLmFicyhldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy50b3VjaFN0YXJ0WCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRvdWNoRHVyYXRpb24gPCAzMDAgJiYgdG91Y2hEaXN0YW5jZSA8IDEwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJdGVtQ2xpY2soZXZlbnQsIGluZGV4LCBuZXdJdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQ2xpY2soZXZlbnQ6IEV2ZW50LCBpbmRleDogbnVtYmVyLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIC8vIFByZXZlbnQgY2xpY2sgaWYgaXQgd2FzIHByZWNlZGVkIGJ5IGEgZHJhZ1xuICAgIGlmICh0aGlzLndhc0RyYWdnaW5nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaXRlbUNsaWNrRXZlbnRFbWl0dGVyLmVtaXQoe1xuICAgICAgZXZlbnQsXG4gICAgICBpbmRleCxcbiAgICAgIGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnREcmFnKGNsaWVudFg6IG51bWJlcikge1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy53YXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmN1cnJlbnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmluaXRpYWxPZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB0aGlzLmRyYWdPZmZzZXQgPSAwO1xuICAgIHRoaXMudmVsb2NpdHkgPSAwO1xuICAgIHRoaXMubGFzdE1vdmVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmxhc3RNb3ZlWCA9IGNsaWVudFg7XG4gICAgXG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICBcbiAgICAvLyBEaXNhYmxlIENTUyB0cmFuc2l0aW9ucyBkdXJpbmcgZHJhZ1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZXNDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnKGNsaWVudFg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICAvLyBNb3JlIGxlbmllbnQgdGhyZXNob2xkIGZvciBtb2JpbGUgLSBtYXJrIGFzIGRyYWdnaW5nIG9ubHkgZm9yIHNpZ25pZmljYW50IG1vdmVtZW50XG4gICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYKTtcbiAgICBpZiAoZGVsdGFYID4gMTUpIHsgLy8gSW5jcmVhc2VkIGZyb20gNXB4IHRvIDE1cHggZm9yIG1vYmlsZVxuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50WCA9IGNsaWVudFg7XG4gICAgY29uc3QgdG90YWxEZWx0YVggPSB0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHZlbG9jaXR5IGZvciBtb21lbnR1bVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZURlbHRhID0gbm93IC0gdGhpcy5sYXN0TW92ZVRpbWU7XG4gICAgaWYgKHRpbWVEZWx0YSA+IDApIHtcbiAgICAgIHRoaXMudmVsb2NpdHkgPSAoY2xpZW50WCAtIHRoaXMubGFzdE1vdmVYKSAvIHRpbWVEZWx0YTtcbiAgICB9XG4gICAgdGhpcy5sYXN0TW92ZVRpbWUgPSBub3c7XG4gICAgdGhpcy5sYXN0TW92ZVggPSBjbGllbnRYO1xuXG4gICAgLy8gQ29udmVydCBwaXhlbCBtb3ZlbWVudCB0byBwZXJjZW50YWdlXG4gICAgY29uc3QgZHJhZ1BlcmNlbnRhZ2UgPSAodG90YWxEZWx0YVggLyB0aGlzLmNvbnRhaW5lcldpZHRoKSAqIDEwMDtcbiAgICBcbiAgICAvLyBBcHBseSByZXNpc3RhbmNlIGF0IGJvdW5kYXJpZXNcbiAgICBsZXQgcmVzaXN0ZWREcmFnUGVyY2VudGFnZSA9IGRyYWdQZXJjZW50YWdlO1xuICAgIGNvbnN0IHBvdGVudGlhbE9mZnNldCA9IHRoaXMuaW5pdGlhbE9mZnNldCArIGRyYWdQZXJjZW50YWdlO1xuICAgIFxuICAgIGlmIChwb3RlbnRpYWxPZmZzZXQgPiB0aGlzLm1heE9mZnNldCkge1xuICAgICAgY29uc3Qgb3ZlckRyYWcgPSBwb3RlbnRpYWxPZmZzZXQgLSB0aGlzLm1heE9mZnNldDtcbiAgICAgIHJlc2lzdGVkRHJhZ1BlcmNlbnRhZ2UgPSBkcmFnUGVyY2VudGFnZSAtIChvdmVyRHJhZyAqIDAuMyk7XG4gICAgfSBlbHNlIGlmIChwb3RlbnRpYWxPZmZzZXQgPCB0aGlzLm1pbk9mZnNldCkge1xuICAgICAgY29uc3Qgb3ZlckRyYWcgPSB0aGlzLm1pbk9mZnNldCAtIHBvdGVudGlhbE9mZnNldDtcbiAgICAgIHJlc2lzdGVkRHJhZ1BlcmNlbnRhZ2UgPSBkcmFnUGVyY2VudGFnZSArIChvdmVyRHJhZyAqIDAuMyk7XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnT2Zmc2V0ID0gcmVzaXN0ZWREcmFnUGVyY2VudGFnZTtcbiAgICB0aGlzLnVwZGF0ZURyYWdQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnUG9zaXRpb24oKSB7XG4gICAgY29uc3QgbmV3T2Zmc2V0ID0gdGhpcy5pbml0aWFsT2Zmc2V0ICsgdGhpcy5kcmFnT2Zmc2V0O1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBcbiAgICAgICd0cmFuc2Zvcm0nLCBcbiAgICAgIGB0cmFuc2xhdGVYKCR7bmV3T2Zmc2V0fSUpYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuZERyYWcoKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIFxuICAgIC8vIENsZWFyIHRoZSB3YXNEcmFnZ2luZyBmbGFnIGFmdGVyIGEgc2hvcnRlciBkZWxheSBmb3IgbW9iaWxlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfSwgNTApOyAvLyBSZWR1Y2VkIGZyb20gMTAwbXMgdG8gNTBtc1xuICAgIFxuICAgIC8vIFJlLWVuYWJsZSBDU1MgdHJhbnNpdGlvbnNcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAwLjRzIGVhc2Utb3V0Jyk7XG5cbiAgICBjb25zdCBmaW5hbE9mZnNldCA9IHRoaXMuaW5pdGlhbE9mZnNldCArIHRoaXMuZHJhZ09mZnNldDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSA0MDsgLy8gUmVkdWNlZCBmcm9tIDUwcHggdG8gNDBweCBmb3IgbW9iaWxlXG4gICAgY29uc3QgZHJhZ0Rpc3RhbmNlID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYKTtcbiAgICBcbiAgICAvLyBDaGVjayBmb3IgbW9tZW50dW0gKHZlbG9jaXR5LWJhc2VkIHNsaWRlIGNoYW5nZSlcbiAgICBjb25zdCBtb21lbnR1bVRocmVzaG9sZCA9IDAuMzsgLy8gUmVkdWNlZCBmcm9tIDAuNSB0byAwLjNcbiAgICBjb25zdCBoYXNTaWduaWZpY2FudFZlbG9jaXR5ID0gTWF0aC5hYnModGhpcy52ZWxvY2l0eSkgPiBtb21lbnR1bVRocmVzaG9sZDtcbiAgICBcbiAgICBpZiAoZHJhZ0Rpc3RhbmNlID4gdGhyZXNob2xkIHx8IGhhc1NpZ25pZmljYW50VmVsb2NpdHkpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdPZmZzZXQgPiAwIHx8IChoYXNTaWduaWZpY2FudFZlbG9jaXR5ICYmIHRoaXMudmVsb2NpdHkgPiAwKSkge1xuICAgICAgICAvLyBEcmFnZ2VkIHJpZ2h0IG9yIGhhcyBwb3NpdGl2ZSB2ZWxvY2l0eSAtIGdvIHRvIHByZXZpb3VzIHNsaWRlXG4gICAgICAgIHRoaXMucHJldlNsaWRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZ09mZnNldCA8IDAgfHwgKGhhc1NpZ25pZmljYW50VmVsb2NpdHkgJiYgdGhpcy52ZWxvY2l0eSA8IDApKSB7XG4gICAgICAgIC8vIERyYWdnZWQgbGVmdCBvciBoYXMgbmVnYXRpdmUgdmVsb2NpdHkgLSBnbyB0byBuZXh0IHNsaWRlXG4gICAgICAgIHRoaXMubmV4dFNsaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTbWFsbCBkcmFnLCBzbmFwIGJhY2sgdG8gY3VycmVudCBwb3NpdGlvblxuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTbWFsbCBkcmFnLCBzbmFwIGJhY2sgdG8gY3VycmVudCBwb3NpdGlvblxuICAgICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBkcmFnIHN0YXRlXG4gICAgdGhpcy5kcmFnT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnZlbG9jaXR5ID0gMDtcbiAgICBcbiAgICAvLyBSZXN0YXJ0IGF1dG9wbGF5IGlmIGl0IHdhcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYXV0b1BsYXlJbnRlcnZhbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0YXJ0QXV0b1BsYXkoKSwgMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RlcEluZGV4Q291bnQoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbFN0ZXBzIH0sIChfLCBpKSA9PiBpKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTdGVwSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcEluZGV4OyBcbiAgfVxuXG4gIGdvVG9GaXJzdFNsaWRlKCkge1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldygwKTtcbiAgfVxuXG4gIGdvVG9TbGlkZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBNYXRoLm1pbihpbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZSwgdGhpcy5pdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyhpbmRleCk7XG4gICAgdGhpcy5kb3RDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICBwcmV2U2xpZGUoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgXG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleC0tO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTdGVwSW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IHRvdGFsU3RlcHMgLSAxO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBNYXRoLm1pbih0aGlzLmN1cnJlbnRTdGVwSW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGUsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB0aGlzLnNjcm9sbEFjdGl2ZURvdEludG9WaWV3KHRoaXMuY3VycmVudFN0ZXBJbmRleCk7XG4gICAgdGhpcy5wcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgfVxuXG4gIG5leHRTbGlkZSgpIHtcbiAgICBjb25zdCB0b3RhbFN0ZXBzID0gTWF0aC5jZWlsKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcEluZGV4ID49IHRvdGFsU3RlcHMgLSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXgrKztcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gTWF0aC5taW4odGhpcy5jdXJyZW50U3RlcEluZGV4ICogdGhpcy5pdGVtc1BlclNsaWRlLCB0aGlzLml0ZW1zLmxlbmd0aCAtIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyh0aGlzLmN1cnJlbnRTdGVwSW5kZXgpO1xuICAgIHRoaXMubmV4dENsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgfVxuXG4gIHVwZGF0ZU9mZnNldCgpIHtcbiAgICB0aGlzLm9mZnNldCA9IC0xMDAgKiAodGhpcy5jdXJyZW50SW5kZXggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIFxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nICYmIHRoaXMuc2xpZGVzQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBcbiAgICAgICAgJ3RyYW5zZm9ybScsIFxuICAgICAgICBgdHJhbnNsYXRlWCgke3RoaXMub2Zmc2V0fSUpYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbEFjdGl2ZURvdEludG9WaWV3KGluZGV4OiBudW1iZXIpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRvdHNDb250YWluZXIgPSB0aGlzLmRvdHNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWRvdHNDb250YWluZXIpIHJldHVybjtcblxuICAgICAgY29uc3QgZG90cyA9IGRvdHNDb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZG90Jyk7XG4gICAgICBpZiAoIWRvdHMgfHwgIWRvdHNbaW5kZXhdKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFjdGl2ZURvdCA9IGRvdHNbaW5kZXhdO1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBkb3RzQ29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgZG90V2lkdGggPSBhY3RpdmVEb3Qub2Zmc2V0V2lkdGggKyAxMDtcbiAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gZG90V2lkdGggKiBpbmRleCAtIGNvbnRhaW5lcldpZHRoIC8gMiArIGRvdFdpZHRoIC8gMjtcblxuICAgICAgZG90c0NvbnRhaW5lci5zY3JvbGxUbyh7XG4gICAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIHNjcm9sbFBvc2l0aW9uKSxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLWNvbnRhaW5lclwiPlxuICA8ZGl2IFxuICAgIGNsYXNzPVwiYy1jYXJvdXNlbC1zbGlkZXNcIiBcbiAgICAjc2xpZGVzQ29udGFpbmVyXG4gICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJyUpJ1wiIFxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXG4gICAgKG1vdXNlbW92ZSk9XCJvbk1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKCRldmVudClcIlxuICAgICh0b3VjaHN0YXJ0KT1cIm9uVG91Y2hTdGFydCgkZXZlbnQpXCIgXG4gICAgKHRvdWNobW92ZSk9XCJvblRvdWNoTW92ZSgkZXZlbnQpXCIgXG4gICAgKHRvdWNoZW5kKT1cIm9uVG91Y2hFbmQoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImMtY2Fyb3VzZWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBbaGlkZGVuXT1cInJlbW92ZUFycm93c1wiIGNsYXNzPVwiYy1jYXJvdXNlbC1uYXYgcHJldlwiIHRpdGxlPVwiU2xpZGUgYW50ZXJpb3JcIiBhcmlhLWxhYmVsPVwiU2xpZGUgYW50ZXJpb3JcIiAoY2xpY2spPVwicHJldlNsaWRlKClcIj5cbiAgICAgIDxsaWItZWx1eC1pY29uIFtpY29uXT1cIidDaGV2cm9uX0xlZnQuc3ZnJ1wiIFtzaXplXT1cIicxNidcIiBbc2l6ZVR5cGVdPVwiJ3B4J1wiIFtjb2xvcl09XCInIzAyMEYyRSdcIj48L2xpYi1lbHV4LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IFtoaWRkZW5dPVwicmVtb3ZlRG90c1wiIGNsYXNzPVwiYy1jYXJvdXNlbC1kb3RzXCIgI2RvdHNDb250YWluZXI+XG4gICAgICA8c3BhblxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkb3RcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgaW5kZXggb2YgZ2V0U3RlcEluZGV4Q291bnQoKVwiXG4gICAgICAgIChjbGljayk9XCJnb1RvU2xpZGUoaW5kZXgpXCJcbiAgICAgICAgKGtleXVwKT1cImdvVG9TbGlkZShpbmRleClcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImluZGV4ID09PSBnZXRDdXJyZW50U3RlcEluZGV4KClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInRydWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwYWdpbmEnICsgKGluZGV4ICsgMSlcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvbiBbaGlkZGVuXT1cInJlbW92ZUFycm93c1wiIGNsYXNzPVwiYy1jYXJvdXNlbC1uYXYgbmV4dFwiIHRpdGxlPVwiUHLDs3hpbW8gc2xpZGVcIiBhcmlhLWxhYmVsPVwiUHLDs3hpbW8gc2xpZGVcIiAoY2xpY2spPVwibmV4dFNsaWRlKClcIj5cbiAgICAgIDxsaWItZWx1eC1pY29uIFtpY29uXT1cIidDaGV2cm9uX1JpZ2h0LnN2ZydcIiBbc2l6ZV09XCInMTYnXCIgW3NpemVUeXBlXT1cIidweCdcIiBbY29sb3JdPVwiJyMwMjBGMkUnXCI+PC9saWItZWx1eC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|