ng-easycommerce-v18 0.3.21-beta.3 → 0.3.22-beta.2
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/README.md +7 -7
- package/esm2022/lib/classes/filters/filter.mjs +27 -2
- package/esm2022/lib/constants/api.constants.service.mjs +7 -1
- package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +5 -3
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +1 -5
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +44 -53
- package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +32 -23
- package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +6 -4
- package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +4 -2
- package/esm2022/lib/ec-components/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.mjs +7 -17
- package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +4 -2
- package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +4 -2
- package/esm2022/lib/ec-services/analytics/gtm.service.mjs +90 -30
- package/esm2022/lib/ec-services/options.service.mjs +27 -3
- package/esm2022/lib/ec-services/parameters.service.mjs +41 -1
- package/fesm2022/ng-easycommerce-v18.mjs +445 -296
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/constants/api.constants.service.d.ts +4 -0
- package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +0 -1
- package/lib/ec-services/analytics/gtm.service.d.ts +5 -0
- package/lib/ec-services/options.service.d.ts +4 -0
- package/lib/ec-services/parameters.service.d.ts +6 -0
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { inject, Injectable, PLATFORM_ID, RendererFactory2 } from '@angular/core';
|
|
2
2
|
import { NavigationEnd, Router } from '@angular/router';
|
|
3
3
|
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
4
|
+
import { filter } from 'rxjs';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/**
|
|
6
7
|
* Servicio que se encarga de manejar el analytics de GTM.
|
|
@@ -41,16 +42,29 @@ export class GTMService {
|
|
|
41
42
|
this.document = inject(DOCUMENT);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
45
|
+
get isBrowser() {
|
|
46
|
+
return isPlatformBrowser(this.platformId);
|
|
47
|
+
}
|
|
48
|
+
/** Acceso al window SSR-safe */
|
|
49
|
+
get windowRef() {
|
|
50
|
+
if (!this.isBrowser)
|
|
51
|
+
return null;
|
|
52
|
+
return window;
|
|
53
|
+
}
|
|
54
|
+
/** Acceso al document SSR-safe */
|
|
55
|
+
get documentRef() {
|
|
56
|
+
return this.isBrowser ? this.document : null;
|
|
57
|
+
}
|
|
44
58
|
/**
|
|
45
59
|
* Obtiene el dataLayer del objecto window
|
|
46
60
|
* @returns
|
|
47
61
|
*/
|
|
48
62
|
getDataLayer() {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return
|
|
63
|
+
const win = this.windowRef;
|
|
64
|
+
if (!win)
|
|
65
|
+
return [];
|
|
66
|
+
win.dataLayer = win.dataLayer || [];
|
|
67
|
+
return win.dataLayer;
|
|
54
68
|
}
|
|
55
69
|
/**
|
|
56
70
|
* Agrega datos al dataLayer.
|
|
@@ -58,6 +72,8 @@ export class GTMService {
|
|
|
58
72
|
*/
|
|
59
73
|
pushOnDataLayer(obj) {
|
|
60
74
|
const dataLayer = this.getDataLayer();
|
|
75
|
+
if (!dataLayer.length && !this.isBrowser)
|
|
76
|
+
return;
|
|
61
77
|
dataLayer.push(obj);
|
|
62
78
|
}
|
|
63
79
|
/**
|
|
@@ -66,24 +82,45 @@ export class GTMService {
|
|
|
66
82
|
*/
|
|
67
83
|
addGtmToDom() {
|
|
68
84
|
return new Promise((resolve, reject) => {
|
|
85
|
+
if (!this.isBrowser) {
|
|
86
|
+
return resolve(false);
|
|
87
|
+
}
|
|
69
88
|
if (this.isLoaded) {
|
|
70
89
|
return resolve(this.isLoaded);
|
|
71
90
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
91
|
+
const doc = this.documentRef;
|
|
92
|
+
if (!doc) {
|
|
93
|
+
return reject(false);
|
|
94
|
+
}
|
|
95
|
+
const existing = doc.getElementById('GTMscript');
|
|
96
|
+
if (existing) {
|
|
97
|
+
this.isLoaded = true;
|
|
98
|
+
return resolve(true);
|
|
99
|
+
}
|
|
100
|
+
this.pushOnDataLayer({
|
|
101
|
+
'gtm.start': new Date().getTime(),
|
|
102
|
+
event: 'gtm.js'
|
|
103
|
+
});
|
|
104
|
+
const gtmScript = doc.createElement('script');
|
|
105
|
+
if (!gtmScript) {
|
|
106
|
+
return reject(false);
|
|
86
107
|
}
|
|
108
|
+
gtmScript.id = 'GTMscript';
|
|
109
|
+
gtmScript.async = true;
|
|
110
|
+
gtmScript.src = this.applyGtmQueryParams(this.config['gtm_resource_path']
|
|
111
|
+
? this.config['gtm_resource_path']
|
|
112
|
+
: 'https://www.googletagmanager.com/gtm.js');
|
|
113
|
+
gtmScript.addEventListener('load', () => {
|
|
114
|
+
this.isLoaded = true;
|
|
115
|
+
return resolve(true);
|
|
116
|
+
});
|
|
117
|
+
gtmScript.addEventListener('error', () => {
|
|
118
|
+
this.isLoaded = false;
|
|
119
|
+
return reject(false);
|
|
120
|
+
});
|
|
121
|
+
doc.head
|
|
122
|
+
? doc.head.insertBefore(gtmScript, doc.head.firstChild)
|
|
123
|
+
: doc.appendChild(gtmScript);
|
|
87
124
|
});
|
|
88
125
|
}
|
|
89
126
|
applyGtmQueryParams(url) {
|
|
@@ -97,29 +134,52 @@ export class GTMService {
|
|
|
97
134
|
* @param config Configuraciones de Google Tag Manager
|
|
98
135
|
*/
|
|
99
136
|
initialize(config) {
|
|
137
|
+
if (!this.isBrowser)
|
|
138
|
+
return;
|
|
139
|
+
if (this.isLoaded)
|
|
140
|
+
return;
|
|
100
141
|
this.config = config || this.config;
|
|
142
|
+
if (!config?.id)
|
|
143
|
+
return;
|
|
101
144
|
this.addGtmToDom().then(() => {
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
145
|
+
this.isLoaded = true;
|
|
146
|
+
this.enabled = true;
|
|
147
|
+
this.router.events
|
|
148
|
+
.pipe(filter(event => event instanceof NavigationEnd))
|
|
149
|
+
.subscribe((event) => {
|
|
150
|
+
const gtmTag = {
|
|
151
|
+
event: 'page',
|
|
152
|
+
pageName: event.urlAfterRedirects ?? event.url
|
|
153
|
+
};
|
|
154
|
+
this.pushTag(gtmTag);
|
|
110
155
|
});
|
|
156
|
+
}).catch(() => {
|
|
157
|
+
this.isLoaded = false;
|
|
158
|
+
this.enabled = false;
|
|
111
159
|
});
|
|
112
160
|
}
|
|
113
161
|
pushTag(item) {
|
|
114
162
|
return new Promise((resolve, reject) => {
|
|
163
|
+
if (!this.isBrowser) {
|
|
164
|
+
return resolve();
|
|
165
|
+
}
|
|
166
|
+
if (!this.config?.id) {
|
|
167
|
+
return resolve();
|
|
168
|
+
}
|
|
115
169
|
if (!this.isLoaded) {
|
|
116
170
|
this.addGtmToDom().then(() => {
|
|
171
|
+
this.isLoaded = true;
|
|
172
|
+
this.enabled = true;
|
|
117
173
|
this.pushOnDataLayer(item);
|
|
118
174
|
return resolve();
|
|
119
|
-
}).catch(
|
|
175
|
+
}).catch(err => {
|
|
176
|
+
return reject(err);
|
|
177
|
+
});
|
|
120
178
|
}
|
|
121
179
|
else {
|
|
122
|
-
this.
|
|
180
|
+
if (this.enabled) {
|
|
181
|
+
this.pushOnDataLayer(item);
|
|
182
|
+
}
|
|
123
183
|
return resolve();
|
|
124
184
|
}
|
|
125
185
|
});
|
|
@@ -411,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
411
471
|
providedIn: 'root'
|
|
412
472
|
}]
|
|
413
473
|
}], ctorParameters: () => [] });
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvYW5hbHl0aWNzL2d0bS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFDOUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sVUFBVTtJQUNuQjs7T0FFRztJQUNLLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDbEM7O09BRUc7SUFDSyxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ2pDOzs7T0FHRztJQUNLLFFBQVEsQ0FBWTtJQUM1Qjs7T0FFRztJQUNLLE1BQU0sQ0FBVTtJQUVoQixlQUFlLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdELFFBQVEsR0FBb0IsSUFBSSxDQUFDO0lBQ3pDOztPQUVHO0lBQ0ssTUFBTSxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4Qzs7T0FFRztJQUNLLE1BQU0sR0FBMkIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDN0MsVUFBVSxHQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM3QztRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFD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O0lBQ0Q7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxJQUFTO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTztZQUNILEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUMzQixDQUFBO0lBQ0wsQ0FBQzt3R0F0WlEsVUFBVTs0R0FBVixVQUFVLGNBRlAsTUFBTTs7NEZBRVQsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlclJlbmRlciwgaW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmFseXRpY0V2ZW50S2V5LCBHb29nbGVUYWdNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbi8qKlxuICogU2VydmljaW8gcXVlIHNlIGVuY2FyZ2EgZGUgbWFuZWphciBlbCBhbmFseXRpY3MgZGUgR1RNLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdUTVNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIEluZGljYSBzaSBzZSBlc3RhIGNhcmdhbmRvIGVsIHNlcnZpY2lvLlxuICAgICAqL1xuICAgIHByaXZhdGUgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2EgY3VhbmRvIGVsIHNlcnZpY2lvIGVzdGEgaGFiaWxpdGFkby5cbiAgICAgKi9cbiAgICBwcml2YXRlIGVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBTZSBlbmNhcmdhIGRlIGNyZWFyIGVsIGVsZW1lbnRvIEhUTUwgY29uIGxhcyBjb25maWd1cmFjaW9uZXMgcGFyYSBcbiAgICAgKiBxdWUgc2UgcHVlZGEgZWplY3V0YXIgZWwgc2VydmljaW8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuICAgIC8qKlxuICAgICAqIEFsbWFjZW5hIGVsIG9iamVjdG8gd2luZG93IGRlbCBuYXZlZ2Fkb3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSB3aW5kb3c/OiBXaW5kb3c7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MiA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcbiAgICBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIFNlcnZpY2lvIGRlIHJ1dGVvIGRlIGFuZ3VsYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYWNpw7NuIGRlIEdvb2dsZSBUYWcgTWFuYWdlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbmZpZzogR29vZ2xlVGFnTWFuYWdlckNvbmZpZyA9IHsgaWQ6IG51bGwgfVxuICAgIHByaXZhdGUgcGxhdGZvcm1JZDogYW55ID0gaW5qZWN0KFBMQVRGT1JNX0lEKVxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvdyA9IHdpbmRvd1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCBkYXRhTGF5ZXIgZGVsIG9iamVjdG8gd2luZG93XG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHVibGljIGdldERhdGFMYXllcigpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IHRoaXMud2luZG93O1xuICAgICAgICAvKiBpZih3aW5kb3cpXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICByZXR1cm4gd2luZG93LmRhdGFMYXllcjsgKi9cbiAgICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFncmVnYSBkYXRvcyBhbCBkYXRhTGF5ZXIuXG4gICAgICogQHBhcmFtIG9iaiBcbiAgICAgKi9cbiAgICBwcml2YXRlIHB1c2hPbkRhdGFMYXllcihvYmo6IG9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhTGF5ZXIgPSB0aGlzLmdldERhdGFMYXllcigpO1xuICAgICAgICBkYXRhTGF5ZXIucHVzaChvYmopO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZ3JlZ2EgZWwgc2NyaXB0IGRlIEdUTSBwYXJhIHF1ZSBlbXBpZWNlIGEgY2FwdHVyYXIgZXZlbnRvcy5cbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkR3RtVG9Eb20oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmlzTG9hZGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy9jb25zdCBkb2MgPSB0aGlzLmJyb3dzZXJHbG9iYWxzLmRvY3VtZW50UmVmKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoT25EYXRhTGF5ZXIoeyAnZ3RtLnN0YXJ0JzogbmV3IERhdGUoKS5nZXRUaW1lKCksIGV2ZW50OiAnZ3RtLmpzJyB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGd0bVNjcmlwdCA9IHRoaXMuZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpIC8vZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgIGlmKGd0bVNjcmlwdCl7XG4gICAgICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5pZCA9ICdHVE1zY3JpcHQnO1xuICAgICAgICAgICAgICAgICAgICBndG1TY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBndG1TY3JpcHQuc3JjID0gdGhpcy5hcHBseUd0bVF1ZXJ5UGFyYW1zKHRoaXMuY29uZmlnW1wiZ3RtX3Jlc291cmNlX3BhdGhcIl0gPyB0aGlzLmNvbmZpZ1tcImd0bV9yZXNvdXJjZV9wYXRoXCJdIDogJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcycpO1xuICAgICAgICAgICAgICAgICAgICBndG1TY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaXNMb2FkZWQgPSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudD8uaGVhZC5pbnNlcnRCZWZvcmUoZ3RtU2NyaXB0LCB0aGlzLmRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlHdG1RdWVyeVBhcmFtcyh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID09PSAtMSkge1xuICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHVybCArIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5maWx0ZXIoKGspID0+IHRoaXMuY29uZmlnW2tdKS5tYXAoKGspID0+IGAke2t9PSR7dGhpcy5jb25maWdba11cbiAgICAgICAgICAgIH1gKS5qb2luKCcmJykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIGVsIFNlcnZpY2lvIGRlIGFuYWx5dGljcyBjb24gc3VzIGNvbmZpZ3VyYWNpb25lcy5cbiAgICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYWNpb25lcyBkZSBHb29nbGUgVGFnIE1hbmFnZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZShjb25maWc6IEdvb2dsZVRhZ01hbmFnZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWcgfHwgdGhpcy5jb25maWc7XG4gICAgICAgIHRoaXMuYWRkR3RtVG9Eb20oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBndG1UYWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ3BhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU5hbWU6IGl0ZW0udXJsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaFRhZyhndG1UYWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHB1YmxpYyBwdXNoVGFnKGl0ZW06IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHdG1Ub0RvbSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hPbkRhdGFMYXllcihpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiByZWplY3QoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaE9uRGF0YUxheWVyKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFamVjdXRhIGVsIGV2ZW50byBwYXNhZG8gcG9yIHBhcmFtZXRyby4gXG4gICAgICogQHBhcmFtIGV2ZW50X25hbWUgTm9tYnJlIGRlbCBldmVudG8uXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSBleHRyYSBwYXJhIGFncmVnYXIgYWwgZXZlbnRvLlxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGNhbGxFdmVudChldmVudF9uYW1lOiBBbmFseXRpY0V2ZW50S2V5LCBkYXRhID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKSByZXR1cm47XG4gICAgICAgIGxldCBldmVudCA9IHRoaXMudHJhbnNsYXRlRXZlbnROYW1lKGV2ZW50X25hbWUpO1xuICAgICAgICBldmVudCAmJiB0aGlzLnB1c2hUYWcoeyBlY29tbWVyY2U6IG51bGwgfSlcbiAgICAgICAgZXZlbnQgJiYgdGhpcy5wdXNoVGFnKHsgJ2V2ZW50JzogdGhpcy50cmFuc2xhdGVFdmVudE5hbWUoZXZlbnRfbmFtZSksIGVjb21tZXJjZTogdGhpcy5ldmFsRXZlbnQoZXZlbnRfbmFtZSwgZGF0YSkgfSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhZHVjZSBlbCBldmVudG8gcmVjaWJpZG8geSBkZXZ1ZWx2ZSBlbCBub21icmUgZGUgbGEgZnVuY2nDs24gcXVlIGxvIHZhIGEgdHJhdGFyLlxuICAgICAqIEBwYXJhbSBldmVudF9uYW1lIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHRyYW5zbGF0ZUV2ZW50TmFtZShldmVudF9uYW1lOiBBbmFseXRpY0V2ZW50S2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnRfbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtJzogcmV0dXJuICd2aWV3X2l0ZW0nO1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtX2xpc3QnOiByZXR1cm4gJ3ZpZXdfaXRlbV9saXN0JztcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrb3V0X2luaXQnOiByZXR1cm4gJ2JlZ2luX2NoZWNrb3V0JztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBwaW5nX2luZm8nOiByZXR1cm4gJ2FkZF9zaGlwcGluZ19pbmZvJztcbiAgICAgICAgICAgIGNhc2UgJ2FkZF9wYXltZW50X2luZm8nOiByZXR1cm4gJ2FkZF9wYXltZW50X2luZm8nO1xuICAgICAgICAgICAgY2FzZSAncHVyY2hhc2UnOiByZXR1cm4gJ3B1cmNoYXNlJztcbiAgICAgICAgICAgIGNhc2UgJ2FkZF90b19jYXJ0JzogcmV0dXJuICdhZGRfdG9fY2FydCc7XG4gICAgICAgICAgICBjYXNlICdyZW1vdmVfZnJvbV9jYXJ0JzogcmV0dXJuICdyZW1vdmVfZnJvbV9jYXJ0JztcbiAgICAgICAgICAgIGNhc2UgJ3NpZ25fdXAnOiByZXR1cm4gJ3NpZ25fdXAnO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0X3Byb21vdGlvbic6IHJldHVybiAnc2VsZWN0X3Byb21vdGlvbic7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3RfaXRlbSc6IHJldHVybiAnc2VsZWN0X2l0ZW0nO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZhbHVhIGVsIGV2ZW50byB5IGRldnVlbHZlIGxvcyBkYXRvcyBkZSBsYXMgZnVuY2lvbmVzIHJlbGFjaW9uYWRhcy5cbiAgICAgKiBAcGFyYW0gZXZlbnRfbmFtZSBOb21icmUgZGVsIGV2ZW50b1xuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgZXh0cmEgcGFyYSBhZ3JlZ2FyIGFsIGV2ZW50b1xuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGV2YWxFdmVudChldmVudF9uYW1lOiBBbmFseXRpY0V2ZW50S2V5LCBkYXRhOiBhbnkpIHtcbiAgICAgICAgc3dpdGNoIChldmVudF9uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICd2aWV3X2l0ZW0nOiByZXR1cm4gdGhpcy50b1ZpZXdJdGVtKGRhdGEpO1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtX2xpc3QnOiByZXR1cm4gdGhpcy50b1ZpZXdJdGVtTGlzdChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrb3V0X2luaXQnOiByZXR1cm4gdGhpcy50b0NoZWNrb3V0SW5pdChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBwaW5nX2luZm8nOiByZXR1cm4gdGhpcy50b1NoaXBwaW5nSW5mbyhkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ2FkZF9wYXltZW50X2luZm8nOiByZXR1cm4gdGhpcy50b1BheW1lbnRJbmZvKGRhdGEpO1xuICAgICAgICAgICAgY2FzZSAncHVyY2hhc2UnOiByZXR1cm4gdGhpcy50b1B1cmNoYXNlKGRhdGEpO1xuICAgICAgICAgICAgY2FzZSAnYWRkX3RvX2NhcnQnOiByZXR1cm4gdGhpcy50b0FkZFRvQ2FydChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZV9mcm9tX2NhcnQnOiByZXR1cm4gdGhpcy50b1JlbW92ZVRvQ2FydChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NpZ25fdXAnOiByZXR1cm4gdGhpcy50b1NpZ25VcChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdF9wcm9tb3Rpb24nOiByZXR1cm4gdGhpcy50b1NlbGVjdFByb21vdGlvbihkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdF9pdGVtJzogcmV0dXJuIHRoaXMudG9TZWxlY3RJdGVtKGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBxdWllcmUgY29tcHJhciB1biBwcm9kdWN0by5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvUHVyY2hhc2UoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3Vwb246IHRoaXMudG9DYXJ0RGlzY291bnQoZGF0YSksXG4gICAgICAgICAgICBjdXJyZW5jeTogZGF0YS5jdXJyZW5jeSxcbiAgICAgICAgICAgIHNoaXBwaW5nOiBkYXRhLnRvdGFscy5zaGlwcGluZyxcbiAgICAgICAgICAgIHRheDogZGF0YS50b3RhbHMudGF4ZXMsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS50b3RhbHMudG90YWwsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbl9pZDogZGF0YS5udW1iZXIsXG4gICAgICAgICAgICBjb3VudEl0ZW1zOiBkYXRhLml0ZW1zPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICBpdGVtX25hbWU6IGl0ZW0ucHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIC8vY291cG9uOicnLFxuICAgICAgICAgICAgICAgIGRpc2NvdW50OiBpdGVtLnByb2R1Y3QuZGlzY291bnQgfHwgMCxcbiAgICAgICAgICAgICAgICAvL2luZGV4OicnLFxuICAgICAgICAgICAgICAgIGl0ZW1fYnJhbmQ6IGl0ZW0ucHJvZHVjdC5hdHRyaWJ1dGVzPy5sZW5ndGggPyBpdGVtLnByb2R1Y3QuYXR0cmlidXRlc1swXS5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogaXRlbS5wcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5jb2RlIHx8ICcnLFxuICAgICAgICAgICAgICAgIC8vbG9jYXRpb25faWQ6ICcnLFxuICAgICAgICAgICAgICAgIHByaWNlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnNhbGVwcmljZSB8fCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnByaWNlLFxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5IHx8IDEsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGluaWNpYWxpemEgZW4gY2hlY2tvdXQuXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0NoZWNrb3V0SW5pdChkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdXBvbjogdGhpcy50b0NhcnREaXNjb3VudChkYXRhKSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBkYXRhLmN1cnJlbmN5IHx8IFwiVVNEXCIsXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBpdGVtLnByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5wcm9kdWN0LmRpc2NvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBpdGVtLnByb2R1Y3QuYXR0cmlidXRlcz8ubGVuZ3RoID8gaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0ucHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9pZDogJycsXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LmNvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc2FsZXByaWNlIHx8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnRvdGFscz8udG90YWwgfHwgMCxcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY29uIGxvcyBkZXNjdWVudG9zIGVuIGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0NhcnREaXNjb3VudChkYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IHN0ckRpc2NvdW50ID0gJydcbiAgICAgICAgc3RyRGlzY291bnQgPSBkYXRhLmNhcnREaXNjb3VudHMubWFwKChpdGVtRGlzY291bnQ6IGFueSkgPT4gaXRlbURpc2NvdW50Py50eXBlKS5qb2luKClcbiAgICAgICAgcmV0dXJuIHN0ckRpc2NvdW50ID09ICcnID8gJ25vdC1kaXNjb3VudCcgOiBzdHJEaXNjb3VudFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGFncmVnYSB1biBwcm9kdWN0byBhbCBjYXJyaXRvLiBcbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvQWRkVG9DYXJ0KGRhdGE6IGFueSkge1xuICAgICAgICBsZXQgbGFzdFByb2R1Y3QgPSBkYXRhLml0ZW1zPy5sZW5ndGggJiYgZGF0YS5pdGVtc1tkYXRhLml0ZW1zLmxlbmd0aCAtIDFdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW5jeTogZGF0YS5jdXJyZW5jeSB8fCBcIlVTRFwiLFxuICAgICAgICAgICAgaXRlbXM6IFt0aGlzLnRvSXRlbSh7IHF1YW50aXR5OiBsYXN0UHJvZHVjdC5xdWFudGl0eSwgLi4ubGFzdFByb2R1Y3QucHJvZHVjdCB9KV0sXG4gICAgICAgICAgICB2YWx1ZTogbGFzdFByb2R1Y3QudG90YWwgfHwgMCxcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYW1iaWEgbGEgdmFyaWFibGUgKiplbmFibGVkKiogYSBgZmFsc2VgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgZGlzYWJsZSgpIHsgdGhpcy5lbmFibGVkID0gZmFsc2UgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBhIGxhcyB2aXN0YSBkZWwgcHJvZHVjdG8uXG4gICAgICogQHBhcmFtIHByb2R1Y3QgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b1ZpZXdJdGVtKHByb2R1Y3Q6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVuY3k6IHByb2R1Y3QuY3VycmVuY3ksXG4gICAgICAgICAgICB2YWx1ZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgICAgIGl0ZW1zOiBbdGhpcy50b0l0ZW0ocHJvZHVjdCldXG5cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGludGVyYWN0dWEgY29uIGVsIGxpc3RhZG8gZGUgcHJvZHVjdG9zLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9WaWV3SXRlbUxpc3QoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogZGF0YS5wcm9kdWN0cy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gdGhpcy50b0l0ZW0ocHJvZHVjdCkpLFxuICAgICAgICAgICAgaXRlbV9saXN0X25hbWU6IGRhdGEuaXRlbV9saXN0X25hbWUgfHwgJ0NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgaXRlbV9saXN0X2lkOiBkYXRhLml0ZW1fbGlzdF9pZCB8fCAwXG4gICAgICAgIH1cblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgcXVpdGEgdW4gaXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvUmVtb3ZlVG9DYXJ0KHByb2R1Y3Q6IGFueSkge1xuICAgICAgICBsZXQgcHJvZHVjdFBhcmFtID0gcHJvZHVjdC5wcm9kdWN0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW5jeTogcHJvZHVjdC5jdXJyZW5jeSB8fCBcIlVTRFwiLFxuICAgICAgICAgICAgaXRlbXM6IFt0aGlzLnRvSXRlbSh7IHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5LCAuLi5wcm9kdWN0UGFyYW0gfSldLFxuICAgICAgICAgICAgdmFsdWU6IChwcm9kdWN0UGFyYW0udmFyaWFudHNbMF0/LnNhbGVwcmljZSB8fCBwcm9kdWN0UGFyYW0udmFyaWFudHNbMF0/LnByaWNlKSAqIHByb2R1Y3QucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9JdGVtID0gKHByb2R1Y3Q6IGFueSkgPT4gKHtcbiAgICAgICAgaXRlbV9pZDogcHJvZHVjdC5pZCxcbiAgICAgICAgaXRlbV9uYW1lOiBwcm9kdWN0Lm5hbWUsXG4gICAgICAgIC8vY291cG9uOicnLFxuICAgICAgICBkaXNjb3VudDogcHJvZHVjdC5kaXNjb3VudCB8fCAwLFxuICAgICAgICAvL2luZGV4OicnLFxuICAgICAgICBpdGVtX2JyYW5kOiBwcm9kdWN0LmF0dHJpYnV0ZXM/Lmxlbmd0aCA/IHByb2R1Y3QuYXR0cmlidXRlc1swXS5uYW1lIDogJycsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IHByb2R1Y3QuY2F0ZWdvcnksXG4gICAgICAgIC8vaXRlbV9saXN0X2lkOiAnJyxcbiAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgIGl0ZW1fdmFyaWFudDogcHJvZHVjdC52YXJpYW50c1swXT8uY29kZSB8fCAnJyxcbiAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgIHByaWNlOiBwcm9kdWN0LnZhcmlhbnRzWzBdPy5zYWxlcHJpY2UgfHwgcHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5IHx8IDEsXG4gICAgfSlcbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGNvbnN1bHRhIGxhIGluZm9ybWFjacOzbiBkZSBwYWdvLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9QYXltZW50SW5mbyhkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdXBvbjogdGhpcy50b0NhcnREaXNjb3VudChkYXRhKSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBkYXRhLmN1cnJlbmN5IHx8IFwiVVNEXCIsXG4gICAgICAgICAgICBwYXltZW50X3R5cGU6IGRhdGEucGF5bWVudHNbMF0/Lm1ldGhvZD8uY29kZSB8fCAnbm90LXBheW1lbnRzJyxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnRvdGFscz8udG90YWwgfHwgMCxcbiAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICBpdGVtX25hbWU6IGl0ZW0ucHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIC8vY291cG9uOicnLFxuICAgICAgICAgICAgICAgIGRpc2NvdW50OiBpdGVtLnByb2R1Y3QuZGlzY291bnQgfHwgMCxcbiAgICAgICAgICAgICAgICAvL2luZGV4OicnLFxuICAgICAgICAgICAgICAgIGl0ZW1fYnJhbmQ6IGl0ZW0ucHJvZHVjdC5hdHRyaWJ1dGVzPy5sZW5ndGggPyBpdGVtLnByb2R1Y3QuYXR0cmlidXRlc1swXS5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogaXRlbS5wcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIC8vaXRlbV9saXN0X2lkOiAnJyxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9uYW1lOiAnJyxcbiAgICAgICAgICAgICAgICBpdGVtX3ZhcmlhbnQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uY29kZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAvL2xvY2F0aW9uX2lkOiAnJyxcbiAgICAgICAgICAgICAgICBwcmljZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zYWxlcHJpY2UgfHwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5wcmljZSxcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSB8fCAxLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBjb24gbG9zIG3DqXRvZG9zIGRlIGVudsOtby5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvU2hpcHBpbmdJbmZvKGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291cG9uOiB0aGlzLnRvQ2FydERpc2NvdW50KGRhdGEpLFxuICAgICAgICAgICAgY3VycmVuY3k6IGRhdGEuY3VycmVuY3kgfHwgXCJVU0RcIixcbiAgICAgICAgICAgIHNoaXBwaW5nX3RpZXI6IGRhdGEuc2hpcG1lbnRzWzBdPy5tZXRob2Q/LmNvZGUgfHwgJ25vdC1zaGlwcGluZycsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS50b3RhbHM/LnRvdGFsIHx8IDAsXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBpdGVtLnByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5wcm9kdWN0LmRpc2NvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBpdGVtLnByb2R1Y3QuYXR0cmlidXRlcz8ubGVuZ3RoID8gaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0ucHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9pZDogJycsXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LmNvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc2FsZXByaWNlIHx8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9TaWduVXAoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBpbnRlcmFjdHVhIGNvbiB1bmEgcHJvbW9jacOzbi5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvU2VsZWN0UHJvbW90aW9uKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb21vdGlvbl9pZDogZGF0YS5pZCB8fCAnJyxcbiAgICAgICAgICAgIHByb21vdGlvbl9uYW1lOiBkYXRhLmNvZGUgfHwgZGF0YS5uYW1lLFxuICAgICAgICAgICAgcHJvbW90aW9uX3RpdGxlOiBkYXRhLnN1YnRpdGxlLFxuICAgICAgICAgICAgbG9jYXRpb25faWQ6IGRhdGEucHJpb3JpdHkgfHwgMFxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzYXByYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBhbCBzZWxlY2Npb25hciB1biBpdGVtLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9TZWxlY3RJdGVtKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnRvSXRlbShkYXRhKVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
474
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvYW5hbHl0aWNzL2d0bS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUM5Qjs7R0FFRztBQUlILE1BQU0sT0FBTyxVQUFVO0lBQ25COztPQUVHO0lBQ0ssUUFBUSxHQUFZLEtBQUssQ0FBQztJQUNsQzs7T0FFRztJQUNLLE9BQU8sR0FBWSxLQUFLLENBQUM7SUFDakM7OztPQUdHO0lBQ0ssUUFBUSxDQUFZO0lBQzVCOztPQUVHO0lBQ0ssTUFBTSxDQUFVO0lBRWhCLGVBQWUsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsUUFBUSxHQUFvQixJQUFJLENBQUM7SUFDekM7O09BRUc7SUFDSyxNQUFNLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDOztPQUVHO0lBQ0ssTUFBTSxHQUEyQixFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUM3QyxVQUFVLEdBQVEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzdDO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJ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SSxDQUFDO1NBQzNCLENBQUE7SUFDTCxDQUFDO3dHQWhlUSxVQUFVOzRHQUFWLFVBQVUsY0FGUCxNQUFNOzs0RkFFVCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFmdGVyUmVuZGVyLCBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuYWx5dGljRXZlbnRLZXksIEdvb2dsZVRhZ01hbmFnZXJDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG4vKipcbiAqIFNlcnZpY2lvIHF1ZSBzZSBlbmNhcmdhIGRlIG1hbmVqYXIgZWwgYW5hbHl0aWNzIGRlIEdUTS5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHVE1TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBJbmRpY2Egc2kgc2UgZXN0YSBjYXJnYW5kbyBlbCBzZXJ2aWNpby5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogSW5kaWNhIGN1YW5kbyBlbCBzZXJ2aWNpbyBlc3RhIGhhYmlsaXRhZG8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBlbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogU2UgZW5jYXJnYSBkZSBjcmVhciBlbCBlbGVtZW50byBIVE1MIGNvbiBsYXMgY29uZmlndXJhY2lvbmVzIHBhcmEgXG4gICAgICogcXVlIHNlIHB1ZWRhIGVqZWN1dGFyIGVsIHNlcnZpY2lvLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgICAvKipcbiAgICAgKiBBbG1hY2VuYSBlbCBvYmplY3RvIHdpbmRvdyBkZWwgbmF2ZWdhZG9yLlxuICAgICAqL1xuICAgIHByaXZhdGUgd2luZG93PzogV2luZG93O1xuXG4gICAgcHJpdmF0ZSByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5Mik7XG4gICAgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBTZXJ2aWNpbyBkZSBydXRlbyBkZSBhbmd1bGFyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmFjacOzbiBkZSBHb29nbGUgVGFnIE1hbmFnZXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWc6IEdvb2dsZVRhZ01hbmFnZXJDb25maWcgPSB7IGlkOiBudWxsIH1cbiAgICBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgdGhpcy53aW5kb3cgPSB3aW5kb3dcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNvIGFsIHdpbmRvdyBTU1Itc2FmZSAqL1xuICAgIHByaXZhdGUgZ2V0IHdpbmRvd1JlZigpOiBhbnkgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB3aW5kb3cgYXMgYW55O1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc28gYWwgZG9jdW1lbnQgU1NSLXNhZmUgKi9cbiAgICBwcml2YXRlIGdldCBkb2N1bWVudFJlZigpOiBEb2N1bWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Jyb3dzZXIgPyB0aGlzLmRvY3VtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPYnRpZW5lIGVsIGRhdGFMYXllciBkZWwgb2JqZWN0byB3aW5kb3dcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGF0YUxheWVyKCk6IGFueVtdIHtcbiAgICAgICAgY29uc3Qgd2luID0gdGhpcy53aW5kb3dSZWY7XG4gICAgICAgIGlmICghd2luKSByZXR1cm4gW107XG4gICAgICAgIHdpbi5kYXRhTGF5ZXIgPSB3aW4uZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICByZXR1cm4gd2luLmRhdGFMYXllcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWdyZWdhIGRhdG9zIGFsIGRhdGFMYXllci5cbiAgICAgKiBAcGFyYW0gb2JqIFxuICAgICAqL1xuICAgIHByaXZhdGUgcHVzaE9uRGF0YUxheWVyKG9iajogb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFMYXllciA9IHRoaXMuZ2V0RGF0YUxheWVyKCk7XG4gICAgICAgIGlmICghZGF0YUxheWVyLmxlbmd0aCAmJiAhdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcbiAgICAgICAgZGF0YUxheWVyLnB1c2gob2JqKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWdyZWdhIGVsIHNjcmlwdCBkZSBHVE0gcGFyYSBxdWUgZW1waWVjZSBhIGNhcHR1cmFyIGV2ZW50b3MuXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHVibGljIGFkZEd0bVRvRG9tKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoXG4gICAgICAgICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaXNMb2FkZWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZG9jdW1lbnRSZWY7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoJ0dUTXNjcmlwdCcpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoT25EYXRhTGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgICAnZ3RtLnN0YXJ0JzogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnZ3RtLmpzJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZ3RtU2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgIGlmICghZ3RtU2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5pZCA9ICdHVE1zY3JpcHQnO1xuICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZ3RtU2NyaXB0LnNyYyA9IHRoaXMuYXBwbHlHdG1RdWVyeVBhcmFtcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdbJ2d0bV9yZXNvdXJjZV9wYXRoJ11cbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jb25maWdbJ2d0bV9yZXNvdXJjZV9wYXRoJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcydcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZ3RtU2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRvYy5oZWFkXG4gICAgICAgICAgICAgICAgICAgID8gZG9jLmhlYWQuaW5zZXJ0QmVmb3JlKGd0bVNjcmlwdCwgZG9jLmhlYWQuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgOiBkb2MuYXBwZW5kQ2hpbGQoZ3RtU2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5R3RtUXVlcnlQYXJhbXModXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHVybCArPSAnPyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh1cmwgKyBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykuZmlsdGVyKChrKSA9PiB0aGlzLmNvbmZpZ1trXSkubWFwKChrKSA9PiBgJHtrfT0ke3RoaXMuY29uZmlnW2tdXG4gICAgICAgICAgICB9YCkuam9pbignJicpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pY2lhbGl6YSBlbCBTZXJ2aWNpbyBkZSBhbmFseXRpY3MgY29uIHN1cyBjb25maWd1cmFjaW9uZXMuXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmFjaW9uZXMgZGUgR29vZ2xlIFRhZyBNYW5hZ2VyXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxpemUoY29uZmlnOiBHb29nbGVUYWdNYW5hZ2VyQ29uZmlnKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkZWQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB0aGlzLmNvbmZpZztcblxuICAgICAgICBpZiAoIWNvbmZpZz8uaWQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmFkZEd0bVRvRG9tKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3RtVGFnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VOYW1lOiBldmVudC51cmxBZnRlclJlZGlyZWN0cyA/PyBldmVudC51cmxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoVGFnKGd0bVRhZyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXNoVGFnKGl0ZW06IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWc/LmlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHdG1Ub0RvbSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoT25EYXRhTGF5ZXIoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE9uRGF0YUxheWVyKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRWplY3V0YSBlbCBldmVudG8gcGFzYWRvIHBvciBwYXJhbWV0cm8uIFxuICAgICAqIEBwYXJhbSBldmVudF9uYW1lIE5vbWJyZSBkZWwgZXZlbnRvLlxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgZXh0cmEgcGFyYSBhZ3JlZ2FyIGFsIGV2ZW50by5cbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBjYWxsRXZlbnQoZXZlbnRfbmFtZTogQW5hbHl0aWNFdmVudEtleSwgZGF0YSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xvYWRlZCkgcmV0dXJuO1xuICAgICAgICBsZXQgZXZlbnQgPSB0aGlzLnRyYW5zbGF0ZUV2ZW50TmFtZShldmVudF9uYW1lKTtcbiAgICAgICAgZXZlbnQgJiYgdGhpcy5wdXNoVGFnKHsgZWNvbW1lcmNlOiBudWxsIH0pXG4gICAgICAgIGV2ZW50ICYmIHRoaXMucHVzaFRhZyh7ICdldmVudCc6IHRoaXMudHJhbnNsYXRlRXZlbnROYW1lKGV2ZW50X25hbWUpLCBlY29tbWVyY2U6IHRoaXMuZXZhbEV2ZW50KGV2ZW50X25hbWUsIGRhdGEpIH0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYWR1Y2UgZWwgZXZlbnRvIHJlY2liaWRvIHkgZGV2dWVsdmUgZWwgbm9tYnJlIGRlIGxhIGZ1bmNpw7NuIHF1ZSBsbyB2YSBhIHRyYXRhci5cbiAgICAgKiBAcGFyYW0gZXZlbnRfbmFtZSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICB0cmFuc2xhdGVFdmVudE5hbWUoZXZlbnRfbmFtZTogQW5hbHl0aWNFdmVudEtleSkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50X25hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXdfaXRlbSc6IHJldHVybiAndmlld19pdGVtJztcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXdfaXRlbV9saXN0JzogcmV0dXJuICd2aWV3X2l0ZW1fbGlzdCc7XG4gICAgICAgICAgICBjYXNlICdjaGVja291dF9pbml0JzogcmV0dXJuICdiZWdpbl9jaGVja291dCc7XG4gICAgICAgICAgICBjYXNlICdzaGlwcGluZ19pbmZvJzogcmV0dXJuICdhZGRfc2hpcHBpbmdfaW5mbyc7XG4gICAgICAgICAgICBjYXNlICdhZGRfcGF5bWVudF9pbmZvJzogcmV0dXJuICdhZGRfcGF5bWVudF9pbmZvJztcbiAgICAgICAgICAgIGNhc2UgJ3B1cmNoYXNlJzogcmV0dXJuICdwdXJjaGFzZSc7XG4gICAgICAgICAgICBjYXNlICdhZGRfdG9fY2FydCc6IHJldHVybiAnYWRkX3RvX2NhcnQnO1xuICAgICAgICAgICAgY2FzZSAncmVtb3ZlX2Zyb21fY2FydCc6IHJldHVybiAncmVtb3ZlX2Zyb21fY2FydCc7XG4gICAgICAgICAgICBjYXNlICdzaWduX3VwJzogcmV0dXJuICdzaWduX3VwJztcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdF9wcm9tb3Rpb24nOiByZXR1cm4gJ3NlbGVjdF9wcm9tb3Rpb24nO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0X2l0ZW0nOiByZXR1cm4gJ3NlbGVjdF9pdGVtJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2YWx1YSBlbCBldmVudG8geSBkZXZ1ZWx2ZSBsb3MgZGF0b3MgZGUgbGFzIGZ1bmNpb25lcyByZWxhY2lvbmFkYXMuXG4gICAgICogQHBhcmFtIGV2ZW50X25hbWUgTm9tYnJlIGRlbCBldmVudG9cbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIGV4dHJhIHBhcmEgYWdyZWdhciBhbCBldmVudG9cbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBldmFsRXZlbnQoZXZlbnRfbmFtZTogQW5hbHl0aWNFdmVudEtleSwgZGF0YTogYW55KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnRfbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtJzogcmV0dXJuIHRoaXMudG9WaWV3SXRlbShkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXdfaXRlbV9saXN0JzogcmV0dXJuIHRoaXMudG9WaWV3SXRlbUxpc3QoZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdjaGVja291dF9pbml0JzogcmV0dXJuIHRoaXMudG9DaGVja291dEluaXQoZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdzaGlwcGluZ19pbmZvJzogcmV0dXJuIHRoaXMudG9TaGlwcGluZ0luZm8oZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdhZGRfcGF5bWVudF9pbmZvJzogcmV0dXJuIHRoaXMudG9QYXltZW50SW5mbyhkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3B1cmNoYXNlJzogcmV0dXJuIHRoaXMudG9QdXJjaGFzZShkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ2FkZF90b19jYXJ0JzogcmV0dXJuIHRoaXMudG9BZGRUb0NhcnQoZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdyZW1vdmVfZnJvbV9jYXJ0JzogcmV0dXJuIHRoaXMudG9SZW1vdmVUb0NhcnQoZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdzaWduX3VwJzogcmV0dXJuIHRoaXMudG9TaWduVXAoZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3RfcHJvbW90aW9uJzogcmV0dXJuIHRoaXMudG9TZWxlY3RQcm9tb3Rpb24oZGF0YSk7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3RfaXRlbSc6IHJldHVybiB0aGlzLnRvU2VsZWN0SXRlbShkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgcXVpZXJlIGNvbXByYXIgdW4gcHJvZHVjdG8uXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b1B1cmNoYXNlKGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291cG9uOiB0aGlzLnRvQ2FydERpc2NvdW50KGRhdGEpLFxuICAgICAgICAgICAgY3VycmVuY3k6IGRhdGEuY3VycmVuY3ksXG4gICAgICAgICAgICBzaGlwcGluZzogZGF0YS50b3RhbHMuc2hpcHBpbmcsXG4gICAgICAgICAgICB0YXg6IGRhdGEudG90YWxzLnRheGVzLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGEudG90YWxzLnRvdGFsLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IGRhdGEubnVtYmVyLFxuICAgICAgICAgICAgY291bnRJdGVtczogZGF0YS5pdGVtcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBpdGVtLnByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5wcm9kdWN0LmRpc2NvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBpdGVtLnByb2R1Y3QuYXR0cmlidXRlcz8ubGVuZ3RoID8gaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0ucHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICBpdGVtX3ZhcmlhbnQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uY29kZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAvL2xvY2F0aW9uX2lkOiAnJyxcbiAgICAgICAgICAgICAgICBwcmljZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zYWxlcHJpY2UgfHwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5wcmljZSxcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSB8fCAxLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBpbmljaWFsaXphIGVuIGNoZWNrb3V0LlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9DaGVja291dEluaXQoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3Vwb246IHRoaXMudG9DYXJ0RGlzY291bnQoZGF0YSksXG4gICAgICAgICAgICBjdXJyZW5jeTogZGF0YS5jdXJyZW5jeSB8fCBcIlVTRFwiLFxuICAgICAgICAgICAgaXRlbXM6IGRhdGEuaXRlbXMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgaXRlbV9pZDogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogaXRlbS5wcm9kdWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgLy9jb3Vwb246JycsXG4gICAgICAgICAgICAgICAgZGlzY291bnQ6IGl0ZW0ucHJvZHVjdC5kaXNjb3VudCB8fCAwLFxuICAgICAgICAgICAgICAgIC8vaW5kZXg6JycsXG4gICAgICAgICAgICAgICAgaXRlbV9icmFuZDogaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXM/Lmxlbmd0aCA/IGl0ZW0ucHJvZHVjdC5hdHRyaWJ1dGVzWzBdLm5hbWUgOiAnJyxcbiAgICAgICAgICAgICAgICBpdGVtX2NhdGVnb3J5OiBpdGVtLnByb2R1Y3QuY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfaWQ6ICcnLFxuICAgICAgICAgICAgICAgIC8vaXRlbV9saXN0X25hbWU6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5jb2RlIHx8ICcnLFxuICAgICAgICAgICAgICAgIC8vbG9jYXRpb25faWQ6ICcnLFxuICAgICAgICAgICAgICAgIHByaWNlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnNhbGVwcmljZSB8fCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnByaWNlLFxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5IHx8IDEsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS50b3RhbHM/LnRvdGFsIHx8IDAsXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGNvbiBsb3MgZGVzY3VlbnRvcyBlbiBlbCBjYXJyaXRvLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9DYXJ0RGlzY291bnQoZGF0YTogYW55KSB7XG4gICAgICAgIGxldCBzdHJEaXNjb3VudCA9ICcnXG4gICAgICAgIHN0ckRpc2NvdW50ID0gZGF0YS5jYXJ0RGlzY291bnRzLm1hcCgoaXRlbURpc2NvdW50OiBhbnkpID0+IGl0ZW1EaXNjb3VudD8udHlwZSkuam9pbigpXG4gICAgICAgIHJldHVybiBzdHJEaXNjb3VudCA9PSAnJyA/ICdub3QtZGlzY291bnQnIDogc3RyRGlzY291bnRcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBhZ3JlZ2EgdW4gcHJvZHVjdG8gYWwgY2Fycml0by4gXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0FkZFRvQ2FydChkYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IGxhc3RQcm9kdWN0ID0gZGF0YS5pdGVtcz8ubGVuZ3RoICYmIGRhdGEuaXRlbXNbZGF0YS5pdGVtcy5sZW5ndGggLSAxXVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVuY3k6IGRhdGEuY3VycmVuY3kgfHwgXCJVU0RcIixcbiAgICAgICAgICAgIGl0ZW1zOiBbdGhpcy50b0l0ZW0oeyBxdWFudGl0eTogbGFzdFByb2R1Y3QucXVhbnRpdHksIC4uLmxhc3RQcm9kdWN0LnByb2R1Y3QgfSldLFxuICAgICAgICAgICAgdmFsdWU6IGxhc3RQcm9kdWN0LnRvdGFsIHx8IDAsXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FtYmlhIGxhIHZhcmlhYmxlICoqZW5hYmxlZCoqIGEgYGZhbHNlYFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGRpc2FibGUoKSB7IHRoaXMuZW5hYmxlZCA9IGZhbHNlIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGludGVyYWN0dWEgYSBsYXMgdmlzdGEgZGVsIHByb2R1Y3RvLlxuICAgICAqIEBwYXJhbSBwcm9kdWN0IFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9WaWV3SXRlbShwcm9kdWN0OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbmN5OiBwcm9kdWN0LmN1cnJlbmN5LFxuICAgICAgICAgICAgdmFsdWU6IHByb2R1Y3QucHJpY2UsXG4gICAgICAgICAgICBpdGVtczogW3RoaXMudG9JdGVtKHByb2R1Y3QpXVxuXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBpbnRlcmFjdHVhIGNvbiBlbCBsaXN0YWRvIGRlIHByb2R1Y3Rvcy5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvVmlld0l0ZW1MaXN0KGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IGRhdGEucHJvZHVjdHMubWFwKChwcm9kdWN0OiBhbnkpID0+IHRoaXMudG9JdGVtKHByb2R1Y3QpKSxcbiAgICAgICAgICAgIGl0ZW1fbGlzdF9uYW1lOiBkYXRhLml0ZW1fbGlzdF9uYW1lIHx8ICdDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIGl0ZW1fbGlzdF9pZDogZGF0YS5pdGVtX2xpc3RfaWQgfHwgMFxuICAgICAgICB9XG5cblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIHF1aXRhIHVuIGl0ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIHByb2R1Y3QgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b1JlbW92ZVRvQ2FydChwcm9kdWN0OiBhbnkpIHtcbiAgICAgICAgbGV0IHByb2R1Y3RQYXJhbSA9IHByb2R1Y3QucHJvZHVjdFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVuY3k6IHByb2R1Y3QuY3VycmVuY3kgfHwgXCJVU0RcIixcbiAgICAgICAgICAgIGl0ZW1zOiBbdGhpcy50b0l0ZW0oeyBxdWFudGl0eTogcHJvZHVjdC5xdWFudGl0eSwgLi4ucHJvZHVjdFBhcmFtIH0pXSxcbiAgICAgICAgICAgIHZhbHVlOiAocHJvZHVjdFBhcmFtLnZhcmlhbnRzWzBdPy5zYWxlcHJpY2UgfHwgcHJvZHVjdFBhcmFtLnZhcmlhbnRzWzBdPy5wcmljZSkgKiBwcm9kdWN0LnF1YW50aXR5IHx8IDEsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvSXRlbSA9IChwcm9kdWN0OiBhbnkpID0+ICh7XG4gICAgICAgIGl0ZW1faWQ6IHByb2R1Y3QuaWQsXG4gICAgICAgIGl0ZW1fbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgZGlzY291bnQ6IHByb2R1Y3QuZGlzY291bnQgfHwgMCxcbiAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgaXRlbV9icmFuZDogcHJvZHVjdC5hdHRyaWJ1dGVzPy5sZW5ndGggPyBwcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBwcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICAvL2l0ZW1fbGlzdF9pZDogJycsXG4gICAgICAgIC8vaXRlbV9saXN0X25hbWU6ICcnLFxuICAgICAgICBpdGVtX3ZhcmlhbnQ6IHByb2R1Y3QudmFyaWFudHNbMF0/LmNvZGUgfHwgJycsXG4gICAgICAgIC8vbG9jYXRpb25faWQ6ICcnLFxuICAgICAgICBwcmljZTogcHJvZHVjdC52YXJpYW50c1swXT8uc2FsZXByaWNlIHx8IHByb2R1Y3QudmFyaWFudHNbMF0/LnByaWNlLFxuICAgICAgICBxdWFudGl0eTogcHJvZHVjdC5xdWFudGl0eSB8fCAxLFxuICAgIH0pXG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBjb25zdWx0YSBsYSBpbmZvcm1hY2nDs24gZGUgcGFnby5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvUGF5bWVudEluZm8oZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3Vwb246IHRoaXMudG9DYXJ0RGlzY291bnQoZGF0YSksXG4gICAgICAgICAgICBjdXJyZW5jeTogZGF0YS5jdXJyZW5jeSB8fCBcIlVTRFwiLFxuICAgICAgICAgICAgcGF5bWVudF90eXBlOiBkYXRhLnBheW1lbnRzWzBdPy5tZXRob2Q/LmNvZGUgfHwgJ25vdC1wYXltZW50cycsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS50b3RhbHM/LnRvdGFsIHx8IDAsXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBpdGVtLnByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5wcm9kdWN0LmRpc2NvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBpdGVtLnByb2R1Y3QuYXR0cmlidXRlcz8ubGVuZ3RoID8gaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0ucHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9pZDogJycsXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LmNvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc2FsZXByaWNlIHx8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGludGVyYWN0dWEgY29uIGxvcyBtw6l0b2RvcyBkZSBlbnbDrW8uXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b1NoaXBwaW5nSW5mbyhkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdXBvbjogdGhpcy50b0NhcnREaXNjb3VudChkYXRhKSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBkYXRhLmN1cnJlbmN5IHx8IFwiVVNEXCIsXG4gICAgICAgICAgICBzaGlwcGluZ190aWVyOiBkYXRhLnNoaXBtZW50c1swXT8ubWV0aG9kPy5jb2RlIHx8ICdub3Qtc2hpcHBpbmcnLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGEudG90YWxzPy50b3RhbCB8fCAwLFxuICAgICAgICAgICAgaXRlbXM6IGRhdGEuaXRlbXMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgaXRlbV9pZDogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogaXRlbS5wcm9kdWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgLy9jb3Vwb246JycsXG4gICAgICAgICAgICAgICAgZGlzY291bnQ6IGl0ZW0ucHJvZHVjdC5kaXNjb3VudCB8fCAwLFxuICAgICAgICAgICAgICAgIC8vaW5kZXg6JycsXG4gICAgICAgICAgICAgICAgaXRlbV9icmFuZDogaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXM/Lmxlbmd0aCA/IGl0ZW0ucHJvZHVjdC5hdHRyaWJ1dGVzWzBdLm5hbWUgOiAnJyxcbiAgICAgICAgICAgICAgICBpdGVtX2NhdGVnb3J5OiBpdGVtLnByb2R1Y3QuY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfaWQ6ICcnLFxuICAgICAgICAgICAgICAgIC8vaXRlbV9saXN0X25hbWU6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5jb2RlIHx8ICcnLFxuICAgICAgICAgICAgICAgIC8vbG9jYXRpb25faWQ6ICcnLFxuICAgICAgICAgICAgICAgIHByaWNlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnNhbGVwcmljZSB8fCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnByaWNlLFxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5IHx8IDEsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvU2lnblVwKGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBjb24gdW5hIHByb21vY2nDs24uXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b1NlbGVjdFByb21vdGlvbihkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9tb3Rpb25faWQ6IGRhdGEuaWQgfHwgJycsXG4gICAgICAgICAgICBwcm9tb3Rpb25fbmFtZTogZGF0YS5jb2RlIHx8IGRhdGEubmFtZSxcbiAgICAgICAgICAgIHByb21vdGlvbl90aXRsZTogZGF0YS5zdWJ0aXRsZSxcbiAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBkYXRhLnByaW9yaXR5IHx8IDBcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc2FwcmEgY3VhbmRvIHNlIGludGVyYWN0dWEgYWwgc2VsZWNjaW9uYXIgdW4gaXRlbS5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvU2VsZWN0SXRlbShkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogdGhpcy50b0l0ZW0oZGF0YSlcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { inject, Injectable } from '@angular/core';
|
|
1
|
+
import { inject, Injectable, PLATFORM_ID } from '@angular/core';
|
|
2
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
3
|
import { ConnectionService } from '../api';
|
|
3
4
|
import { BehaviorSubject, catchError, map, of, shareReplay } from 'rxjs';
|
|
4
5
|
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
@@ -12,6 +13,10 @@ export class OptionsService {
|
|
|
12
13
|
* Maneja las peticiones a la API
|
|
13
14
|
*/
|
|
14
15
|
connection = inject(ConnectionService);
|
|
16
|
+
/**
|
|
17
|
+
* Platform ID para verificar si estamos en el navegador
|
|
18
|
+
*/
|
|
19
|
+
platformId = inject(PLATFORM_ID);
|
|
15
20
|
/**
|
|
16
21
|
* Constantes del core
|
|
17
22
|
*/
|
|
@@ -122,7 +127,26 @@ export class OptionsService {
|
|
|
122
127
|
* @returns
|
|
123
128
|
*/
|
|
124
129
|
removeAccents(str) {
|
|
125
|
-
|
|
130
|
+
if (isPlatformBrowser(this.platformId) && typeof String.prototype.normalize === 'function') {
|
|
131
|
+
return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
132
|
+
}
|
|
133
|
+
// Fallback para SSR - remover acentos manualmente
|
|
134
|
+
return str.replace(/[àáâãäå]/g, 'a')
|
|
135
|
+
.replace(/[èéêë]/g, 'e')
|
|
136
|
+
.replace(/[ìíîï]/g, 'i')
|
|
137
|
+
.replace(/[òóôõö]/g, 'o')
|
|
138
|
+
.replace(/[ùúûü]/g, 'u')
|
|
139
|
+
.replace(/[ýÿ]/g, 'y')
|
|
140
|
+
.replace(/[ñ]/g, 'n')
|
|
141
|
+
.replace(/[ç]/g, 'c')
|
|
142
|
+
.replace(/[ÀÁÂÃÄÅ]/g, 'A')
|
|
143
|
+
.replace(/[ÈÉÊË]/g, 'E')
|
|
144
|
+
.replace(/[ÌÍÎÏ]/g, 'I')
|
|
145
|
+
.replace(/[ÒÓÔÕÖ]/g, 'O')
|
|
146
|
+
.replace(/[ÙÚÛÜ]/g, 'U')
|
|
147
|
+
.replace(/[ÝŸ]/g, 'Y')
|
|
148
|
+
.replace(/[Ñ]/g, 'N')
|
|
149
|
+
.replace(/[Ç]/g, 'C');
|
|
126
150
|
}
|
|
127
151
|
/**
|
|
128
152
|
* Realiza un mapeo de los datos para darle un formato mas entendible a la
|
|
@@ -302,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
302
326
|
providedIn: 'root'
|
|
303
327
|
}]
|
|
304
328
|
}], ctorParameters: () => [] });
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL29wdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQVEsTUFBTSxNQUFNLENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUd6RTs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sY0FBYztJQUMxQjs7T0FFRztJQUNLLFVBQVUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQzs7T0FFRztJQUNLLFNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRDs7T0FFRztJQUNLLFlBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNuRDs7T0FFRztJQUNLLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsR0FBMkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BGOztPQUVHO0lBQ0ssZUFBZSxHQUFHLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELFNBQVMsR0FBMEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvRTs7T0FFRztJQUNLLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELFdBQVcsR0FBNEIs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QUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtxQkFDakksQ0FBQyxDQUFDO2lCQUNILENBQUM7Z0JBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBNVNXLGNBQWM7NEdBQWQsY0FBYyxjQUZkLE1BQU07OzRGQUVOLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlLCBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUsIENhdGVnb3J5LCBGQVEsIFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuLyoqXG4gKiBFc3RlIHNlcnZpY2lvIHBlcm1pdGUgbWFuZWphIGxhcyBDYXRlZ29yaWFzLCBTZWNjaW9uZXMgeSBBdHJpYnV0b3MgY29tbyBtZW51ZXMgXG4gKiBwYXJhIGxhIGFwbGljYWNpw7NuLiBcbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgT3B0aW9uc1NlcnZpY2Uge1xuXHQvKipcblx0ICogTWFuZWphIGxhcyBwZXRpY2lvbmVzIGEgbGEgQVBJXG5cdCAqL1xuXHRwcml2YXRlIGNvbm5lY3Rpb24gPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZWwgY29yZVxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdGFudHMgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RhbnRzID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHQvKipcblx0ICogTWFuZWphIGxvcyBjYW1iaW9zIGVuIGxhcyBjYXRlZ29yaWFzXG5cdCAqL1xuXHRwcml2YXRlIGNhdGVnb3JpZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXRlZ29yeVtdPihbXSk7XG5cdHByaXZhdGUgY2F0ZWdvcmllcyQ6IE9ic2VydmFibGU8Q2F0ZWdvcnlbXT4gPSB0aGlzLmNhdGVnb3JpZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHQvKipcblx0ICogTWFuZWphIGxvcyBjYW1iaW9zIGVuIGxhcyBzZWNjaW9uZXNcblx0ICovXG5cdHByaXZhdGUgc2VjdGlvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWN0aW9uW10+KFtdKTtcblx0cHJpdmF0ZSBzZWN0aW9ucyQ6IE9ic2VydmFibGU8U2VjdGlvbltdPiA9IHRoaXMuc2VjdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHQvKipcblx0ICogTWFuZWphIGxvcyBjYW1iaW9zIGVuIGxvcyBhdHJpYnV0b3Ncblx0ICovXG5cdHByaXZhdGUgYXR0cmlidXRlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dHJpYnV0ZVtdPihbXSk7XG5cdHByaXZhdGUgYXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+ID0gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuXHQvL0FQSSBVUkxTXG5cdHByaXZhdGUgcmVhZG9ubHkgU0hPUF9DSEFOTkVMX0FQSSA9IGAke3RoaXMuYXBpQ29uc3RhbnRzLlNIT1BfQVBJX1VSTH0ke3RoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUx9L2A7XG5cdHByaXZhdGUgcmVhZG9ubHkgQ01TX0NIQU5ORUxfQVBJID0gYCR7dGhpcy5hcGlDb25zdGFudHMuQ01TX1VSTH0ke3RoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUx9L2A7XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSBVUkwgcGFyYSBvYnRlbmVyIGxhcyBjYXRlZ29yaWFzLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgdGF4b25zQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5TSE9QX0NIQU5ORUxfQVBJfXRheG9ucy8/bG9jYWxlPSR7dGhpcy5hcGlDb25zdGFudHMuTE9DQUxFfWAgfTtcblx0LyoqXG5cdCAqIERldnVlbHZlIGxhIFVSTCBwYXJhIG9idGVuZXIgbGFzIHNlY2Npb25lc1xuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgc2VjdGlvbnNBcGkoKSB7IHJldHVybiBgJHt0aGlzLkNNU19DSEFOTkVMX0FQSX1zZWN0aW9ucy8/bG9jYWxlPSR7dGhpcy5hcGlDb25zdGFudHMuTE9DQUxFfWAgfTtcblx0LyoqXG5cdCAqIERldnVlbHZlIGxhIFVSTCBwYXJhIG9idGVuZXIgbG9zIGF0cmlidXRvcy4gU2UgbGUgcHVlZGUgYXBsaWNhciBmbGl0cm9zLlxuXHQgKiBAcGFyYW0gZmlsdGVyIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgYXR0cmlidXRlc0FwaShmaWx0ZXIgPSAnJykgeyByZXR1cm4gYCR7dGhpcy5TSE9QX0NIQU5ORUxfQVBJfXByb2R1Y3Qtc2VhcmNoL2F0dHJpYnV0ZXMvP2xvY2FsZT0ke3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRX0mbGltaXQ9MSZwYWdlPTEke2ZpbHRlcn1gIH07XG5cdHByaXZhdGUgZmFxc0FwaSgpIHsgcmV0dXJuICdjbXMvJyArIHRoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUwgKyAnL2ZhcScgfTtcbiAgICBwcml2YXRlIHBhZ2VDb250ZW50QnlDb2RlQXBpID0gKGNvZGU6IHN0cmluZykgPT4gdGhpcy5jbXNCYXNlKCkgKyAnLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3BhZ2UvJyArIGNvZGU7XG5cdHByaXZhdGUgY21zQmFzZSA9ICgpID0+ICdjbXMvJyArIHRoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRTtcblx0Y29uc3RydWN0b3IoKSB7IH1cblx0LyoqXG5cdCAqIE9idGllbmUgbGFzIGNhdGVnb3JpYXMgZGVsIGJhY2tlbmQuIFkgbG9zIG1hcGVhIHBhcmEgcXVlIHNlYSBtYXMgYW1pZ2FibGUgZWwgbWFuZWpvIGNvbW8gbWVuw7ouXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldENhdGVnb3JpZXMoKTogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiB7XG5cdFx0aWYgKHRoaXMuY2F0ZWdvcmllc1N1YmplY3QuZ2V0VmFsdWUoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy50YXhvbnNBcGkoKSkucGlwZShcblx0XHRcdFx0c2hhcmVSZXBsYXkoMSksXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IENhdGVnb3J5W10pID0+IHtcblx0XHRcdFx0XHRjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5hcHBlbmRQYXRocyh0cnVlLCByZXNwb25zZSlcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3JpZXNTdWJqZWN0Lm5leHQoY2F0ZWdvcmllcylcblx0XHRcdFx0XHRyZXR1cm4gY2F0ZWdvcmllc1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGBFcnJvcjogJHtlcnJvcn1gKVxuXHRcdFx0XHRcdHRoaXMuY2F0ZWdvcmllc1N1YmplY3QubmV4dChbXSlcblx0XHRcdFx0XHRyZXR1cm4gb2YoW10pXG5cdFx0XHRcdH0pXG5cdFx0XHQpLnN1YnNjcmliZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jYXRlZ29yaWVzJDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBsYXMgc2VjY2lvbmVzIGRlbCBiYWNrZW5kLiBZIGxvcyBtYXBlYSBwYXJhIHF1ZSBzZWEgbWFzIGFtaWdhYmxlIGVsIG1hbmVqbyBjb21vIG1lbsO6LlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRTZWN0aW9ucygpOiBPYnNlcnZhYmxlPFNlY3Rpb25bXT4ge1xuXHRcdGlmICh0aGlzLnNlY3Rpb25zU3ViamVjdC5nZXRWYWx1ZSgpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLnNlY3Rpb25zQXBpKCkpLnBpcGUoXG5cdFx0XHRcdHNoYXJlUmVwbGF5KDEpLFxuXHRcdFx0XHRtYXAoKHJlc3BvbnNlOiBTZWN0aW9uW10pID0+IHtcblx0XHRcdFx0XHRsZXQgc2VjdGlvbnMgPSByZXNwb25zZS5maWx0ZXIoKHNlY3Rpb246IFNlY3Rpb24pID0+IHNlY3Rpb24uY29kZSAhPSAnaG9tZScpXG5cdFx0XHRcdFx0c2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoKHNlY3Rpb246IFNlY3Rpb24pID0+IHRoaXMuYXBwZW5kU2VjdGlvbihzZWN0aW9uKSlcblx0XHRcdFx0XHR0aGlzLnNlY3Rpb25zU3ViamVjdC5uZXh0KHNlY3Rpb25zKVxuXHRcdFx0XHRcdHJldHVybiBzZWN0aW9uc1xuXHRcdFx0XHR9KSkuc3Vic2NyaWJlKClcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2VjdGlvbnMkO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxvcyBhdHJpYnV0b3MgZGVsIGJhY2tlbmQuIFkgbG9zIG1hcGVhIHBhcmEgcXVlIHNlYSBtYXMgYW1pZ2FibGUgZWwgbWFuZWpvIGNvbW8gbWVuw7ouXG5cdCAqIEBwYXJhbSBwYXJhbXMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldEF0dHJpYnV0ZXMocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT4ge1xuXHRcdGlmICh0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmdldFZhbHVlKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuYXR0cmlidXRlc0FwaShwYXJhbXMpKS5waXBlKFxuXHRcdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHRcdFx0bWFwKChyZXNwb25zZTogYW55IHwgQXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXBwZW5kUGF0aHMoZmFsc2UsIChyZXNwb25zZS5hdHRyaWJ1dGVzWzBdIHx8IHJlc3BvbnNlKSlcblx0XHRcdFx0XHR0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0Lm5leHQoYXR0cmlidXRlcylcblx0XHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlc1xuXHRcdFx0XHR9XG5cdFx0XHRcdCkpLnN1YnNjcmliZSgpXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMkO1xuXHR9XG5cblxuXHQvLyBIRUxQRVJTXG5cdHNsdWdpZnkodmFsdWU6IGFueSk6IHN0cmluZyB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gJyc7IC8vIG8gZGV2b2x2ZXIgdW4gc2x1ZyBwb3IgZGVmZWN0byBzaSBwcmVmZXLDrXNcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpLnJlcGxhY2UoL1teXFx3XFwtXSsvZywgJycpO1xuXHR9XHQvKipcblx0ICogRWxpbWluYSBsb3MgYWNlbnRvc1xuXHQgKiBAcGFyYW0gc3RyIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlQWNjZW50cyhzdHI6IHN0cmluZykge1xuXHRcdHJldHVybiBzdHIubm9ybWFsaXplKFwiTkZEXCIpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZWFsaXphIHVuIG1hcGVvIGRlIGxvcyBkYXRvcyBwYXJhIGRhcmxlIHVuIGZvcm1hdG8gbWFzIGVudGVuZGlibGUgYSBsYVxuXHQgKiBob3JhIGRlIHVzYXIgY29tbyB1biBtZW7Dui5cblx0ICogQHBhcmFtIGlzQ2F0ZWdvcnkgVXRpbGl6YWRvIHBhcmEgZGlmZXJlbmNpYXIgc2kgZXMgY2F0ZWdvcsOtYSBvIGF0cmlidXRvLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgUmVzcHVlc3RhIHF1ZSBvYnRpZW5lIGRlbCBiYWNrZW5kIGNvbiBsb3MgZGF0b3MgYSBtYXBlYXIuXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGFwcGVuZFBhdGhzKGlzQ2F0ZWdvcnk6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpIHtcblx0XHRjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSA/IHJlc3BvbnNlIDogW3Jlc3BvbnNlXTtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IG5vcm1hbGl6ZWRSZXNwb25zZS5tYXAoKHN1YmVsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFzdWJlbGVtZW50LmNoaWxkcmVuIHx8IHN1YmVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcblx0XHRcdFx0c3ViZWxlbWVudC5jaGlsZHJlbiA9IFtdO1xuXHRcdFx0XHRzdWJlbGVtZW50LnBhdGggPSBpc0NhdGVnb3J5XG5cdFx0XHRcdFx0PyB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnY2F0ZWdvcmllcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpXG5cdFx0XHRcdFx0OiB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnYXR0cmlidXRlcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmIChzdWJlbGVtZW50LmNoaWxkcmVuKSB7XG5cdFx0XHRcdHN1YmVsZW1lbnQuc2x1ZyA9IHN1YmVsZW1lbnQuc2x1ZyB8fCB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5uYW1lKTtcblx0XHRcdFx0c3ViZWxlbWVudC5jaGlsZHJlbiA9IHRoaXMuYXBwZW5kUGF0aHMoaXNDYXRlZ29yeSwgc3ViZWxlbWVudC5jaGlsZHJlbik7XG5cdFx0XHR9XG5cblx0XHRcdHN1YmVsZW1lbnQucGF0aCA9IGlzQ2F0ZWdvcnlcblx0XHRcdFx0PyB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnY2F0ZWdvcmllcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpXG5cdFx0XHRcdDogdGhpcy5jb25zdGFudHMuUFJPRFVDVF9MSVNUX1JPVVRFICsgJ2F0dHJpYnV0ZXMvJyArIHRoaXMuc2x1Z2lmeShzdWJlbGVtZW50LnNsdWcgPz8gc3ViZWxlbWVudC5uYW1lKTtcblxuXHRcdFx0cmV0dXJuIHN1YmVsZW1lbnQ7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdC8qKlxuXHQgKiBHZW5lcmEgdW4gbWFwZW8gZGUgc2VjY2lvbmVzIHBhcmEgcXVlIHF1ZWRlbiBtYXMgYW1pZ2FibGVzIGEgbGEgaG9yYSBkZSBtYW5lamFyIGNvbW8gbWVuw7ouXG5cdCAqIEBwYXJhbSBzZWN0aW9uIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgYXBwZW5kU2VjdGlvbihzZWN0aW9uOiBhbnkpIHtcblx0XHRsZXQgZGF0YTogYW55ID0ge307XG5cdFx0aWYgKHNlY3Rpb24ucGFnZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGF0YS50eXBlID0gJ3N1Yic7XG5cdFx0XHRkYXRhLmNoaWxkcmVuID0gc2VjdGlvbi5wYWdlcy5tYXAoKHBhZ2U6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNvZGU6IHBhZ2UuY29kZSxcblx0XHRcdFx0XHRuYW1lOiBwYWdlLm5hbWUsXG5cdFx0XHRcdFx0dHlwZTogJ2xpbmsnLFxuXHRcdFx0XHRcdHBhdGg6IHRoaXMuY29uc3RhbnRzLlNFQ1RJT05TX1JPVVRFICsgKHBhZ2Uuc2x1ZyA/IHBhZ2Uuc2x1ZyA6IHBhZ2UuY29kZSksXG5cdFx0XHRcdFx0Ly8gcGF0aDogdGhpcy5jb25zdGFudHMuU0VDVElPTlNfUk9VVEUgKyBwYWdlLnNsdWcsXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly9kYXRhLnRpdGxlID0gc2VjdGlvbi5uYW1lO1xuXHRcdFx0ZGF0YS5uYW1lID0gc2VjdGlvbi5uYW1lO1xuXHRcdFx0ZGF0YS5wYXRoID0gdGhpcy5jb25zdGFudHMuU0VDVElPTlNfUk9VVEUgKyAoc2VjdGlvbi5zbHVnID8gc2VjdGlvbi5zbHVnIDogc2VjdGlvbi5jb2RlKTtcblx0XHRcdGRhdGEuY29kZSA9IHNlY3Rpb24uY29kZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YS5jb2RlID0gc2VjdGlvbi5jb2RlO1xuXHRcdFx0Ly9kYXRhLnRpdGxlID0gc2VjdGlvbi5uYW1lO1xuXHRcdFx0ZGF0YS5uYW1lID0gc2VjdGlvbi5uYW1lO1xuXHRcdFx0ZGF0YS50eXBlID0gJ2xpbmsnO1xuXHRcdFx0ZGF0YS5jaGlsZHJlbiA9IFtdO1xuXHRcdFx0ZGF0YS5wYXRoID0gdGhpcy5jb25zdGFudHMuU0VDVElPTlNfUk9VVEUgKyAoc2VjdGlvbi5zbHVnID8gc2VjdGlvbi5zbHVnIDogc2VjdGlvbi5jb2RlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblx0LyoqXG5cdCAqIE1hcGVhIGxvcyBlbGVtZW50b3MgcGFyYSBkYXJsZSB1biBmb3JtYXRvIG1hcyBhbWlnYWJsZSBwYXJhIGxvcyBtZW7DumVzIHkgZmlsdHJvcy5cblx0ICogQHBhcmFtIGVsZW1lbnRzIGNhdGVnb3JpYXMgfCBhdHJpYnV0b3MgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdlbmVyYXRlTWVudSA9IChlbGVtZW50czogYW55KSA9PiB7XG5cdFx0cmV0dXJuIGVsZW1lbnRzLm1hcCgoZWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4uZWxlbWVudCxcblx0XHRcdFx0XHR0aXRsZTogZWxlbWVudC5uYW1lLFxuXHRcdFx0XHRcdHBhdGg6IGVsZW1lbnQucGF0aCxcblx0XHRcdFx0XHR0eXBlOiAnbGluaycsXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4uZWxlbWVudCxcblx0XHRcdFx0XHR0aXRsZTogZWxlbWVudC5uYW1lLFxuXHRcdFx0XHRcdHR5cGU6ICdzdWInLFxuXHRcdFx0XHRcdHBhdGg6IGVsZW1lbnQucGF0aCxcblx0XHRcdFx0XHRjaGlsZHJlbjogKGVsZW1lbnQuY2hpbGRyZW4gPyB0aGlzLmdlbmVyYXRlTWVudShlbGVtZW50LmNoaWxkcmVuKSA6IFtdKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXHQvKipcblx0ICogRGV2dWVsdmUgbG9zIGVsZW1lbnRvcyBkZWwgYnJlYWRjcnVtYi5cblx0ICogQHBhcmFtIGNvZGUgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0QnJlYWRjcnVtYiA9IChjb2RlOiBhbnkpID0+IHtcblx0XHRpZiAoIWNvZGUpIHJldHVybiBudWxsO1xuXHRcdGxldCBicmVhZGNydW1iID0gdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWIoY29kZSwgdGhpcy5nZW5lcmF0ZU1lbnUodGhpcy5jYXRlZ29yaWVzU3ViamVjdC52YWx1ZSksIFtdKTtcblx0XHRpZiAoIWJyZWFkY3J1bWIgfHwgIWJyZWFkY3J1bWIubGVuZ3RoKSBicmVhZGNydW1iID0gdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWIoY29kZSwgdGhpcy5nZW5lcmF0ZU1lbnUodGhpcy5hdHRyaWJ1dGVzU3ViamVjdC52YWx1ZSksIFtdKTtcblx0XHRyZXR1cm4gKGJyZWFkY3J1bWIgJiYgYnJlYWRjcnVtYi5sZW5ndGgpICYmIGJyZWFkY3J1bWIucmV2ZXJzZSgpO1xuXHR9XG5cdC8qKlxuXHQgKiBHZW5lcmEgbG9zIGJyZWFkY3J1bWJzIGVuIGJhc2UgYSBsb3MgZmlsdHJvcyBhcGxpY2Fkb3MuXG5cdCAqIEBwYXJhbSBmaWx0ZXJzIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldEJyZWFkY3J1bWJCeUZpbHRlcnMgPSAoZmlsdGVyczogRmlsdGVyW10pID0+IHtcblx0XHRsZXQgZmluYWxfcmVzdWx0OiBhbnlbXSA9IFtdO1xuXHRcdGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuXHRcdFx0bGV0IHJlc3VsdCA9IGZpbHRlci5nZXRTZWxlY3RlZExpc3QoKTtcblx0XHRcdGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGVuZ3RoKSByZXR1cm47XG5cblx0XHRcdGlmIChmaWx0ZXIudHlwZSgpID09ICdjYXRlZ29yaWVzJykgZmluYWxfcmVzdWx0LnVuc2hpZnQoLi4udGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWIocmVzdWx0WzBdLCBmaWx0ZXIuZGF0YSwgW10pLnJldmVyc2UoKSk7XG5cdFx0XHRlbHNlIHJlc3VsdC5mb3JFYWNoKFxuXHRcdFx0XHQoY29kZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IGJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCBmaWx0ZXIuZGF0YSwgW10pXG5cdFx0XHRcdFx0YnJlYWRjcnVtYi5sZW5ndGggJiYgZmluYWxfcmVzdWx0LnB1c2goYnJlYWRjcnVtYlswXSk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZmluYWxfcmVzdWx0O1xuXHR9XG5cdC8qKlxuXHQgKiBHZW5lcmEgZWwgbGlzdGFkbyBkZSBicmVhZGNydW1iLlxuXHQgKiBAcGFyYW0gY29kZSBcblx0ICogQHBhcmFtIGVsZW1lbnRzIGZpbHRyb3MgYWN0dWFsZXMgZW4gZWwgZnJvbnRlbmRcblx0ICogQHBhcmFtIHJlc3VsdCBkYXRvcyBhIGFjdHVhbGl6YXIgY29uIGVsIG51ZXZvIGxpc3RhZG8gZGUgYnJlYWRjcnVtYlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVCcmVhZGNydW1iID0gKGNvZGU6IHN0cmluZywgZWxlbWVudHM6IGFueSwgcmVzdWx0OiBhbnkpID0+IHtcblx0XHRsZXQgZWxlbWVudCA9IGVsZW1lbnRzLmZpbmQoKGVsZW06IGFueSkgPT4gZWxlbS5jb2RlID09IGNvZGUpO1xuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRyZXN1bHQucHVzaChlbGVtZW50KTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRlbGVtZW50cy5zb21lKChlbGVtOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGVsZW0uY2hpbGRyZW4gJiYgZWxlbS5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXHRcdFx0XHRcdGxldCBuZXdfcmVzdWx0ID0gdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWIoY29kZSwgZWxlbS5jaGlsZHJlbiwgcmVzdWx0KTtcblx0XHRcdFx0XHRpZiAobmV3X3Jlc3VsdC5sZW5ndGggPiBsZW5ndGgpIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IG5ld19yZXN1bHQ7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChlbGVtKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHB1YmxpYyBnZXRTZWN0aW9uQ29udGVudEJ5TGluayA9IChsaW5rOiBhbnkpID0+XG5cdFx0dGhpcy5jb25uZWN0aW9uLmdldEhUTUwodGhpcy5wYWdlQ29udGVudEJ5Q29kZUFwaShsaW5rKSkucGlwZShcblx0XHRcdG1hcChodG1sID0+IGh0bWwuc3BsaXQoJzwvaGVhZD4nKVtodG1sLnNwbGl0KCc8L2hlYWQ+JykubGVuZ3RoIC0gMV0pLFxuXHRcdFx0Y2F0Y2hFcnJvcihlID0+IG9mKGZhbHNlKSlcblx0XHQpO1xuXG5cdFx0XG5cblx0Z2V0RkFRKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZmFxc0FwaSgpKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0OiBGQVFbXSA9IFtdO1xuXHRcdFx0cmVzcG9uc2UuZm9yRWFjaCgocmVzcG9uc2VfZmFxOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGZhcXM6IEZBUSA9IHtcblx0XHRcdFx0XHRjb2RlOiByZXNwb25zZV9mYXEuY29kZSxcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVzcG9uc2VfZmFxLnBvc2l0aW9uLFxuXHRcdFx0XHRcdHRpdGxlOiByZXNwb25zZV9mYXEudHJhbnNsYXRpb25zW3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRV0udG9waWMsXG5cdFx0XHRcdFx0cXVlc3Rpb25zOiByZXNwb25zZV9mYXEuZnJlcXVlbnRseUFza2VkUXVlc3Rpb25zLm1hcCgoYXNrZWRfcXVlc3Rpb246IGFueSkgPT4gKHtcblx0XHRcdFx0XHRcdGNvZGU6IGFza2VkX3F1ZXN0aW9uLmNvZGUsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogYXNrZWRfcXVlc3Rpb24ucG9zaXRpb24sXG5cdFx0XHRcdFx0XHRxdWVzdGlvbjogYXNrZWRfcXVlc3Rpb24udHJhbnNsYXRpb25zW3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRV0gPyBhc2tlZF9xdWVzdGlvbi50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXS5xdWVzdGlvbiA6ICcnLFxuXHRcdFx0XHRcdFx0YW5zd2VyOiBhc2tlZF9xdWVzdGlvbi50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXSA/IGFza2VkX3F1ZXN0aW9uLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdLmFuc3dlciA6ICcnLFxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXN1bHQucHVzaChmYXFzKTtcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pKTtcblx0fVxufSBcbiJdfQ==
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL29wdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFRLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFHekU7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDMUI7O09BRUc7SUFDSyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0M7O09BRUc7SUFDSyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDOztPQUVHO0lBQ0ssU0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2pEOztPQUVHO0lBQ0ssWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25EOztPQUVHO0lBQ0ssaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEQsV0FBVyxHQUEyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEY7O09BRUc7SUFDSyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLENBQUM7SUFDckQsU0FBUyxHQUEwQixJQUFJ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Q0FBQztnQkFDRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxNQUFNLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FuVVcsY0FBYzs0R0FBZCxjQUFjLGNBRmQsTUFBTTs7NEZBRU4sY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlLCBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUsIENhdGVnb3J5LCBGQVEsIFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuLyoqXG4gKiBFc3RlIHNlcnZpY2lvIHBlcm1pdGUgbWFuZWphIGxhcyBDYXRlZ29yaWFzLCBTZWNjaW9uZXMgeSBBdHJpYnV0b3MgY29tbyBtZW51ZXMgXG4gKiBwYXJhIGxhIGFwbGljYWNpw7NuLiBcbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgT3B0aW9uc1NlcnZpY2Uge1xuXHQvKipcblx0ICogTWFuZWphIGxhcyBwZXRpY2lvbmVzIGEgbGEgQVBJXG5cdCAqL1xuXHRwcml2YXRlIGNvbm5lY3Rpb24gPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHQvKipcblx0ICogUGxhdGZvcm0gSUQgcGFyYSB2ZXJpZmljYXIgc2kgZXN0YW1vcyBlbiBlbCBuYXZlZ2Fkb3Jcblx0ICovXG5cdHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cdC8qKlxuXHQgKiBDb25zdGFudGVzIGRlbCBjb3JlXG5cdCAqL1xuXHRwcml2YXRlIGNvbnN0YW50cyA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG5cdC8qKlxuXHQgKiBDb25zdGFudGVzIGRlIGxhIEFQSVxuXHQgKi9cblx0cHJpdmF0ZSBhcGlDb25zdGFudHMgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XG5cdC8qKlxuXHQgKiBNYW5lamEgbG9zIGNhbWJpb3MgZW4gbGFzIGNhdGVnb3JpYXNcblx0ICovXG5cdHByaXZhdGUgY2F0ZWdvcmllc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhdGVnb3J5W10+KFtdKTtcblx0cHJpdmF0ZSBjYXRlZ29yaWVzJDogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiA9IHRoaXMuY2F0ZWdvcmllc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdC8qKlxuXHQgKiBNYW5lamEgbG9zIGNhbWJpb3MgZW4gbGFzIHNlY2Npb25lc1xuXHQgKi9cblx0cHJpdmF0ZSBzZWN0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlY3Rpb25bXT4oW10pO1xuXHRwcml2YXRlIHNlY3Rpb25zJDogT2JzZXJ2YWJsZTxTZWN0aW9uW10+ID0gdGhpcy5zZWN0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdC8qKlxuXHQgKiBNYW5lamEgbG9zIGNhbWJpb3MgZW4gbG9zIGF0cmlidXRvc1xuXHQgKi9cblx0cHJpdmF0ZSBhdHRyaWJ1dGVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXR0cmlidXRlW10+KFtdKTtcblx0cHJpdmF0ZSBhdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT4gPSB0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8vQVBJIFVSTFNcblx0cHJpdmF0ZSByZWFkb25seSBTSE9QX0NIQU5ORUxfQVBJID0gYCR7dGhpcy5hcGlDb25zdGFudHMuU0hPUF9BUElfVVJMfSR7dGhpcy5hcGlDb25zdGFudHMuQ0hBTk5FTH0vYDtcblx0cHJpdmF0ZSByZWFkb25seSBDTVNfQ0hBTk5FTF9BUEkgPSBgJHt0aGlzLmFwaUNvbnN0YW50cy5DTVNfVVJMfSR7dGhpcy5hcGlDb25zdGFudHMuQ0hBTk5FTH0vYDtcblx0LyoqXG5cdCAqIERldnVlbHZlIGxhIFVSTCBwYXJhIG9idGVuZXIgbGFzIGNhdGVnb3JpYXMuXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSB0YXhvbnNBcGkoKSB7IHJldHVybiBgJHt0aGlzLlNIT1BfQ0hBTk5FTF9BUEl9dGF4b25zLz9sb2NhbGU9JHt0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEV9YCB9O1xuXHQvKipcblx0ICogRGV2dWVsdmUgbGEgVVJMIHBhcmEgb2J0ZW5lciBsYXMgc2VjY2lvbmVzXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBzZWN0aW9uc0FwaSgpIHsgcmV0dXJuIGAke3RoaXMuQ01TX0NIQU5ORUxfQVBJfXNlY3Rpb25zLz9sb2NhbGU9JHt0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEV9YCB9O1xuXHQvKipcblx0ICogRGV2dWVsdmUgbGEgVVJMIHBhcmEgb2J0ZW5lciBsb3MgYXRyaWJ1dG9zLiBTZSBsZSBwdWVkZSBhcGxpY2FyIGZsaXRyb3MuXG5cdCAqIEBwYXJhbSBmaWx0ZXIgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBhdHRyaWJ1dGVzQXBpKGZpbHRlciA9ICcnKSB7IHJldHVybiBgJHt0aGlzLlNIT1BfQ0hBTk5FTF9BUEl9cHJvZHVjdC1zZWFyY2gvYXR0cmlidXRlcy8/bG9jYWxlPSR7dGhpcy5hcGlDb25zdGFudHMuTE9DQUxFfSZsaW1pdD0xJnBhZ2U9MSR7ZmlsdGVyfWAgfTtcblx0cHJpdmF0ZSBmYXFzQXBpKCkgeyByZXR1cm4gJ2Ntcy8nICsgdGhpcy5hcGlDb25zdGFudHMuQ0hBTk5FTCArICcvZmFxJyB9O1xuICAgIHByaXZhdGUgcGFnZUNvbnRlbnRCeUNvZGVBcGkgPSAoY29kZTogc3RyaW5nKSA9PiB0aGlzLmNtc0Jhc2UoKSArICcvJyArIHRoaXMuY29uc3RhbnRzLmdldENoYW5uZWwoKSArICcvcGFnZS8nICsgY29kZTtcblx0cHJpdmF0ZSBjbXNCYXNlID0gKCkgPT4gJ2Ntcy8nICsgdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFO1xuXHRjb25zdHJ1Y3RvcigpIHsgfVxuXHQvKipcblx0ICogT2J0aWVuZSBsYXMgY2F0ZWdvcmlhcyBkZWwgYmFja2VuZC4gWSBsb3MgbWFwZWEgcGFyYSBxdWUgc2VhIG1hcyBhbWlnYWJsZSBlbCBtYW5lam8gY29tbyBtZW7Dui5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q2F0ZWdvcmllcygpOiBPYnNlcnZhYmxlPENhdGVnb3J5W10+IHtcblx0XHRpZiAodGhpcy5jYXRlZ29yaWVzU3ViamVjdC5nZXRWYWx1ZSgpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLnRheG9uc0FwaSgpKS5waXBlKFxuXHRcdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHRcdFx0bWFwKChyZXNwb25zZTogQ2F0ZWdvcnlbXSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNhdGVnb3JpZXMgPSB0aGlzLmFwcGVuZFBhdGhzKHRydWUsIHJlc3BvbnNlKVxuXHRcdFx0XHRcdHRoaXMuY2F0ZWdvcmllc1N1YmplY3QubmV4dChjYXRlZ29yaWVzKVxuXHRcdFx0XHRcdHJldHVybiBjYXRlZ29yaWVzXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYEVycm9yOiAke2Vycm9yfWApXG5cdFx0XHRcdFx0dGhpcy5jYXRlZ29yaWVzU3ViamVjdC5uZXh0KFtdKVxuXHRcdFx0XHRcdHJldHVybiBvZihbXSlcblx0XHRcdFx0fSlcblx0XHRcdCkuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNhdGVnb3JpZXMkO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxhcyBzZWNjaW9uZXMgZGVsIGJhY2tlbmQuIFkgbG9zIG1hcGVhIHBhcmEgcXVlIHNlYSBtYXMgYW1pZ2FibGUgZWwgbWFuZWpvIGNvbW8gbWVuw7ouXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldFNlY3Rpb25zKCk6IE9ic2VydmFibGU8U2VjdGlvbltdPiB7XG5cdFx0aWYgKHRoaXMuc2VjdGlvbnNTdWJqZWN0LmdldFZhbHVlKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuc2VjdGlvbnNBcGkoKSkucGlwZShcblx0XHRcdFx0c2hhcmVSZXBsYXkoMSksXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IFNlY3Rpb25bXSkgPT4ge1xuXHRcdFx0XHRcdGxldCBzZWN0aW9ucyA9IHJlc3BvbnNlLmZpbHRlcigoc2VjdGlvbjogU2VjdGlvbikgPT4gc2VjdGlvbi5jb2RlICE9ICdob21lJylcblx0XHRcdFx0XHRzZWN0aW9ucyA9IHNlY3Rpb25zLm1hcCgoc2VjdGlvbjogU2VjdGlvbikgPT4gdGhpcy5hcHBlbmRTZWN0aW9uKHNlY3Rpb24pKVxuXHRcdFx0XHRcdHRoaXMuc2VjdGlvbnNTdWJqZWN0Lm5leHQoc2VjdGlvbnMpXG5cdFx0XHRcdFx0cmV0dXJuIHNlY3Rpb25zXG5cdFx0XHRcdH0pKS5zdWJzY3JpYmUoKVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zZWN0aW9ucyQ7XG5cdH1cblx0LyoqXG5cdCAqIE9idGllbmUgbG9zIGF0cmlidXRvcyBkZWwgYmFja2VuZC4gWSBsb3MgbWFwZWEgcGFyYSBxdWUgc2VhIG1hcyBhbWlnYWJsZSBlbCBtYW5lam8gY29tbyBtZW7Dui5cblx0ICogQHBhcmFtIHBhcmFtcyBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QXR0cmlidXRlcyhwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPiB7XG5cdFx0aWYgKHRoaXMuYXR0cmlidXRlc1N1YmplY3QuZ2V0VmFsdWUoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5hdHRyaWJ1dGVzQXBpKHBhcmFtcykpLnBpcGUoXG5cdFx0XHRcdHNoYXJlUmVwbGF5KDEpLFxuXHRcdFx0XHRtYXAoKHJlc3BvbnNlOiBhbnkgfCBBdHRyaWJ1dGUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hcHBlbmRQYXRocyhmYWxzZSwgKHJlc3BvbnNlLmF0dHJpYnV0ZXNbMF0gfHwgcmVzcG9uc2UpKVxuXHRcdFx0XHRcdHRoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChhdHRyaWJ1dGVzKVxuXHRcdFx0XHRcdHJldHVybiBhdHRyaWJ1dGVzXG5cdFx0XHRcdH1cblx0XHRcdFx0KSkuc3Vic2NyaWJlKClcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlcyQ7XG5cdH1cblxuXG5cdC8vIEhFTFBFUlNcblx0c2x1Z2lmeSh2YWx1ZTogYW55KTogc3RyaW5nIHtcblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnJzsgLy8gbyBkZXZvbHZlciB1biBzbHVnIHBvciBkZWZlY3RvIHNpIHByZWZlcsOtc1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15cXHdcXC1dKy9nLCAnJyk7XG5cdH1cdC8qKlxuXHQgKiBFbGltaW5hIGxvcyBhY2VudG9zXG5cdCAqIEBwYXJhbSBzdHIgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVBY2NlbnRzKHN0cjogc3RyaW5nKSB7XG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdHlwZW9mIFN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gc3RyLm5vcm1hbGl6ZShcIk5GRFwiKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCBcIlwiKTtcblx0XHR9XG5cdFx0Ly8gRmFsbGJhY2sgcGFyYSBTU1IgLSByZW1vdmVyIGFjZW50b3MgbWFudWFsbWVudGVcblx0XHRyZXR1cm4gc3RyLnJlcGxhY2UoL1vDoMOhw6LDo8Okw6VdL2csICdhJylcblx0XHRcdC5yZXBsYWNlKC9bw6jDqcOqw6tdL2csICdlJylcblx0XHRcdC5yZXBsYWNlKC9bw6zDrcOuw69dL2csICdpJylcblx0XHRcdC5yZXBsYWNlKC9bw7LDs8O0w7XDtl0vZywgJ28nKVxuXHRcdFx0LnJlcGxhY2UoL1vDucO6w7vDvF0vZywgJ3UnKVxuXHRcdFx0LnJlcGxhY2UoL1vDvcO/XS9nLCAneScpXG5cdFx0XHQucmVwbGFjZSgvW8OxXS9nLCAnbicpXG5cdFx0XHQucmVwbGFjZSgvW8OnXS9nLCAnYycpXG5cdFx0XHQucmVwbGFjZSgvW8OAw4HDgsODw4TDhV0vZywgJ0EnKVxuXHRcdFx0LnJlcGxhY2UoL1vDiMOJw4rDi10vZywgJ0UnKVxuXHRcdFx0LnJlcGxhY2UoL1vDjMONw47Dj10vZywgJ0knKVxuXHRcdFx0LnJlcGxhY2UoL1vDksOTw5TDlcOWXS9nLCAnTycpXG5cdFx0XHQucmVwbGFjZSgvW8OZw5rDm8OcXS9nLCAnVScpXG5cdFx0XHQucmVwbGFjZSgvW8OdxbhdL2csICdZJylcblx0XHRcdC5yZXBsYWNlKC9bw5FdL2csICdOJylcblx0XHRcdC5yZXBsYWNlKC9bw4ddL2csICdDJyk7XG5cdH1cblx0LyoqXG5cdCAqIFJlYWxpemEgdW4gbWFwZW8gZGUgbG9zIGRhdG9zIHBhcmEgZGFybGUgdW4gZm9ybWF0byBtYXMgZW50ZW5kaWJsZSBhIGxhXG5cdCAqIGhvcmEgZGUgdXNhciBjb21vIHVuIG1lbsO6LlxuXHQgKiBAcGFyYW0gaXNDYXRlZ29yeSBVdGlsaXphZG8gcGFyYSBkaWZlcmVuY2lhciBzaSBlcyBjYXRlZ29yw61hIG8gYXRyaWJ1dG8uXG5cdCAqIEBwYXJhbSByZXNwb25zZSBSZXNwdWVzdGEgcXVlIG9idGllbmUgZGVsIGJhY2tlbmQgY29uIGxvcyBkYXRvcyBhIG1hcGVhci5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgYXBwZW5kUGF0aHMoaXNDYXRlZ29yeTogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UpID8gcmVzcG9uc2UgOiBbcmVzcG9uc2VdO1xuXG5cdFx0Y29uc3QgcmVzdWx0ID0gbm9ybWFsaXplZFJlc3BvbnNlLm1hcCgoc3ViZWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRpZiAoIXN1YmVsZW1lbnQuY2hpbGRyZW4gfHwgc3ViZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuXHRcdFx0XHRzdWJlbGVtZW50LmNoaWxkcmVuID0gW107XG5cdFx0XHRcdHN1YmVsZW1lbnQucGF0aCA9IGlzQ2F0ZWdvcnlcblx0XHRcdFx0XHQ/IHRoaXMuY29uc3RhbnRzLlBST0RVQ1RfTElTVF9ST1VURSArICdjYXRlZ29yaWVzLycgKyB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5zbHVnID8/IHN1YmVsZW1lbnQubmFtZSlcblx0XHRcdFx0XHQ6IHRoaXMuY29uc3RhbnRzLlBST0RVQ1RfTElTVF9ST1VURSArICdhdHRyaWJ1dGVzLycgKyB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5zbHVnID8/IHN1YmVsZW1lbnQubmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHN1YmVsZW1lbnQuY2hpbGRyZW4pIHtcblx0XHRcdFx0c3ViZWxlbWVudC5zbHVnID0gc3ViZWxlbWVudC5zbHVnIHx8IHRoaXMuc2x1Z2lmeShzdWJlbGVtZW50Lm5hbWUpO1xuXHRcdFx0XHRzdWJlbGVtZW50LmNoaWxkcmVuID0gdGhpcy5hcHBlbmRQYXRocyhpc0NhdGVnb3J5LCBzdWJlbGVtZW50LmNoaWxkcmVuKTtcblx0XHRcdH1cblxuXHRcdFx0c3ViZWxlbWVudC5wYXRoID0gaXNDYXRlZ29yeVxuXHRcdFx0XHQ/IHRoaXMuY29uc3RhbnRzLlBST0RVQ1RfTElTVF9ST1VURSArICdjYXRlZ29yaWVzLycgKyB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5zbHVnID8/IHN1YmVsZW1lbnQubmFtZSlcblx0XHRcdFx0OiB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnYXR0cmlidXRlcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpO1xuXG5cdFx0XHRyZXR1cm4gc3ViZWxlbWVudDtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYSB1biBtYXBlbyBkZSBzZWNjaW9uZXMgcGFyYSBxdWUgcXVlZGVuIG1hcyBhbWlnYWJsZXMgYSBsYSBob3JhIGRlIG1hbmVqYXIgY29tbyBtZW7Dui5cblx0ICogQHBhcmFtIHNlY3Rpb24gXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBhcHBlbmRTZWN0aW9uKHNlY3Rpb246IGFueSkge1xuXHRcdGxldCBkYXRhOiBhbnkgPSB7fTtcblx0XHRpZiAoc2VjdGlvbi5wYWdlcz8ubGVuZ3RoKSB7XG5cdFx0XHRkYXRhLnR5cGUgPSAnc3ViJztcblx0XHRcdGRhdGEuY2hpbGRyZW4gPSBzZWN0aW9uLnBhZ2VzLm1hcCgocGFnZTogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y29kZTogcGFnZS5jb2RlLFxuXHRcdFx0XHRcdG5hbWU6IHBhZ2UubmFtZSxcblx0XHRcdFx0XHR0eXBlOiAnbGluaycsXG5cdFx0XHRcdFx0cGF0aDogdGhpcy5jb25zdGFudHMuU0VDVElPTlNfUk9VVEUgKyAocGFnZS5zbHVnID8gcGFnZS5zbHVnIDogcGFnZS5jb2RlKSxcblx0XHRcdFx0XHQvLyBwYXRoOiB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIHBhZ2Uuc2x1Zyxcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvL2RhdGEudGl0bGUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLm5hbWUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLnBhdGggPSB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIChzZWN0aW9uLnNsdWcgPyBzZWN0aW9uLnNsdWcgOiBzZWN0aW9uLmNvZGUpO1xuXHRcdFx0ZGF0YS5jb2RlID0gc2VjdGlvbi5jb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhLmNvZGUgPSBzZWN0aW9uLmNvZGU7XG5cdFx0XHQvL2RhdGEudGl0bGUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLm5hbWUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLnR5cGUgPSAnbGluayc7XG5cdFx0XHRkYXRhLmNoaWxkcmVuID0gW107XG5cdFx0XHRkYXRhLnBhdGggPSB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIChzZWN0aW9uLnNsdWcgPyBzZWN0aW9uLnNsdWcgOiBzZWN0aW9uLmNvZGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXHQvKipcblx0ICogTWFwZWEgbG9zIGVsZW1lbnRvcyBwYXJhIGRhcmxlIHVuIGZvcm1hdG8gbWFzIGFtaWdhYmxlIHBhcmEgbG9zIG1lbsO6ZXMgeSBmaWx0cm9zLlxuXHQgKiBAcGFyYW0gZWxlbWVudHMgY2F0ZWdvcmlhcyB8IGF0cmlidXRvcyBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgZ2VuZXJhdGVNZW51ID0gKGVsZW1lbnRzOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gZWxlbWVudHMubWFwKChlbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdGlmIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi5lbGVtZW50LFxuXHRcdFx0XHRcdHRpdGxlOiBlbGVtZW50Lm5hbWUsXG5cdFx0XHRcdFx0cGF0aDogZWxlbWVudC5wYXRoLFxuXHRcdFx0XHRcdHR5cGU6ICdsaW5rJyxcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi5lbGVtZW50LFxuXHRcdFx0XHRcdHRpdGxlOiBlbGVtZW50Lm5hbWUsXG5cdFx0XHRcdFx0dHlwZTogJ3N1YicsXG5cdFx0XHRcdFx0cGF0aDogZWxlbWVudC5wYXRoLFxuXHRcdFx0XHRcdGNoaWxkcmVuOiAoZWxlbWVudC5jaGlsZHJlbiA/IHRoaXMuZ2VuZXJhdGVNZW51KGVsZW1lbnQuY2hpbGRyZW4pIDogW10pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsb3MgZWxlbWVudG9zIGRlbCBicmVhZGNydW1iLlxuXHQgKiBAcGFyYW0gY29kZSBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRCcmVhZGNydW1iID0gKGNvZGU6IGFueSkgPT4ge1xuXHRcdGlmICghY29kZSkgcmV0dXJuIG51bGw7XG5cdFx0bGV0IGJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCB0aGlzLmdlbmVyYXRlTWVudSh0aGlzLmNhdGVnb3JpZXNTdWJqZWN0LnZhbHVlKSwgW10pO1xuXHRcdGlmICghYnJlYWRjcnVtYiB8fCAhYnJlYWRjcnVtYi5sZW5ndGgpIGJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCB0aGlzLmdlbmVyYXRlTWVudSh0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LnZhbHVlKSwgW10pO1xuXHRcdHJldHVybiAoYnJlYWRjcnVtYiAmJiBicmVhZGNydW1iLmxlbmd0aCkgJiYgYnJlYWRjcnVtYi5yZXZlcnNlKCk7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYSBsb3MgYnJlYWRjcnVtYnMgZW4gYmFzZSBhIGxvcyBmaWx0cm9zIGFwbGljYWRvcy5cblx0ICogQHBhcmFtIGZpbHRlcnMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0QnJlYWRjcnVtYkJ5RmlsdGVycyA9IChmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4ge1xuXHRcdGxldCBmaW5hbF9yZXN1bHQ6IGFueVtdID0gW107XG5cdFx0ZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gZmlsdGVyLmdldFNlbGVjdGVkTGlzdCgpO1xuXHRcdFx0aWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5sZW5ndGgpIHJldHVybjtcblxuXHRcdFx0aWYgKGZpbHRlci50eXBlKCkgPT0gJ2NhdGVnb3JpZXMnKSBmaW5hbF9yZXN1bHQudW5zaGlmdCguLi50aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihyZXN1bHRbMF0sIGZpbHRlci5kYXRhLCBbXSkucmV2ZXJzZSgpKTtcblx0XHRcdGVsc2UgcmVzdWx0LmZvckVhY2goXG5cdFx0XHRcdChjb2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgYnJlYWRjcnVtYiA9IHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1iKGNvZGUsIGZpbHRlci5kYXRhLCBbXSlcblx0XHRcdFx0XHRicmVhZGNydW1iLmxlbmd0aCAmJiBmaW5hbF9yZXN1bHQucHVzaChicmVhZGNydW1iWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBmaW5hbF9yZXN1bHQ7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYSBlbCBsaXN0YWRvIGRlIGJyZWFkY3J1bWIuXG5cdCAqIEBwYXJhbSBjb2RlIFxuXHQgKiBAcGFyYW0gZWxlbWVudHMgZmlsdHJvcyBhY3R1YWxlcyBlbiBlbCBmcm9udGVuZFxuXHQgKiBAcGFyYW0gcmVzdWx0IGRhdG9zIGEgYWN0dWFsaXphciBjb24gZWwgbnVldm8gbGlzdGFkbyBkZSBicmVhZGNydW1iXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUJyZWFkY3J1bWIgPSAoY29kZTogc3RyaW5nLCBlbGVtZW50czogYW55LCByZXN1bHQ6IGFueSkgPT4ge1xuXHRcdGxldCBlbGVtZW50ID0gZWxlbWVudHMuZmluZCgoZWxlbTogYW55KSA9PiBlbGVtLmNvZGUgPT0gY29kZSk7XG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdHJlc3VsdC5wdXNoKGVsZW1lbnQpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGVsZW1lbnRzLnNvbWUoKGVsZW06IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoZWxlbS5jaGlsZHJlbiAmJiBlbGVtLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cdFx0XHRcdFx0bGV0IG5ld19yZXN1bHQgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCBlbGVtLmNoaWxkcmVuLCByZXN1bHQpO1xuXHRcdFx0XHRcdGlmIChuZXdfcmVzdWx0Lmxlbmd0aCA+IGxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gbmV3X3Jlc3VsdDtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGVsZW0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0cHVibGljIGdldFNlY3Rpb25Db250ZW50QnlMaW5rID0gKGxpbms6IGFueSkgPT5cblx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0SFRNTCh0aGlzLnBhZ2VDb250ZW50QnlDb2RlQXBpKGxpbmspKS5waXBlKFxuXHRcdFx0bWFwKGh0bWwgPT4gaHRtbC5zcGxpdCgnPC9oZWFkPicpW2h0bWwuc3BsaXQoJzwvaGVhZD4nKS5sZW5ndGggLSAxXSksXG5cdFx0XHRjYXRjaEVycm9yKGUgPT4gb2YoZmFsc2UpKVxuXHRcdCk7XG5cblx0XHRcblxuXHRnZXRGQVEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5mYXFzQXBpKCkpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcblx0XHRcdGxldCByZXN1bHQ6IEZBUVtdID0gW107XG5cdFx0XHRyZXNwb25zZS5mb3JFYWNoKChyZXNwb25zZV9mYXE6IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgZmFxczogRkFRID0ge1xuXHRcdFx0XHRcdGNvZGU6IHJlc3BvbnNlX2ZhcS5jb2RlLFxuXHRcdFx0XHRcdHBvc2l0aW9uOiByZXNwb25zZV9mYXEucG9zaXRpb24sXG5cdFx0XHRcdFx0dGl0bGU6IHJlc3BvbnNlX2ZhcS50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXS50b3BpYyxcblx0XHRcdFx0XHRxdWVzdGlvbnM6IHJlc3BvbnNlX2ZhcS5mcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMubWFwKChhc2tlZF9xdWVzdGlvbjogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Y29kZTogYXNrZWRfcXVlc3Rpb24uY29kZSxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhc2tlZF9xdWVzdGlvbi5wb3NpdGlvbixcblx0XHRcdFx0XHRcdHF1ZXN0aW9uOiBhc2tlZF9xdWVzdGlvbi50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXSA/IGFza2VkX3F1ZXN0aW9uLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdLnF1ZXN0aW9uIDogJycsXG5cdFx0XHRcdFx0XHRhbnN3ZXI6IGFza2VkX3F1ZXN0aW9uLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdID8gYXNrZWRfcXVlc3Rpb24udHJhbnNsYXRpb25zW3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRV0uYW5zd2VyIDogJycsXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGZhcXMpO1xuXHRcdFx0fSlcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSkpO1xuXHR9XG59IFxuIl19
|