simpo-component-library 3.6.917 → 3.6.919
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/directive/background-directive.mjs +16 -5
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +5 -60
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +58 -60
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +1 -56
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +5 -3
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +2 -2
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +2 -2
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +2 -2
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +2 -2
- package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +2 -2
- package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +2 -2
- package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +2 -2
- package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +2 -2
- package/esm2022/lib/sections/footer-section/footer-section.component.mjs +2 -2
- package/esm2022/lib/sections/header-section/header-section.component.mjs +2 -2
- package/esm2022/lib/sections/header-text/header-text.component.mjs +2 -2
- package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +2 -2
- package/esm2022/lib/sections/image-section/image-section.component.mjs +2 -2
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +18 -8
- package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +2 -2
- package/esm2022/lib/sections/new-services/new-services.component.mjs +2 -2
- package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +2 -2
- package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +2 -2
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +2 -2
- package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +2 -2
- package/esm2022/lib/sections/service-section/service-section.component.mjs +2 -2
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +2 -2
- package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +2 -2
- package/esm2022/lib/sections/text-section/text-section.component.mjs +2 -2
- package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
- package/esm2022/lib/services/rest.service.mjs +4 -17
- package/esm2022/lib/tokens/api-token.mjs +2 -2
- package/fesm2022/simpo-component-library.mjs +130 -233
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/directive/background-directive.d.ts +2 -1
- package/lib/ecommerce/sections/cart/cart.component.d.ts +0 -1
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +0 -1
- package/lib/elements/simpo-button/simpo-button.component.d.ts +2 -1
- package/lib/sections/logo-showcase/logo-showcase.component.d.ts +4 -1
- package/lib/services/rest.service.d.ts +1 -5
- package/lib/tokens/api-token.d.ts +0 -1
- package/package.json +1 -1
- package/simpo-component-library-3.6.919.tgz +0 -0
- package/simpo-component-library-3.6.917.tgz +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
1
|
+
import { Directive, Inject, Input, PLATFORM_ID } from '@angular/core';
|
|
2
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
3
|
import { GradientDirection } from '../styles/index';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "../services/events.service";
|
|
5
6
|
export class BackgroundDirective {
|
|
6
|
-
constructor(el, eventService) {
|
|
7
|
+
constructor(el, eventService, platformId) {
|
|
7
8
|
this.el = el;
|
|
8
9
|
this.eventService = eventService;
|
|
10
|
+
this.platformId = platformId;
|
|
9
11
|
this.scrollValue = 0;
|
|
10
12
|
// Ensure the host element is positioned so the absolute video fills it correctly
|
|
11
13
|
this.el.nativeElement.style.setProperty('position', 'relative');
|
|
@@ -109,6 +111,9 @@ export class BackgroundDirective {
|
|
|
109
111
|
}
|
|
110
112
|
/** Removes any existing background video element from the host */
|
|
111
113
|
removeVideo() {
|
|
114
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
112
117
|
const existing = this.el.nativeElement.querySelector(`#${this.videoElementId}`);
|
|
113
118
|
if (existing) {
|
|
114
119
|
existing.pause?.();
|
|
@@ -117,6 +122,9 @@ export class BackgroundDirective {
|
|
|
117
122
|
}
|
|
118
123
|
/** Creates and appends a full-cover autoplay video as the background */
|
|
119
124
|
applyVideo(src) {
|
|
125
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
120
128
|
// Remove stale video first (prevents duplicates)
|
|
121
129
|
this.removeVideo();
|
|
122
130
|
// Clear any background-image that may still be set
|
|
@@ -170,7 +178,7 @@ export class BackgroundDirective {
|
|
|
170
178
|
// For gradients, rgba(), or anything non-hex — default to white
|
|
171
179
|
return '#ffffff';
|
|
172
180
|
}
|
|
173
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BackgroundDirective, deps: [{ token: i0.ElementRef }, { token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
181
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BackgroundDirective, deps: [{ token: i0.ElementRef }, { token: i1.EventsService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
174
182
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: BackgroundDirective, isStandalone: true, selector: "[simpoBackground]", inputs: { simpoBackground: "simpoBackground", scrollValue: "scrollValue" }, usesOnChanges: true, ngImport: i0 }); }
|
|
175
183
|
}
|
|
176
184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BackgroundDirective, decorators: [{
|
|
@@ -179,11 +187,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
179
187
|
selector: '[simpoBackground]',
|
|
180
188
|
standalone: true,
|
|
181
189
|
}]
|
|
182
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.EventsService }
|
|
190
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.EventsService }, { type: Object, decorators: [{
|
|
191
|
+
type: Inject,
|
|
192
|
+
args: [PLATFORM_ID]
|
|
193
|
+
}] }], propDecorators: { simpoBackground: [{
|
|
183
194
|
type: Input,
|
|
184
195
|
args: ['simpoBackground']
|
|
185
196
|
}], scrollValue: [{
|
|
186
197
|
type: Input,
|
|
187
198
|
args: ['scrollValue']
|
|
188
199
|
}] } });
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFJMUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQU1wRCxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLFlBQ1UsRUFBYyxFQUNkLFlBQTJCO1FBRDNCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQU5mLGdCQUFXLEdBQVksQ0FBQyxDQUFDO1FBTzdDLGlGQUFpRjtRQUNqRixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVoRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUN6RSxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNsRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFN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QUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4RCxPQUFPLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hELENBQUM7UUFDRCxnRUFBZ0U7UUFDaEUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzsrR0E3TVUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzJHQUUyQixlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDRixXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJBQ0tHUk9VTkRfVFlQRSB9IGZyb20gJy4uL3N0eWxlcy90eXBlcyc7XHJcbmltcG9ydCB7IEdyYWRpZW50RGlyZWN0aW9uIH0gZnJvbSAnLi4vc3R5bGVzL2luZGV4JztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NpbXBvQmFja2dyb3VuZF0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnc2ltcG9CYWNrZ3JvdW5kJykgc2ltcG9CYWNrZ3JvdW5kPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIEBJbnB1dCgnc2Nyb2xsVmFsdWUnKSBzY3JvbGxWYWx1ZT86IG51bWJlciA9IDA7XHJcblxyXG4gIGV2ZW50RW1taXR0ZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UpIHtcclxuICAgIC8vIEVuc3VyZSB0aGUgaG9zdCBlbGVtZW50IGlzIHBvc2l0aW9uZWQgc28gdGhlIGFic29sdXRlIHZpZGVvIGZpbGxzIGl0IGNvcnJlY3RseVxyXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xyXG5cclxuICAgIGlmICh0aGlzLmV2ZW50RW1taXR0ZXIpIHtcclxuICAgICAgdGhpcy5ldmVudEVtbWl0dGVyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ldmVudEVtbWl0dGVyID0gdGhpcy5ldmVudFNlcnZpY2UuYmFja2dyb3VuZEltYWdlQ2hhbmdlQ2hlY2suc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkID09PSByZXMuaWQgfHwgcmVzLmdsb2JhbFRoZW1lQ2hhbmdlKSB7XHJcbiAgICAgICAgICBpZiAocmVzLmRhdGE/LnNob3dJbWFnZSAmJiB0aGlzPy5zY3JvbGxWYWx1ZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YT8uaW1hZ2U/LmluY2x1ZGVzKCcubXA0JykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFwcGx5VmlkZW8ocmVzLmRhdGEuaW1hZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJdCdzIGFuIGltYWdlIOKAlCByZW1vdmUgYW55IGV4aXN0aW5nIHZpZGVvXHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVmlkZW8oKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJyxcclxuICAgICAgICAgICAgICBgdXJsKCR7cmVzLmRhdGEuaW1hZ2V9KWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcclxuICAgICAgICAgICAgICBgJHtyZXMuZGF0YS5wb3NpdGlvbj8ueH0lICR7cmVzLmRhdGEucG9zaXRpb24/Lnl9JWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXJlcGVhdCcsIGBuby1yZXBlYXRgKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXNpemUnLCBgY292ZXJgKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdjb2xvcicsIHRoaXMuZ2V0VGV4dENvbG9yKHJlcy5kYXRhPy5jb2xvcikpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVWaWRlbygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaW1wb0JhY2tncm91bmQ/LmJhY2tncm91bmRUeXBlID09PSAoJ0dyYWRpZW50JyBhcyBCQUNLR1JPVU5EX1RZUEUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gR3JhZGllbnREaXJlY3Rpb25bdGhpcy5zaW1wb0JhY2tncm91bmQuYmFja2dyb3VuZEdyYWRpZW50RGlyZWN0aW9uIGFzIHVua25vd24gYXMga2V5b2YgdHlwZW9mIEdyYWRpZW50RGlyZWN0aW9uIHx8IEdyYWRpZW50RGlyZWN0aW9uLkRPV05dO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50Q29sb3IgPSBkaXJlY3Rpb24gIT0gR3JhZGllbnREaXJlY3Rpb24uRE9XTlxyXG4gICAgICAgICAgICAgICAgPyBgbGluZWFyLWdyYWRpZW50KCR7ZGlyZWN0aW9ufSwke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLmNvbG9yfSwke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLnNlY29uZGFyeUNvbG9yfSlgXHJcbiAgICAgICAgICAgICAgICA6IGBsaW5lYXItZ3JhZGllbnQoJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5jb2xvcn0sJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5zZWNvbmRhcnlDb2xvcn0pYDtcclxuICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBncmFkaWVudENvbG9yKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2NvbG9yJywgdGhpcy5nZXRUZXh0Q29sb3IodGhpcy5zaW1wb0JhY2tncm91bmQuY29sb3IpKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicsIHJlcy5kYXRhPy5jb2xvcik7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1pbWFnZScsIGBgKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXNpemUnLCAnY292ZXInKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXJlcGVhdCcsICduby1yZXBlYXQnKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywgJ2NlbnRlcicpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2NvbG9yJywgdGhpcy5nZXRUZXh0Q29sb3IocmVzLmRhdGE/LmNvbG9yKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBBcHBseSBhbmltYXRpb24gYmFja2dyb3VuZHMgKG9ubHkgZm9yIG5vbi1pbWFnZS9ub24tdmlkZW8gYmFja2dyb3VuZHMpXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBbmltYXRpb25CYWNrZ3JvdW5kKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5iYWNrZ3JvdW5kQW5pbWF0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmV2ZW50RW1taXR0ZXIpIHtcclxuICAgICAgdGhpcy5ldmVudEVtbWl0dGVyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSAhPT0gJ2ZpeGVkJykge1xyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAvLyAgICdjb2xvcicsXHJcbiAgICAvLyAgIHRoaXMuZ2V0VGV4dENvbG9yKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5jb2xvciA/IHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5jb2xvciA6ICcjZmZmZmZmJylcclxuICAgIC8vICk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5zaG93SW1hZ2UpIHtcclxuICAgICAgaWYgKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5pbWFnZT8uaW5jbHVkZXMoJy5tcDQnKSkge1xyXG4gICAgICAgIC8vIEhhbmRsZSB2aWRlbyBiYWNrZ3JvdW5kXHJcbiAgICAgICAgdGhpcy5hcHBseVZpZGVvKHRoaXMuc2ltcG9CYWNrZ3JvdW5kLmltYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8gSXQncyBhbiBpbWFnZSDigJQgcmVtb3ZlIGFueSBleGlzdGluZyB2aWRlb1xyXG4gICAgICB0aGlzLnJlbW92ZVZpZGVvKCk7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnYmFja2dyb3VuZC1pbWFnZScsXHJcbiAgICAgICAgYHVybCgke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLmltYWdlfSlgXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXHJcbiAgICAgICAgYCR7dGhpcy5zaW1wb0JhY2tncm91bmQucG9zaXRpb24/Lnh9JSAke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLnBvc2l0aW9uPy55fSVgXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1yZXBlYXQnLCBgbm8tcmVwZWF0YCk7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1zaXplJywgYGNvdmVyYCk7XHJcbiAgICAgIC8vIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgLy8gICAnY29sb3InLFxyXG4gICAgICAvLyAgIHRoaXMuZ2V0VGV4dENvbG9yKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5jb2xvciA/IHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5jb2xvciA6ICcjZmZmZmZmJylcclxuICAgICAgLy8gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlVmlkZW8oKTtcclxuICAgICAgaWYgKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5iYWNrZ3JvdW5kVHlwZSA9PT0gKCdHcmFkaWVudCcgYXMgQkFDS0dST1VORF9UWVBFKSkge1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IEdyYWRpZW50RGlyZWN0aW9uW3RoaXMuc2ltcG9CYWNrZ3JvdW5kLmJhY2tncm91bmRHcmFkaWVudERpcmVjdGlvbiBhcyB1bmtub3duIGFzIGtleW9mIHR5cGVvZiBHcmFkaWVudERpcmVjdGlvbiB8fCBHcmFkaWVudERpcmVjdGlvbi5ET1dOXTtcclxuICAgICAgICBjb25zdCBncmFkaWVudENvbG9yID0gZGlyZWN0aW9uICE9IEdyYWRpZW50RGlyZWN0aW9uLkRPV05cclxuICAgICAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2RpcmVjdGlvbn0sJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5jb2xvcn0sJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5zZWNvbmRhcnlDb2xvcn0pYFxyXG4gICAgICAgICAgOiBgbGluZWFyLWdyYWRpZW50KCR7dGhpcy5zaW1wb0JhY2tncm91bmQuY29sb3J9LCR7dGhpcy5zaW1wb0JhY2tncm91bmQuc2Vjb25kYXJ5Q29sb3J9KWA7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kJywgZ3JhZGllbnRDb2xvcik7XHJcbiAgICAgICAgLy8gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdjb2xvcicsIHRoaXMuZ2V0VGV4dENvbG9yKHRoaXMuc2ltcG9CYWNrZ3JvdW5kLmNvbG9yKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtY29sb3InLCB0aGlzLnNpbXBvQmFja2dyb3VuZD8uY29sb3IpO1xyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtaW1hZ2UnLCBgYCk7XHJcblxyXG4gICAgICAvLyBBcHBseSBhbmltYXRpb24gYmFja2dyb3VuZHMgKG9ubHkgZm9yIG5vbi1pbWFnZS9ub24tdmlkZW8gYmFja2dyb3VuZHMpXHJcbiAgICAgIHRoaXMuYXBwbHlBbmltYXRpb25CYWNrZ3JvdW5kKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5iYWNrZ3JvdW5kQW5pbWF0aW9uKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNpbXBvQmFja2dyb3VuZD8uYmFja2dyb3VuZEFuaW1hdGlvbiAmJiB0aGlzLnNpbXBvQmFja2dyb3VuZD8uYmFja2dyb3VuZEFuaW1hdGlvbiAhPT0gJ05PTkUnKSB7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXNpemUnLCAnY292ZXInKTtcclxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcmVwZWF0JywgJ25vLXJlcGVhdCcpO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1wb3NpdGlvbicsICdjZW50ZXInKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSB1bmlxdWUgdmlkZW8gZWxlbWVudCBpZCBmb3IgdGhpcyBob3N0IGVsZW1lbnQgKi9cclxuICBwcml2YXRlIGdldCB2aWRlb0VsZW1lbnRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBzaW1wby1iZy12aWRlby0ke3RoaXMuZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkfWA7XHJcbiAgfVxyXG5cclxuICAvKiogUmVtb3ZlcyBhbnkgZXhpc3RpbmcgYmFja2dyb3VuZCB2aWRlbyBlbGVtZW50IGZyb20gdGhlIGhvc3QgKi9cclxuICBwcml2YXRlIHJlbW92ZVZpZGVvKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy52aWRlb0VsZW1lbnRJZH1gKTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5wYXVzZT8uKCk7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZChleGlzdGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyBhbmQgYXBwZW5kcyBhIGZ1bGwtY292ZXIgYXV0b3BsYXkgdmlkZW8gYXMgdGhlIGJhY2tncm91bmQgKi9cclxuICBwcml2YXRlIGFwcGx5VmlkZW8oc3JjOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIFJlbW92ZSBzdGFsZSB2aWRlbyBmaXJzdCAocHJldmVudHMgZHVwbGljYXRlcylcclxuICAgIHRoaXMucmVtb3ZlVmlkZW8oKTtcclxuXHJcbiAgICAvLyBDbGVhciBhbnkgYmFja2dyb3VuZC1pbWFnZSB0aGF0IG1heSBzdGlsbCBiZSBzZXRcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1pbWFnZScsICcnKTtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicsICd0cmFuc3BhcmVudCcpO1xyXG5cclxuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcbiAgICB2aWRlb0VsZW1lbnQuaWQgPSB0aGlzLnZpZGVvRWxlbWVudElkO1xyXG4gICAgdmlkZW9FbGVtZW50LnNyYyA9IHNyYztcclxuICAgIHZpZGVvRWxlbWVudC5hdXRvcGxheSA9IHRydWU7XHJcbiAgICB2aWRlb0VsZW1lbnQubG9vcCA9IHRydWU7XHJcbiAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xyXG4gICAgdmlkZW9FbGVtZW50LnBsYXlzSW5saW5lID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTdHlsZSBzbyB2aWRlbyBmaWxscyB0aGUgaG9zdCBjb250YWluZXJcclxuICAgIHZpZGVvRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLmxlZnQgPSAnMCc7XHJcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUucmlnaHQgPSAnMCc7XHJcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUuYm90dG9tID0gJzAnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgIHZpZGVvRWxlbWVudC5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLm9iamVjdEZpdCA9ICdjb3Zlcic7XHJcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuXHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodmlkZW9FbGVtZW50KTtcclxuXHJcbiAgICAvLyBTb21lIGJyb3dzZXJzIHJlcXVpcmUgYW4gZXhwbGljaXQgcGxheSgpIGNhbGwgYWZ0ZXIgYXV0b3BsYXkgYXR0cmlidXRlXHJcbiAgICB2aWRlb0VsZW1lbnQucGxheSgpLmNhdGNoKCgpID0+IHsgLyogYXV0b3BsYXkgYmxvY2tlZCDigJMgc2lsZW50IGZhaWwgKi8gfSk7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0cyBhIEdJRiBhbmltYXRpb24gYXMgdGhlIGJhY2tncm91bmQgaW1hZ2UgKi9cclxuICBwcml2YXRlIGFwcGx5QW5pbWF0aW9uQmFja2dyb3VuZChhbmltYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5pbWF0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICBEQU5DSU5HX0RPVFM6IGB1cmwoJ2h0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTE2MDI2YzE3NDcxMjIyOTY0MDhBcnRib2FyZDEuZ2lmJylgLFxyXG4gICAgICBTQ0FUVEVSSU5HX0RPVFM6IGB1cmwoJ2h0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMjg3MzQ4YzE3NDcwNTE1NDAwODhXaGF0c0FwcFZpZGVvMjAyNS0wNS0xMmF0NS4xOS4xMVBNLWV6Z2lmLmNvbS12aWRlby10by1naWYtY29udmVydGVyICgxKS5naWYnKWAsXHJcbiAgICAgIFdBVkVTOiBgdXJsKCdodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzYzMDc1M2MxNzQ3NDAzMjE3MjM5NjkxMzk5N19Nb3Rpb24lMjBHcmFwaGljc19Nb3Rpb24lMjBHcmFwaGljXzM4NDB4MjE2MCUyMCgxKSUyMCgyKS5naWYnKWAsXHJcbiAgICAgIEFCU1RSQUNUOiBgdXJsKCdodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzU3NzUwN2MxNzQ3NDY1NjM2OTU2Um90YXRpb24lMjBnaWYuZ2lmJylgLFxyXG4gICAgICBEUkVXOiBgdXJsKCdodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzcyMTI0NGMxNzQ3NDY3Njk4MDA0YW5pbWF0ZS5naWYnKWAsXHJcbiAgICAgIERPVFM6IGB1cmwoJ2h0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjU5MTM0YzE3NDc0Njc4MDEyNDJEb3RzJTIwKDEpLmdpZicpYCxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb25NYXBbYW5pbWF0aW9uXSkge1xyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtaW1hZ2UnLCBhbmltYXRpb25NYXBbYW5pbWF0aW9uXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0Q29sb3IoYmdDb2xvcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoYmdDb2xvciAmJiAvXiNbMC05QS1GYS1mXXs2fSQvLnRlc3QoYmdDb2xvcikpIHtcclxuICAgICAgY29uc3QgdGhyZXNob2xkID0gMTMwO1xyXG4gICAgICBjb25zdCByID0gcGFyc2VJbnQoYmdDb2xvci5zbGljZSgxLCAzKSwgMTYpO1xyXG4gICAgICBjb25zdCBnID0gcGFyc2VJbnQoYmdDb2xvci5zbGljZSgzLCA1KSwgMTYpO1xyXG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoYmdDb2xvci5zbGljZSg1LCA3KSwgMTYpO1xyXG4gICAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG4gICAgICByZXR1cm4gYnJpZ2h0bmVzcyA+IHRocmVzaG9sZCA/ICcjMDAwMDAwJyA6ICcjZmZmZmZmJztcclxuICAgIH1cclxuICAgIC8vIEZvciBncmFkaWVudHMsIHJnYmEoKSwgb3IgYW55dGhpbmcgbm9uLWhleCDigJQgZGVmYXVsdCB0byB3aGl0ZVxyXG4gICAgcmV0dXJuICcjZmZmZmZmJztcclxuICB9XHJcbn1cclxuIl19
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQWdDLFdBQVcsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQU1wRCxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLFlBQ1UsRUFBYyxFQUNkLFlBQTJCLEVBQ04sVUFBa0I7UUFGdkMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQ04sZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQVAzQixnQkFBVyxHQUFZLENBQUMsQ0FBQztRQVM3QyxpRkFBaUY7UUFDakYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFaEUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FDekUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ2pFLElBQUksR0FBRyxDQUFDLElBQUksRUFB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QUFFLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEQsT0FBTyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsZ0VBQWdFO1FBQ2hFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7K0dBck5VLG1CQUFtQix5RUFTcEIsV0FBVzttR0FUVixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFVSSxNQUFNOzJCQUFDLFdBQVc7eUNBUkssZUFBZTtzQkFBeEMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ0YsV0FBVztzQkFBaEMsS0FBSzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBQTEFURk9STV9JRCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJBQ0tHUk9VTkRfVFlQRSB9IGZyb20gJy4uL3N0eWxlcy90eXBlcyc7XHJcbmltcG9ydCB7IEdyYWRpZW50RGlyZWN0aW9uIH0gZnJvbSAnLi4vc3R5bGVzL2luZGV4JztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NpbXBvQmFja2dyb3VuZF0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnc2ltcG9CYWNrZ3JvdW5kJykgc2ltcG9CYWNrZ3JvdW5kPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIEBJbnB1dCgnc2Nyb2xsVmFsdWUnKSBzY3JvbGxWYWx1ZT86IG51bWJlciA9IDA7XHJcblxyXG4gIGV2ZW50RW1taXR0ZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdFxyXG4gICkge1xyXG4gICAgLy8gRW5zdXJlIHRoZSBob3N0IGVsZW1lbnQgaXMgcG9zaXRpb25lZCBzbyB0aGUgYWJzb2x1dGUgdmlkZW8gZmlsbHMgaXQgY29ycmVjdGx5XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZXZlbnRFbW1pdHRlcikge1xyXG4gICAgICB0aGlzLmV2ZW50RW1taXR0ZXIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmV2ZW50RW1taXR0ZXIgPSB0aGlzLmV2ZW50U2VydmljZS5iYWNrZ3JvdW5kSW1hZ2VDaGFuZ2VDaGVjay5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaWQgPT09IHJlcy5pZCB8fCByZXMuZ2xvYmFsVGhlbWVDaGFuZ2UpIHtcclxuICAgICAgICAgIGlmIChyZXMuZGF0YT8uc2hvd0ltYWdlICYmIHRoaXM/LnNjcm9sbFZhbHVlID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5kYXRhPy5pbWFnZT8uaW5jbHVkZXMoJy5tcDQnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlWaWRlbyhyZXMuZGF0YS5pbWFnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEl0J3MgYW4gaW1hZ2Ug4oCUIHJlbW92ZSBhbnkgZXhpc3RpbmcgdmlkZW9cclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVWaWRlbygpO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnLFxyXG4gICAgICAgICAgICAgIGB1cmwoJHtyZXMuZGF0YS5pbWFnZX0pYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24nLFxyXG4gICAgICAgICAgICAgIGAke3Jlcy5kYXRhLnBvc2l0aW9uPy54fSUgJHtyZXMuZGF0YS5wb3NpdGlvbj8ueX0lYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcmVwZWF0JywgYG5vLXJlcGVhdGApO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtc2l6ZScsIGBjb3ZlcmApO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2NvbG9yJywgdGhpcy5nZXRUZXh0Q29sb3IocmVzLmRhdGE/LmNvbG9yKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVZpZGVvKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNpbXBvQmFja2dyb3VuZD8uYmFja2dyb3VuZFR5cGUgPT09ICgnR3JhZGllbnQnIGFzIEJBQ0tHUk9VTkRfVFlQRSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBHcmFkaWVudERpcmVjdGlvblt0aGlzLnNpbXBvQmFja2dyb3VuZC5iYWNrZ3JvdW5kR3JhZGllbnREaXJlY3Rpb24gYXMgdW5rbm93biBhcyBrZXlvZiB0eXBlb2YgR3JhZGllbnREaXJlY3Rpb24gfHwgR3JhZGllbnREaXJlY3Rpb24uRE9XTl07XHJcbiAgICAgICAgICAgICAgY29uc3QgZ3JhZGllbnRDb2xvciA9IGRpcmVjdGlvbiAhPSBHcmFkaWVudERpcmVjdGlvbi5ET1dOXHJcbiAgICAgICAgICAgICAgICA/IGBsaW5lYXItZ3JhZGllbnQoJHtkaXJlY3Rpb259LCR7dGhpcy5zaW1wb0JhY2tncm91bmQuY29sb3J9LCR7dGhpcy5zaW1wb0JhY2tncm91bmQuc2Vjb25kYXJ5Q29sb3J9KWBcclxuICAgICAgICAgICAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLmNvbG9yfSwke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLnNlY29uZGFyeUNvbG9yfSlgO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZCcsIGdyYWRpZW50Q29sb3IpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnY29sb3InLCB0aGlzLmdldFRleHRDb2xvcih0aGlzLnNpbXBvQmFja2dyb3VuZC5jb2xvcikpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNvbG9yJywgcmVzLmRhdGE/LmNvbG9yKTtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWltYWdlJywgYGApO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtc2l6ZScsICdjb3ZlcicpO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcmVwZWF0JywgJ25vLXJlcGVhdCcpO1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcG9zaXRpb24nLCAnY2VudGVyJyk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnY29sb3InLCB0aGlzLmdldFRleHRDb2xvcihyZXMuZGF0YT8uY29sb3IpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGx5IGFuaW1hdGlvbiBiYWNrZ3JvdW5kcyAob25seSBmb3Igbm9uLWltYWdlL25vbi12aWRlbyBiYWNrZ3JvdW5kcylcclxuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvbkJhY2tncm91bmQodGhpcy5zaW1wb0JhY2tncm91bmQ/LmJhY2tncm91bmRBbmltYXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZXZlbnRFbW1pdHRlcikge1xyXG4gICAgICB0aGlzLmV2ZW50RW1taXR0ZXIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwb3NpdGlvbicpICE9PSAnZml4ZWQnKSB7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgIC8vICAgJ2NvbG9yJyxcclxuICAgIC8vICAgdGhpcy5nZXRUZXh0Q29sb3IodGhpcy5zaW1wb0JhY2tncm91bmQ/LmNvbG9yID8gdGhpcy5zaW1wb0JhY2tncm91bmQ/LmNvbG9yIDogJyNmZmZmZmYnKVxyXG4gICAgLy8gKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaW1wb0JhY2tncm91bmQ/LnNob3dJbWFnZSkge1xyXG4gICAgICBpZiAodGhpcy5zaW1wb0JhY2tncm91bmQ/LmltYWdlPy5pbmNsdWRlcygnLm1wNCcpKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIHZpZGVvIGJhY2tncm91bmRcclxuICAgICAgICB0aGlzLmFwcGx5VmlkZW8odGhpcy5zaW1wb0JhY2tncm91bmQuaW1hZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBJdCdzIGFuIGltYWdlIOKAlCByZW1vdmUgYW55IGV4aXN0aW5nIHZpZGVvXHJcbiAgICAgIHRoaXMucmVtb3ZlVmlkZW8oKTtcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJyxcclxuICAgICAgICBgdXJsKCR7dGhpcy5zaW1wb0JhY2tncm91bmQuaW1hZ2V9KWBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcclxuICAgICAgICBgJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5wb3NpdGlvbj8ueH0lICR7dGhpcy5zaW1wb0JhY2tncm91bmQucG9zaXRpb24/Lnl9JWBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXJlcGVhdCcsIGBuby1yZXBlYXRgKTtcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXNpemUnLCBgY292ZXJgKTtcclxuICAgICAgLy8gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAvLyAgICdjb2xvcicsXHJcbiAgICAgIC8vICAgdGhpcy5nZXRUZXh0Q29sb3IodGhpcy5zaW1wb0JhY2tncm91bmQ/LmNvbG9yID8gdGhpcy5zaW1wb0JhY2tncm91bmQ/LmNvbG9yIDogJyNmZmZmZmYnKVxyXG4gICAgICAvLyApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVWaWRlbygpO1xyXG4gICAgICBpZiAodGhpcy5zaW1wb0JhY2tncm91bmQ/LmJhY2tncm91bmRUeXBlID09PSAoJ0dyYWRpZW50JyBhcyBCQUNLR1JPVU5EX1RZUEUpKSB7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gR3JhZGllbnREaXJlY3Rpb25bdGhpcy5zaW1wb0JhY2tncm91bmQuYmFja2dyb3VuZEdyYWRpZW50RGlyZWN0aW9uIGFzIHVua25vd24gYXMga2V5b2YgdHlwZW9mIEdyYWRpZW50RGlyZWN0aW9uIHx8IEdyYWRpZW50RGlyZWN0aW9uLkRPV05dO1xyXG4gICAgICAgIGNvbnN0IGdyYWRpZW50Q29sb3IgPSBkaXJlY3Rpb24gIT0gR3JhZGllbnREaXJlY3Rpb24uRE9XTlxyXG4gICAgICAgICAgPyBgbGluZWFyLWdyYWRpZW50KCR7ZGlyZWN0aW9ufSwke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLmNvbG9yfSwke3RoaXMuc2ltcG9CYWNrZ3JvdW5kLnNlY29uZGFyeUNvbG9yfSlgXHJcbiAgICAgICAgICA6IGBsaW5lYXItZ3JhZGllbnQoJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5jb2xvcn0sJHt0aGlzLnNpbXBvQmFja2dyb3VuZC5zZWNvbmRhcnlDb2xvcn0pYDtcclxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBncmFkaWVudENvbG9yKTtcclxuICAgICAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2NvbG9yJywgdGhpcy5nZXRUZXh0Q29sb3IodGhpcy5zaW1wb0JhY2tncm91bmQuY29sb3IpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5jb2xvcik7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1pbWFnZScsIGBgKTtcclxuXHJcbiAgICAgIC8vIEFwcGx5IGFuaW1hdGlvbiBiYWNrZ3JvdW5kcyAob25seSBmb3Igbm9uLWltYWdlL25vbi12aWRlbyBiYWNrZ3JvdW5kcylcclxuICAgICAgdGhpcy5hcHBseUFuaW1hdGlvbkJhY2tncm91bmQodGhpcy5zaW1wb0JhY2tncm91bmQ/LmJhY2tncm91bmRBbmltYXRpb24pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5iYWNrZ3JvdW5kQW5pbWF0aW9uICYmIHRoaXMuc2ltcG9CYWNrZ3JvdW5kPy5iYWNrZ3JvdW5kQW5pbWF0aW9uICE9PSAnTk9ORScpIHtcclxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtc2l6ZScsICdjb3ZlcicpO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1yZXBlYXQnLCAnbm8tcmVwZWF0Jyk7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywgJ2NlbnRlcicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgSGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIHVuaXF1ZSB2aWRlbyBlbGVtZW50IGlkIGZvciB0aGlzIGhvc3QgZWxlbWVudCAqL1xyXG4gIHByaXZhdGUgZ2V0IHZpZGVvRWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYHNpbXBvLWJnLXZpZGVvLSR7dGhpcy5lbD8ubmF0aXZlRWxlbWVudD8uaWR9YDtcclxuICB9XHJcblxyXG4gIC8qKiBSZW1vdmVzIGFueSBleGlzdGluZyBiYWNrZ3JvdW5kIHZpZGVvIGVsZW1lbnQgZnJvbSB0aGUgaG9zdCAqL1xyXG4gIHByaXZhdGUgcmVtb3ZlVmlkZW8oKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy52aWRlb0VsZW1lbnRJZH1gKTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5wYXVzZT8uKCk7XHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZChleGlzdGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyBhbmQgYXBwZW5kcyBhIGZ1bGwtY292ZXIgYXV0b3BsYXkgdmlkZW8gYXMgdGhlIGJhY2tncm91bmQgKi9cclxuICBwcml2YXRlIGFwcGx5VmlkZW8oc3JjOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBSZW1vdmUgc3RhbGUgdmlkZW8gZmlyc3QgKHByZXZlbnRzIGR1cGxpY2F0ZXMpXHJcbiAgICB0aGlzLnJlbW92ZVZpZGVvKCk7XHJcblxyXG4gICAgLy8gQ2xlYXIgYW55IGJhY2tncm91bmQtaW1hZ2UgdGhhdCBtYXkgc3RpbGwgYmUgc2V0XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtaW1hZ2UnLCAnJyk7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtY29sb3InLCAndHJhbnNwYXJlbnQnKTtcclxuXHJcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG4gICAgdmlkZW9FbGVtZW50LmlkID0gdGhpcy52aWRlb0VsZW1lbnRJZDtcclxuICAgIHZpZGVvRWxlbWVudC5zcmMgPSBzcmM7XHJcbiAgICB2aWRlb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xyXG4gICAgdmlkZW9FbGVtZW50Lmxvb3AgPSB0cnVlO1xyXG4gICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcclxuICAgIHZpZGVvRWxlbWVudC5wbGF5c0lubGluZSA9IHRydWU7XHJcblxyXG4gICAgLy8gU3R5bGUgc28gdmlkZW8gZmlsbHMgdGhlIGhvc3QgY29udGFpbmVyXHJcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIHZpZGVvRWxlbWVudC5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzAnO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLmJvdHRvbSA9ICcwJztcclxuICAgIHZpZGVvRWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgIHZpZGVvRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUuekluZGV4ID0gJy0xJztcclxuICAgIHZpZGVvRWxlbWVudC5zdHlsZS5vYmplY3RGaXQgPSAnY292ZXInO1xyXG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XHJcblxyXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHZpZGVvRWxlbWVudCk7XHJcblxyXG4gICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIGFuIGV4cGxpY2l0IHBsYXkoKSBjYWxsIGFmdGVyIGF1dG9wbGF5IGF0dHJpYnV0ZVxyXG4gICAgdmlkZW9FbGVtZW50LnBsYXkoKS5jYXRjaCgoKSA9PiB7IC8qIGF1dG9wbGF5IGJsb2NrZWQg4oCTIHNpbGVudCBmYWlsICovIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNldHMgYSBHSUYgYW5pbWF0aW9uIGFzIHRoZSBiYWNrZ3JvdW5kIGltYWdlICovXHJcbiAgcHJpdmF0ZSBhcHBseUFuaW1hdGlvbkJhY2tncm91bmQoYW5pbWF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuaW1hdGlvbk1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgREFOQ0lOR19ET1RTOiBgdXJsKCdodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzExNjAyNmMxNzQ3MTIyMjk2NDA4QXJ0Ym9hcmQxLmdpZicpYCxcclxuICAgICAgU0NBVFRFUklOR19ET1RTOiBgdXJsKCdodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzI4NzM0OGMxNzQ3MDUxNTQwMDg4V2hhdHNBcHBWaWRlbzIwMjUtMDUtMTJhdDUuMTkuMTFQTS1lemdpZi5jb20tdmlkZW8tdG8tZ2lmLWNvbnZlcnRlciAoMSkuZ2lmJylgLFxyXG4gICAgICBXQVZFUzogYHVybCgnaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy82MzA3NTNjMTc0NzQwMzIxNzIzOTY5MTM5OTdfTW90aW9uJTIwR3JhcGhpY3NfTW90aW9uJTIwR3JhcGhpY18zODQweDIxNjAlMjAoMSklMjAoMikuZ2lmJylgLFxyXG4gICAgICBBQlNUUkFDVDogYHVybCgnaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy81Nzc1MDdjMTc0NzQ2NTYzNjk1NlJvdGF0aW9uJTIwZ2lmLmdpZicpYCxcclxuICAgICAgRFJFVzogYHVybCgnaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy83MjEyNDRjMTc0NzQ2NzY5ODAwNGFuaW1hdGUuZ2lmJylgLFxyXG4gICAgICBET1RTOiBgdXJsKCdodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzY1OTEzNGMxNzQ3NDY3ODAxMjQyRG90cyUyMCgxKS5naWYnKWAsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uTWFwW2FuaW1hdGlvbl0pIHtcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWltYWdlJywgYW5pbWF0aW9uTWFwW2FuaW1hdGlvbl0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dENvbG9yKGJnQ29sb3I6IHN0cmluZykge1xyXG4gICAgaWYgKGJnQ29sb3IgJiYgL14jWzAtOUEtRmEtZl17Nn0kLy50ZXN0KGJnQ29sb3IpKSB7XHJcbiAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDEzMDtcclxuICAgICAgY29uc3QgciA9IHBhcnNlSW50KGJnQ29sb3Iuc2xpY2UoMSwgMyksIDE2KTtcclxuICAgICAgY29uc3QgZyA9IHBhcnNlSW50KGJnQ29sb3Iuc2xpY2UoMywgNSksIDE2KTtcclxuICAgICAgY29uc3QgYiA9IHBhcnNlSW50KGJnQ29sb3Iuc2xpY2UoNSwgNyksIDE2KTtcclxuICAgICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcclxuICAgICAgcmV0dXJuIGJyaWdodG5lc3MgPiB0aHJlc2hvbGQgPyAnIzAwMDAwMCcgOiAnI2ZmZmZmZic7XHJcbiAgICB9XHJcbiAgICAvLyBGb3IgZ3JhZGllbnRzLCByZ2JhKCksIG9yIGFueXRoaW5nIG5vbi1oZXgg4oCUIGRlZmF1bHQgdG8gd2hpdGVcclxuICAgIHJldHVybiAnI2ZmZmZmZic7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|