@elxjs/ui 0.0.177 → 0.0.179
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/esm2022/lib/components/carousel/carousel.component.mjs +177 -23
- package/esm2022/lib/components/carousel-fixed/carousel-fixed.component.mjs +313 -0
- package/esm2022/lib/components/index.mjs +2 -1
- package/fesm2022/elxjs-ui.mjs +487 -24
- package/fesm2022/elxjs-ui.mjs.map +1 -1
- package/lib/components/carousel/carousel.component.d.ts +29 -5
- package/lib/components/carousel-fixed/carousel-fixed.component.d.ts +55 -0
- package/lib/components/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -14,21 +14,59 @@ export class EluxCarouselComponent {
|
|
|
14
14
|
this.nextClickEventEmitter = new EventEmitter();
|
|
15
15
|
this.dotClickEventEmitter = new EventEmitter();
|
|
16
16
|
this.currentIndex = 0;
|
|
17
|
-
this.currentStepIndex = 0;
|
|
17
|
+
this.currentStepIndex = 0;
|
|
18
18
|
this.offset = 0;
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
19
|
+
this.isDragging = false;
|
|
20
|
+
this.startX = 0;
|
|
21
|
+
this.currentX = 0;
|
|
22
|
+
this.initialOffset = 0;
|
|
23
|
+
this.dragOffset = 0;
|
|
24
|
+
this.containerWidth = 0;
|
|
25
|
+
this.itemWidth = 0;
|
|
26
|
+
this.maxOffset = 0;
|
|
27
|
+
this.minOffset = 0;
|
|
28
|
+
this.animationId = null;
|
|
29
|
+
this.velocity = 0;
|
|
30
|
+
this.lastMoveTime = 0;
|
|
31
|
+
this.lastMoveX = 0;
|
|
21
32
|
}
|
|
22
33
|
ngAfterContentInit() {
|
|
34
|
+
this.calculateDimensions();
|
|
23
35
|
this.setItemWidths();
|
|
36
|
+
this.updateLimits();
|
|
24
37
|
if (this.autoPlayInterval) {
|
|
25
38
|
this.startAutoPlay();
|
|
26
39
|
}
|
|
27
40
|
this.items.changes.subscribe(() => {
|
|
41
|
+
this.calculateDimensions();
|
|
28
42
|
this.setItemWidths();
|
|
29
|
-
this.
|
|
43
|
+
this.updateLimits();
|
|
30
44
|
this.goToFirstSlide();
|
|
31
45
|
});
|
|
46
|
+
// Listen for window resize to recalculate dimensions
|
|
47
|
+
window.addEventListener('resize', () => this.onResize());
|
|
48
|
+
}
|
|
49
|
+
ngOnDestroy() {
|
|
50
|
+
this.stopAutoPlay();
|
|
51
|
+
if (this.animationId) {
|
|
52
|
+
cancelAnimationFrame(this.animationId);
|
|
53
|
+
}
|
|
54
|
+
window.removeEventListener('resize', () => this.onResize());
|
|
55
|
+
}
|
|
56
|
+
calculateDimensions() {
|
|
57
|
+
if (this.slidesContainer) {
|
|
58
|
+
this.containerWidth = this.slidesContainer.nativeElement.offsetWidth;
|
|
59
|
+
this.itemWidth = this.containerWidth / this.itemsPerSlide;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
updateLimits() {
|
|
63
|
+
const totalSteps = Math.ceil(this.items.length / this.itemsPerSlide);
|
|
64
|
+
this.maxOffset = 0;
|
|
65
|
+
this.minOffset = -((totalSteps - 1) * 100);
|
|
66
|
+
}
|
|
67
|
+
onResize() {
|
|
68
|
+
this.calculateDimensions();
|
|
69
|
+
this.updateOffset();
|
|
32
70
|
}
|
|
33
71
|
setItemWidths() {
|
|
34
72
|
this.items.forEach((item) => {
|
|
@@ -37,9 +75,11 @@ export class EluxCarouselComponent {
|
|
|
37
75
|
});
|
|
38
76
|
}
|
|
39
77
|
startAutoPlay() {
|
|
40
|
-
this.stopAutoPlay();
|
|
78
|
+
this.stopAutoPlay();
|
|
41
79
|
this.autoPlayTimer = setInterval(() => {
|
|
42
|
-
this.
|
|
80
|
+
if (!this.isDragging) {
|
|
81
|
+
this.nextSlide();
|
|
82
|
+
}
|
|
43
83
|
}, (this.autoPlayInterval || 0) * 1000);
|
|
44
84
|
}
|
|
45
85
|
stopAutoPlay() {
|
|
@@ -48,23 +88,126 @@ export class EluxCarouselComponent {
|
|
|
48
88
|
this.autoPlayTimer = null;
|
|
49
89
|
}
|
|
50
90
|
}
|
|
91
|
+
// Mouse events
|
|
92
|
+
onMouseDown(event) {
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
this.startDrag(event.clientX);
|
|
95
|
+
}
|
|
96
|
+
onMouseMove(event) {
|
|
97
|
+
if (this.isDragging) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
this.updateDrag(event.clientX);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
onMouseUp(event) {
|
|
103
|
+
if (this.isDragging) {
|
|
104
|
+
this.endDrag();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
onMouseLeave(event) {
|
|
108
|
+
if (this.isDragging) {
|
|
109
|
+
this.endDrag();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Touch events
|
|
51
113
|
onTouchStart(event) {
|
|
52
|
-
|
|
53
|
-
this.
|
|
114
|
+
event.preventDefault();
|
|
115
|
+
this.startDrag(event.touches[0].clientX);
|
|
54
116
|
}
|
|
55
117
|
onTouchMove(event) {
|
|
56
|
-
this.
|
|
118
|
+
if (this.isDragging) {
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
this.updateDrag(event.touches[0].clientX);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
onTouchEnd(event) {
|
|
124
|
+
if (this.isDragging) {
|
|
125
|
+
this.endDrag();
|
|
126
|
+
}
|
|
57
127
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
128
|
+
startDrag(clientX) {
|
|
129
|
+
this.isDragging = true;
|
|
130
|
+
this.startX = clientX;
|
|
131
|
+
this.currentX = clientX;
|
|
132
|
+
this.initialOffset = this.offset;
|
|
133
|
+
this.dragOffset = 0;
|
|
134
|
+
this.velocity = 0;
|
|
135
|
+
this.lastMoveTime = Date.now();
|
|
136
|
+
this.lastMoveX = clientX;
|
|
137
|
+
this.calculateDimensions();
|
|
138
|
+
this.stopAutoPlay();
|
|
139
|
+
// Disable CSS transitions during drag
|
|
140
|
+
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'none');
|
|
141
|
+
}
|
|
142
|
+
updateDrag(clientX) {
|
|
143
|
+
if (!this.isDragging)
|
|
144
|
+
return;
|
|
145
|
+
this.currentX = clientX;
|
|
146
|
+
const deltaX = this.currentX - this.startX;
|
|
147
|
+
// Calculate velocity for momentum
|
|
148
|
+
const now = Date.now();
|
|
149
|
+
const timeDelta = now - this.lastMoveTime;
|
|
150
|
+
if (timeDelta > 0) {
|
|
151
|
+
this.velocity = (clientX - this.lastMoveX) / timeDelta;
|
|
152
|
+
}
|
|
153
|
+
this.lastMoveTime = now;
|
|
154
|
+
this.lastMoveX = clientX;
|
|
155
|
+
// Convert pixel movement to percentage
|
|
156
|
+
const dragPercentage = (deltaX / this.containerWidth) * 100;
|
|
157
|
+
// Apply resistance at boundaries
|
|
158
|
+
let resistedDragPercentage = dragPercentage;
|
|
159
|
+
const potentialOffset = this.initialOffset + dragPercentage;
|
|
160
|
+
if (potentialOffset > this.maxOffset) {
|
|
161
|
+
const overDrag = potentialOffset - this.maxOffset;
|
|
162
|
+
resistedDragPercentage = dragPercentage - (overDrag * 0.3);
|
|
163
|
+
}
|
|
164
|
+
else if (potentialOffset < this.minOffset) {
|
|
165
|
+
const overDrag = this.minOffset - potentialOffset;
|
|
166
|
+
resistedDragPercentage = dragPercentage + (overDrag * 0.3);
|
|
167
|
+
}
|
|
168
|
+
this.dragOffset = resistedDragPercentage;
|
|
169
|
+
this.updateDragPosition();
|
|
170
|
+
}
|
|
171
|
+
updateDragPosition() {
|
|
172
|
+
const newOffset = this.initialOffset + this.dragOffset;
|
|
173
|
+
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transform', `translateX(${newOffset}%)`);
|
|
174
|
+
}
|
|
175
|
+
endDrag() {
|
|
176
|
+
if (!this.isDragging)
|
|
62
177
|
return;
|
|
63
|
-
|
|
64
|
-
|
|
178
|
+
this.isDragging = false;
|
|
179
|
+
// Re-enable CSS transitions
|
|
180
|
+
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.4s ease-out');
|
|
181
|
+
const finalOffset = this.initialOffset + this.dragOffset;
|
|
182
|
+
const threshold = 50; // Minimum drag distance in pixels to trigger slide change
|
|
183
|
+
const dragDistance = Math.abs(this.currentX - this.startX);
|
|
184
|
+
// Check for momentum (velocity-based slide change)
|
|
185
|
+
const momentumThreshold = 0.5;
|
|
186
|
+
const hasSignificantVelocity = Math.abs(this.velocity) > momentumThreshold;
|
|
187
|
+
if (dragDistance > threshold || hasSignificantVelocity) {
|
|
188
|
+
if (this.dragOffset > 0 || (hasSignificantVelocity && this.velocity > 0)) {
|
|
189
|
+
// Dragged right or has positive velocity - go to previous slide
|
|
190
|
+
this.prevSlide();
|
|
191
|
+
}
|
|
192
|
+
else if (this.dragOffset < 0 || (hasSignificantVelocity && this.velocity < 0)) {
|
|
193
|
+
// Dragged left or has negative velocity - go to next slide
|
|
194
|
+
this.nextSlide();
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// Small drag, snap back to current position
|
|
198
|
+
this.updateOffset();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
// Small drag, snap back to current position
|
|
203
|
+
this.updateOffset();
|
|
65
204
|
}
|
|
66
|
-
|
|
67
|
-
|
|
205
|
+
// Reset drag state
|
|
206
|
+
this.dragOffset = 0;
|
|
207
|
+
this.velocity = 0;
|
|
208
|
+
// Restart autoplay if it was enabled
|
|
209
|
+
if (this.autoPlayInterval) {
|
|
210
|
+
setTimeout(() => this.startAutoPlay(), 1000);
|
|
68
211
|
}
|
|
69
212
|
}
|
|
70
213
|
getStepIndexCount() {
|
|
@@ -88,13 +231,18 @@ export class EluxCarouselComponent {
|
|
|
88
231
|
this.dotClickEventEmitter.emit();
|
|
89
232
|
}
|
|
90
233
|
prevSlide() {
|
|
234
|
+
const totalSteps = Math.ceil(this.items.length / this.itemsPerSlide);
|
|
91
235
|
if (this.currentStepIndex > 0) {
|
|
92
236
|
this.currentStepIndex--;
|
|
93
237
|
this.currentIndex = this.currentStepIndex * this.itemsPerSlide;
|
|
94
|
-
this.updateOffset();
|
|
95
|
-
this.scrollActiveDotIntoView(this.currentStepIndex);
|
|
96
|
-
this.previousClickEventEmitter.emit();
|
|
97
238
|
}
|
|
239
|
+
else {
|
|
240
|
+
this.currentStepIndex = totalSteps - 1;
|
|
241
|
+
this.currentIndex = Math.min(this.currentStepIndex * this.itemsPerSlide, this.items.length - this.itemsPerSlide);
|
|
242
|
+
}
|
|
243
|
+
this.updateOffset();
|
|
244
|
+
this.scrollActiveDotIntoView(this.currentStepIndex);
|
|
245
|
+
this.previousClickEventEmitter.emit();
|
|
98
246
|
}
|
|
99
247
|
nextSlide() {
|
|
100
248
|
const totalSteps = Math.ceil(this.items.length / this.itemsPerSlide);
|
|
@@ -112,6 +260,9 @@ export class EluxCarouselComponent {
|
|
|
112
260
|
}
|
|
113
261
|
updateOffset() {
|
|
114
262
|
this.offset = -100 * (this.currentIndex / this.itemsPerSlide);
|
|
263
|
+
if (!this.isDragging && this.slidesContainer) {
|
|
264
|
+
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transform', `translateX(${this.offset}%)`);
|
|
265
|
+
}
|
|
115
266
|
}
|
|
116
267
|
scrollActiveDotIntoView(index) {
|
|
117
268
|
setTimeout(() => {
|
|
@@ -132,17 +283,20 @@ export class EluxCarouselComponent {
|
|
|
132
283
|
});
|
|
133
284
|
}
|
|
134
285
|
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 }); }
|
|
135
|
-
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 }], ngImport: i0, template: "<div class=\"c-carousel-container\">\n <div class=\"c-carousel-slides\" [style.transform]=\"'translateX(' + offset + '%)'\" (touchstart)=\"onTouchStart($event)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd()\">\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-
|
|
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"] }] }); }
|
|
136
287
|
}
|
|
137
288
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EluxCarouselComponent, decorators: [{
|
|
138
289
|
type: Component,
|
|
139
|
-
args: [{ standalone: true, selector: 'lib-elux-carousel', imports: [CommonModule, EluxIcon], template: "<div class=\"c-carousel-container\">\n <div class=\"c-carousel-slides\" [style.transform]=\"'translateX(' + offset + '%)'\" (touchstart)=\"onTouchStart($event)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd()\">\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-
|
|
290
|
+
args: [{ standalone: true, selector: 'lib-elux-carousel', imports: [CommonModule, EluxIcon], 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"] }]
|
|
140
291
|
}], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { items: [{
|
|
141
292
|
type: ContentChildren,
|
|
142
293
|
args: ['carouselItem', { read: ElementRef }]
|
|
143
294
|
}], dotsContainer: [{
|
|
144
295
|
type: ViewChild,
|
|
145
296
|
args: ['dotsContainer']
|
|
297
|
+
}], slidesContainer: [{
|
|
298
|
+
type: ViewChild,
|
|
299
|
+
args: ['slidesContainer']
|
|
146
300
|
}], itemsPerSlide: [{
|
|
147
301
|
type: Input
|
|
148
302
|
}], removeArrows: [{
|
|
@@ -158,4 +312,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
158
312
|
}], dotClickEventEmitter: [{
|
|
159
313
|
type: Output
|
|
160
314
|
}] } });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQXVDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFjbkMsTUFBTSxPQUFPLHFCQUFxQjtJQXFCaEMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWpCOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRXRDLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDdEQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNsRCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBRTNELGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtRQUN0RSxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRUgsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsY0FBUyxHQUFHLENBQUMsQ0FBQztJQUdvQixDQUFD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QyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzVDLE1BQU0sY0FBYyxHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUcsY0FBYyxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBRTVFLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUM7Z0JBQ2pDLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F0SlUscUJBQXFCO21HQUFyQixxQkFBcUIsd2FBQ1MsVUFBVSw2SUNqQnJELG0yQ0E2QkEsaTNGRGZZLFlBQVksNEpBQUUsUUFBUTs7NEZBRXJCLHFCQUFxQjtrQkFQakMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sbUJBQW1CLFdBR3BCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQzs4RUFHc0IsS0FBSztzQkFBM0QsZUFBZTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN6QixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRWpCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVsdXhJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RJdGVtID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGltYWdlOiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdsaWItZWx1eC1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhcm91c2VsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEVsdXhJY29uXSxcbn0pXG5leHBvcnQgY2xhc3MgRWx1eENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBDb250ZW50Q2hpbGRyZW4oJ2Nhcm91c2VsSXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpdGVtcyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnZG90c0NvbnRhaW5lcicpIGRvdHNDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGl0ZW1zUGVyU2xpZGU6IG51bWJlciA9IDQ7XG4gIEBJbnB1dCgpIHJlbW92ZUFycm93czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZW1vdmVEb3RzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9QbGF5SW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIEBPdXRwdXQoKSBwcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG5leHRDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkb3RDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7ICBcblxuICBjdXJyZW50SW5kZXggPSAwO1xuICBjdXJyZW50U3RlcEluZGV4ID0gMDsgLy8gU2VwYXJhdGUgaW5kZXggZm9yIHRyYWNraW5nIGN1cnJlbnQgc3RlcC9wYWdlXG4gIG9mZnNldCA9IDA7XG5cbiAgcHJpdmF0ZSB0b3VjaFN0YXJ0WCA9IDA7XG4gIHByaXZhdGUgdG91Y2hFbmRYID0gMDtcbiAgcHJpdmF0ZSBhdXRvUGxheVRpbWVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcblxuICAgIGlmICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RhcnRBdXRvUGxheSgpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRJdGVtV2lkdGhzKCk7XG4gICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgdGhpcy5nb1RvRmlyc3RTbGlkZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJdGVtV2lkdGhzKCkge1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgbWluV2lkdGggPSBgY2FsYygxMDAlIC8gJHt0aGlzLml0ZW1zUGVyU2xpZGV9KWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGl0ZW0ubmF0aXZlRWxlbWVudCwgJ21pbldpZHRoJywgbWluV2lkdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhcnRBdXRvUGxheSgpIHtcbiAgICB0aGlzLnN0b3BBdXRvUGxheSgpOyAvLyBHYXJhbnRlIHF1ZSBuw6NvIGjDoSBpbnRlcnZhbG9zIGF0aXZvc1xuICAgIHRoaXMuYXV0b1BsYXlUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubmV4dFNsaWRlKCk7XG4gICAgfSwgKHRoaXMuYXV0b1BsYXlJbnRlcnZhbCB8fCAwKSAqIDEwMDApO1xuICB9XG5cbiAgc3RvcEF1dG9QbGF5KCkge1xuICAgIGlmICh0aGlzLmF1dG9QbGF5VGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvUGxheVRpbWVyKTtcbiAgICAgIHRoaXMuYXV0b1BsYXlUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaFN0YXJ0KGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgdGhpcy50b3VjaFN0YXJ0WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB0aGlzLnRvdWNoRW5kWCA9IHRoaXMudG91Y2hTdGFydFg7IC8vIHJlc2V0YSBwYXJhIGV2aXRhciBzd2lwZSBmYWxzb1xuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICB0aGlzLnRvdWNoRW5kWCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgfVxuXG4gIG9uVG91Y2hFbmQoKSB7XG4gICAgY29uc3Qgc3dpcGVEaXN0YW5jZSA9IHRoaXMudG91Y2hFbmRYIC0gdGhpcy50b3VjaFN0YXJ0WDtcblxuICAgIC8vIFPDsyBjb25zaWRlcmEgc3dpcGUgc2UgbW92aW1lbnRvIGZvciBtYWlvciBxdWUgMnB4XG4gICAgaWYgKE1hdGguYWJzKHN3aXBlRGlzdGFuY2UpIDwgMikgcmV0dXJuO1xuXG4gICAgaWYgKHN3aXBlRGlzdGFuY2UgPiAwKSB7XG4gICAgICB0aGlzLnByZXZTbGlkZSgpO1xuICAgIH0gZWxzZSBpZiAoc3dpcGVEaXN0YW5jZSA8IDApIHtcbiAgICAgIHRoaXMubmV4dFNsaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RlcEluZGV4Q291bnQoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbFN0ZXBzIH0sIChfLCBpKSA9PiBpKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTdGVwSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcEluZGV4OyBcbiAgfVxuXG4gIGdvVG9GaXJzdFNsaWRlKCkge1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldygwKTtcbiAgfVxuXG4gIGdvVG9TbGlkZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBNYXRoLm1pbihpbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZSwgdGhpcy5pdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyhpbmRleCk7XG4gICAgdGhpcy5kb3RDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICBwcmV2U2xpZGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleC0tO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTdGVwSW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGU7XG4gICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyh0aGlzLmN1cnJlbnRTdGVwSW5kZXgpO1xuICAgICAgdGhpcy5wcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBuZXh0U2xpZGUoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA+PSB0b3RhbFN0ZXBzIC0gMSkge1xuICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gMDtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4Kys7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IE1hdGgubWluKHRoaXMuY3VycmVudFN0ZXBJbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZSwgdGhpcy5pdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcodGhpcy5jdXJyZW50U3RlcEluZGV4KTtcbiAgICB0aGlzLm5leHRDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICB1cGRhdGVPZmZzZXQoKSB7XG4gICAgdGhpcy5vZmZzZXQgPSAtMTAwICogKHRoaXMuY3VycmVudEluZGV4IC8gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcoaW5kZXg6IG51bWJlcikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZG90c0NvbnRhaW5lciA9IHRoaXMuZG90c0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghZG90c0NvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBkb3RzID0gZG90c0NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkb3QnKTtcbiAgICAgIGlmICghZG90cyB8fCAhZG90c1tpbmRleF0pIHJldHVybjtcblxuICAgICAgY29uc3QgYWN0aXZlRG90ID0gZG90c1tpbmRleF07XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGRvdHNDb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBkb3RXaWR0aCA9IGFjdGl2ZURvdC5vZmZzZXRXaWR0aCArIDEwO1xuICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBkb3RXaWR0aCAqIGluZGV4IC0gY29udGFpbmVyV2lkdGggLyAyICsgZG90V2lkdGggLyAyO1xuXG4gICAgICBkb3RzQ29udGFpbmVyLnNjcm9sbFRvKHtcbiAgICAgICAgbGVmdDogTWF0aC5tYXgoMCwgc2Nyb2xsUG9zaXRpb24pLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImMtY2Fyb3VzZWwtY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLXNsaWRlc1wiIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICclKSdcIiAodG91Y2hzdGFydCk9XCJvblRvdWNoU3RhcnQoJGV2ZW50KVwiICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiICh0b3VjaGVuZCk9XCJvblRvdWNoRW5kKClcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLWZvb3RlclwiPlxuICAgIDxidXR0b24gW2hpZGRlbl09XCJyZW1vdmVBcnJvd3NcIiBjbGFzcz1cImMtY2Fyb3VzZWwtbmF2IHByZXZcIiB0aXRsZT1cIlNsaWRlIGFudGVyaW9yXCIgYXJpYS1sYWJlbD1cIlNsaWRlIGFudGVyaW9yXCIgKGNsaWNrKT1cInByZXZTbGlkZSgpXCI+XG4gICAgICA8bGliLWVsdXgtaWNvbiBbaWNvbl09XCInQ2hldnJvbl9MZWZ0LnN2ZydcIiBbc2l6ZV09XCInMTYnXCIgW3NpemVUeXBlXT1cIidweCdcIiBbY29sb3JdPVwiJyMwMjBGMkUnXCI+PC9saWItZWx1eC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBbaGlkZGVuXT1cInJlbW92ZURvdHNcIiBjbGFzcz1cImMtY2Fyb3VzZWwtZG90c1wiICNkb3RzQ29udGFpbmVyPlxuICAgICAgPHNwYW5cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiZG90XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGluZGV4IG9mIGdldFN0ZXBJbmRleENvdW50KClcIlxuICAgICAgICAoY2xpY2spPVwiZ29Ub1NsaWRlKGluZGV4KVwiXG4gICAgICAgIChrZXl1cCk9XCJnb1RvU2xpZGUoaW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpbmRleCA9PT0gZ2V0Q3VycmVudFN0ZXBJbmRleCgpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGFnaW5hJyArIChpbmRleCArIDEpXCJcbiAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gW2hpZGRlbl09XCJyZW1vdmVBcnJvd3NcIiBjbGFzcz1cImMtY2Fyb3VzZWwtbmF2IG5leHRcIiB0aXRsZT1cIlByw7N4aW1vIHNsaWRlXCIgYXJpYS1sYWJlbD1cIlByw7N4aW1vIHNsaWRlXCIgKGNsaWNrKT1cIm5leHRTbGlkZSgpXCI+XG4gICAgICA8bGliLWVsdXgtaWNvbiBbaWNvbl09XCInQ2hldnJvbl9SaWdodC5zdmcnXCIgW3NpemVdPVwiJzE2J1wiIFtzaXplVHlwZV09XCIncHgnXCIgW2NvbG9yXT1cIicjMDIwRjJFJ1wiPjwvbGliLWVsdXgtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
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=
|