@eui/core 18.0.0-rc.4 → 18.0.0-rc.40
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/docs/classes/CssUtils.html +59 -2
- package/docs/dependencies.html +3 -3
- package/docs/index.html +1 -1
- package/docs/injectables/CoreAppEffects.html +24 -5
- package/docs/injectables/EuiAppShellService.html +13 -1
- package/docs/injectables/EuiDynamicMenuService.html +2 -2
- package/docs/injectables/EuiThemeService.html +297 -96
- package/docs/injectables/LocalStorageService.html +12 -1
- package/docs/injectables/StoreService.html +12 -1
- package/docs/interfaces/IEuiTheme.html +387 -0
- package/docs/interfaces/ThemeState.html +309 -0
- package/docs/js/menu-wc.js +6 -0
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/enumerations.html +66 -6
- package/docs/miscellaneous/functions.html +284 -0
- package/docs/miscellaneous/variables.html +119 -31
- package/esm2022/index.mjs +3 -1
- package/esm2022/lib/helpers/css-utils.mjs +74 -60
- package/esm2022/lib/helpers/dom-helpers.mjs +3 -9
- package/esm2022/lib/services/dynamic-menu/dynamic-menu.service.mjs +2 -5
- package/esm2022/lib/services/eui-app-shell.service.mjs +20 -16
- package/esm2022/lib/services/eui-theme.service.mjs +186 -26
- package/esm2022/lib/services/locale/locale.service.mjs +2 -1
- package/esm2022/lib/services/storage/local-storage.service.mjs +36 -25
- package/esm2022/lib/services/store/effects/app.effects.mjs +19 -7
- package/esm2022/lib/services/store/reducers/meta.reducers.mjs +46 -32
- package/esm2022/lib/services/store/store.service.mjs +17 -9
- package/esm2022/lib/services/store/store.service.mock.mjs +3 -2
- package/fesm2022/eui-core.mjs +403 -194
- package/fesm2022/eui-core.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/lib/helpers/css-utils.d.ts +24 -18
- package/lib/helpers/css-utils.d.ts.map +1 -1
- package/lib/helpers/dom-helpers.d.ts +1 -1
- package/lib/helpers/dom-helpers.d.ts.map +1 -1
- package/lib/services/dynamic-menu/dynamic-menu.service.d.ts +5 -5
- package/lib/services/dynamic-menu/dynamic-menu.service.d.ts.map +1 -1
- package/lib/services/eui-app-shell.service.d.ts +3 -2
- package/lib/services/eui-app-shell.service.d.ts.map +1 -1
- package/lib/services/eui-theme.service.d.ts +41 -15
- package/lib/services/eui-theme.service.d.ts.map +1 -1
- package/lib/services/locale/locale.service.d.ts +1 -0
- package/lib/services/locale/locale.service.d.ts.map +1 -1
- package/lib/services/storage/local-storage.service.d.ts +3 -2
- package/lib/services/storage/local-storage.service.d.ts.map +1 -1
- package/lib/services/store/effects/app.effects.d.ts +2 -1
- package/lib/services/store/effects/app.effects.d.ts.map +1 -1
- package/lib/services/store/reducers/meta.reducers.d.ts +11 -1
- package/lib/services/store/reducers/meta.reducers.d.ts.map +1 -1
- package/lib/services/store/store.service.d.ts +3 -2
- package/lib/services/store/store.service.d.ts.map +1 -1
- package/lib/services/store/store.service.mock.d.ts +1 -0
- package/lib/services/store/store.service.mock.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';
|
|
2
|
-
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
3
3
|
import { BehaviorSubject, defer, firstValueFrom } from 'rxjs';
|
|
4
4
|
import { EuiEuLanguages, getActiveLang } from '@eui/base';
|
|
5
5
|
import { GLOBAL_CONFIG_TOKEN } from './config/tokens';
|
|
@@ -129,10 +129,11 @@ export class EuiAppShellService {
|
|
|
129
129
|
isDimmerActive: isActive,
|
|
130
130
|
});
|
|
131
131
|
}
|
|
132
|
-
constructor(config, http, platformId, router, storeService, i18nService) {
|
|
132
|
+
constructor(config, http, platformId, document, router, storeService, i18nService) {
|
|
133
133
|
this.config = config;
|
|
134
134
|
this.http = http;
|
|
135
135
|
this.platformId = platformId;
|
|
136
|
+
this.document = document;
|
|
136
137
|
this.router = router;
|
|
137
138
|
this.storeService = storeService;
|
|
138
139
|
this.i18nService = i18nService;
|
|
@@ -222,14 +223,14 @@ export class EuiAppShellService {
|
|
|
222
223
|
...this.state,
|
|
223
224
|
isDimmerActive: !isActive,
|
|
224
225
|
});
|
|
225
|
-
CssUtils.activateEditModeCssVars(!isActive);
|
|
226
|
+
CssUtils.activateEditModeCssVars(!isActive, this.document);
|
|
226
227
|
}
|
|
227
228
|
setDimmerActiveState(activeState) {
|
|
228
229
|
this.setState({
|
|
229
230
|
...this.state,
|
|
230
231
|
isDimmerActive: activeState,
|
|
231
232
|
});
|
|
232
|
-
CssUtils.activateEditModeCssVars(activeState);
|
|
233
|
+
CssUtils.activateEditModeCssVars(activeState, this.document);
|
|
233
234
|
}
|
|
234
235
|
// --------------
|
|
235
236
|
// public methods
|
|
@@ -248,42 +249,42 @@ export class EuiAppShellService {
|
|
|
248
249
|
hasSidebar: true,
|
|
249
250
|
});
|
|
250
251
|
if (!this.state.isSidebarHidden) {
|
|
251
|
-
CssUtils.activateSidebarCssVars();
|
|
252
|
+
CssUtils.activateSidebarCssVars(this.document, this.platformId);
|
|
252
253
|
}
|
|
253
254
|
}
|
|
254
255
|
activateSidebarHeader() {
|
|
255
|
-
CssUtils.activateSidebarHeaderCssVars();
|
|
256
|
+
CssUtils.activateSidebarHeaderCssVars(this.document, this.platformId);
|
|
256
257
|
}
|
|
257
258
|
activateSidebarFooter() {
|
|
258
|
-
CssUtils.activateSidebarFooterCssVars();
|
|
259
|
+
CssUtils.activateSidebarFooterCssVars(this.document, this.platformId);
|
|
259
260
|
}
|
|
260
261
|
activateHeader() {
|
|
261
262
|
this.setState({
|
|
262
263
|
...this.state,
|
|
263
264
|
hasHeader: true,
|
|
264
265
|
});
|
|
265
|
-
CssUtils.activateHeaderCssVars();
|
|
266
|
+
CssUtils.activateHeaderCssVars(this.document, this.platformId);
|
|
266
267
|
}
|
|
267
268
|
activateBreadcrumb() {
|
|
268
269
|
this.setState({
|
|
269
270
|
...this.state,
|
|
270
271
|
hasBreadcrumb: true,
|
|
271
272
|
});
|
|
272
|
-
CssUtils.activateBreadcrumbCssVars();
|
|
273
|
+
CssUtils.activateBreadcrumbCssVars(this.document, this.platformId);
|
|
273
274
|
}
|
|
274
275
|
activateTopMessage(height) {
|
|
275
276
|
this.setState({
|
|
276
277
|
...this.state,
|
|
277
278
|
hasTopMessage: true,
|
|
278
279
|
});
|
|
279
|
-
CssUtils.activateTopMessageCssVars(height);
|
|
280
|
+
CssUtils.activateTopMessageCssVars(height, this.document);
|
|
280
281
|
}
|
|
281
282
|
activateToolbar() {
|
|
282
283
|
this.setState({
|
|
283
284
|
...this.state,
|
|
284
285
|
hasToolbar: true,
|
|
285
286
|
});
|
|
286
|
-
CssUtils.activateToolbarCssVars();
|
|
287
|
+
CssUtils.activateToolbarCssVars(this.document, this.platformId);
|
|
287
288
|
}
|
|
288
289
|
activateToolbarMenu() {
|
|
289
290
|
this.setState({
|
|
@@ -295,7 +296,7 @@ export class EuiAppShellService {
|
|
|
295
296
|
* Returns the current value of --eui-f-size-base CSS variable
|
|
296
297
|
*/
|
|
297
298
|
getBaseFontSize() {
|
|
298
|
-
return this.state.appBaseFontSize || CssUtils.getCssVarValue('--eui-f-size-base');
|
|
299
|
+
return this.state.appBaseFontSize || CssUtils.getCssVarValue('--eui-f-size-base', this.document, this.platformId);
|
|
299
300
|
}
|
|
300
301
|
/**
|
|
301
302
|
* Updates the current value of --eui-f-size-base CSS variable and the UIState appBaseFontSize
|
|
@@ -305,7 +306,7 @@ export class EuiAppShellService {
|
|
|
305
306
|
...this.state,
|
|
306
307
|
appBaseFontSize: newsize,
|
|
307
308
|
}, false);
|
|
308
|
-
CssUtils.setCssVarValue('--eui-f-size-base', newsize);
|
|
309
|
+
CssUtils.setCssVarValue('--eui-f-size-base', newsize, this.document);
|
|
309
310
|
}
|
|
310
311
|
// ---------------
|
|
311
312
|
// private getters
|
|
@@ -340,7 +341,7 @@ export class EuiAppShellService {
|
|
|
340
341
|
if (this.state.breakpointValues.length === 0) {
|
|
341
342
|
this.setState({
|
|
342
343
|
...this.state,
|
|
343
|
-
breakpointValues: CssUtils.getBreakpointValues(),
|
|
344
|
+
breakpointValues: CssUtils.getBreakpointValues(this.document, this.platformId),
|
|
344
345
|
});
|
|
345
346
|
}
|
|
346
347
|
this.state.breakpointValues.forEach((b, i) => {
|
|
@@ -391,7 +392,7 @@ export class EuiAppShellService {
|
|
|
391
392
|
}
|
|
392
393
|
});
|
|
393
394
|
}
|
|
394
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiAppShellService, deps: [{ token: GLOBAL_CONFIG_TOKEN, optional: true }, { token: i1.HttpClient }, { token: PLATFORM_ID }, { token: i2.Router }, { token: i3.StoreService }, { token: i4.I18nService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
395
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiAppShellService, deps: [{ token: GLOBAL_CONFIG_TOKEN, optional: true }, { token: i1.HttpClient }, { token: PLATFORM_ID }, { token: DOCUMENT }, { token: i2.Router }, { token: i3.StoreService }, { token: i4.I18nService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
395
396
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiAppShellService, providedIn: 'root' }); }
|
|
396
397
|
}
|
|
397
398
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiAppShellService, decorators: [{
|
|
@@ -407,7 +408,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
407
408
|
}] }, { type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
408
409
|
type: Inject,
|
|
409
410
|
args: [PLATFORM_ID]
|
|
411
|
+
}] }, { type: Document, decorators: [{
|
|
412
|
+
type: Inject,
|
|
413
|
+
args: [DOCUMENT]
|
|
410
414
|
}] }, { type: i2.Router }, { type: i3.StoreService }, { type: i4.I18nService, decorators: [{
|
|
411
415
|
type: Optional
|
|
412
416
|
}] }] });
|
|
413
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWFwcC1zaGVsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9ldWktYXBwLXNoZWxsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsYUFBYSxFQUE0QixNQUFNLFdBQVcsQ0FBQztBQUNsRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxPQUFPLEVBQVUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQ3hDLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQXlEaEQsTUFBTSxZQUFZLEdBQVk7SUFDMUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxZQUFZLEVBQUUsRUFBRTtJQUNoQixXQUFXLEVBQUUsRUFBRTtJQUNmLGVBQWUsRUFBRSxFQUFFO0lBRW5CLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsVUFB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RCw4REFBOEQ7SUFDdEQsV0FBVyxDQUFDLEtBQVU7UUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8saUNBQWlDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzdELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxRQUFRLENBQ1Q7b0JBQ0ksR0FBRyxJQUFJLENBQUMsS0FBSztvQkFDYixjQUFjLEVBQUUsVUFBVTtpQkFDN0IsRUFDRCxLQUFLLENBQ1IsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBN1lRLGtCQUFrQixrQkE0RkgsbUJBQW1CLHVEQUUvQixXQUFXO2tIQTlGZCxrQkFBa0IsY0FGZixNQUFNOzsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkE2RlEsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUV0QyxNQUFNOzJCQUFDLFdBQVc7OzBCQUdsQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXVpRXVMYW5ndWFnZXMsIEdsb2JhbENvbmZpZywgZ2V0QWN0aXZlTGFuZywgRXVpTGFuZ3VhZ2UsIEV1aU1lbnVJdGVtIH0gZnJvbSAnQGV1aS9iYXNlJztcbmltcG9ydCB7IEdMT0JBTF9DT05GSUdfVE9LRU4gfSBmcm9tICcuL2NvbmZpZy90b2tlbnMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4vc3RvcmUvc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLWVzL2lzRXF1YWwnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gtZXMvZ2V0JztcbmltcG9ydCB7IENzc1V0aWxzIH0gZnJvbSAnLi4vaGVscGVycy9jc3MtdXRpbHMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGludGVyZmFjZSBVSVN0YXRlPEJQID0gYW55LCBESSA9IGFueSwgQU1EID1hbnksIEJQViA9IGFueT4ge1xuICAgIC8vIGFwcCBzdGF0ZVxuICAgIGFwcE5hbWU/OiBzdHJpbmc7XG4gICAgYXBwU2hvcnROYW1lPzogc3RyaW5nO1xuICAgIGFwcFN1YlRpdGxlPzogc3RyaW5nO1xuICAgIGFwcEJhc2VGb250U2l6ZT86IHN0cmluZztcblxuICAgIC8vIFNpZGViYXIgc3RhdGVcbiAgICBpc1NpZGViYXJPcGVuPzogYm9vbGVhbjtcbiAgICBpc1NpZGViYXJBY3RpdmU/OiBib29sZWFuO1xuICAgIGhhc1NpZGViYXI/OiBib29sZWFuO1xuICAgIGhhc0JyZWFkY3J1bWI/OiBib29sZWFuO1xuICAgIGhhc0hlYWRlcj86IGJvb2xlYW47XG4gICAgaGFzSGVhZGVyTG9nbz86IGJvb2xlYW47XG4gICAgaGFzSGVhZGVyRW52aXJvbm1lbnQ/OiBib29sZWFuO1xuICAgIGhhc1Rvb2xiYXI/OiBib29sZWFuO1xuICAgIGhhc1Rvb2xiYXJNZW51PzogYm9vbGVhbjtcbiAgICBlbnZpcm9ubWVudFZhbHVlPzogc3RyaW5nO1xuICAgIGlzU2lkZWJhckhpZGRlbj86IGJvb2xlYW47XG4gICAgaGFzVG9wTWVzc2FnZT86IGJvb2xlYW47XG5cbiAgICAvLyB3aW5kb3cgc3RhdGVcbiAgICB3aW5kb3dXaWR0aD86IG51bWJlcjtcbiAgICB3aW5kb3dIZWlnaHQ/OiBudW1iZXI7XG4gICAgbWFpbkNvbnRlbnRIZWlnaHQ/OiBudW1iZXI7XG4gICAgcGFnZUhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgICBicmVha3BvaW50Pzogc3RyaW5nO1xuICAgIHdyYXBwZXJDbGFzc2VzPzogc3RyaW5nO1xuICAgIGJyZWFrcG9pbnRzPzogQlA7XG4gICAgYnJlYWtwb2ludFZhbHVlcz86IEJQVjtcblxuICAgIC8vIG5hdmlnYXRpb24gc3RhdGVcbiAgICBtZW51TGlua3M/OiBFdWlNZW51SXRlbVtdO1xuICAgIHNpZGViYXJMaW5rcz86IEV1aU1lbnVJdGVtW107XG4gICAgY29tYmluZWRMaW5rcz86IEV1aU1lbnVJdGVtW107XG5cbiAgICAvLyBvdGhlciBzdGF0ZXNcbiAgICBpc0Jsb2NrRG9jdW1lbnRBY3RpdmU/OiBib29sZWFuO1xuXG4gICAgLy8gZGV2aWNlIGluZm9cbiAgICBkZXZpY2VJbmZvOiBESTtcblxuICAgIC8vIGxhbmd1YWdlIGluZm9zXG4gICAgYWN0aXZlTGFuZ3VhZ2U6IHN0cmluZztcbiAgICBsYW5ndWFnZXM6IChzdHJpbmcgfCBFdWlMYW5ndWFnZSlbXTtcblxuICAgIC8vIGFwcCBtZXRhZGF0YVxuICAgIGFwcE1ldGFkYXRhOiBBTUQ7XG5cbiAgICAvLyB2YXJpb3VzIGR5bmFtaWMgc3RhdGVcbiAgICBoYXNNb2RhbEFjdGl2ZT86IGJvb2xlYW47XG4gICAgaXNEaW1tZXJBY3RpdmU/OiBib29sZWFuOyAvLyBVc2FnZTogbWFwIHRvIGV1aSBiYXNlIGRpcmVjdGl2ZSBpbnB1dCBjb2VyY2UgZXVpSGlnaGxpZ2h0ZWRcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBVSVN0YXRlID0ge1xuICAgIGFwcE5hbWU6ICcnLFxuICAgIGFwcFNob3J0TmFtZTogJycsXG4gICAgYXBwU3ViVGl0bGU6ICcnLFxuICAgIGFwcEJhc2VGb250U2l6ZTogJycsXG5cbiAgICBpc1NpZGViYXJPcGVuOiB0cnVlLFxuICAgIGlzU2lkZWJhckFjdGl2ZTogZmFsc2UsXG4gICAgaGFzU2lkZWJhcjogZmFsc2UsXG4gICAgaGFzSGVhZGVyOiBmYWxzZSxcbiAgICBoYXNCcmVhZGNydW1iOiBmYWxzZSxcbiAgICBoYXNIZWFkZXJMb2dvOiBmYWxzZSxcbiAgICBoYXNIZWFkZXJFbnZpcm9ubWVudDogZmFsc2UsXG4gICAgaGFzVG9vbGJhcjogZmFsc2UsXG4gICAgaGFzVG9vbGJhck1lbnU6IGZhbHNlLFxuICAgIGVudmlyb25tZW50VmFsdWU6ICcnLFxuICAgIGlzU2lkZWJhckhpZGRlbjogZmFsc2UsXG4gICAgaGFzVG9wTWVzc2FnZTogZmFsc2UsXG4gICAgd2luZG93V2lkdGg6IDAsXG4gICAgd2luZG93SGVpZ2h0OiAwLFxuICAgIG1haW5Db250ZW50SGVpZ2h0OiAwLFxuICAgIHBhZ2VIZWFkZXJIZWlnaHQ6IDAsXG4gICAgd3JhcHBlckNsYXNzZXM6ICcnLFxuICAgIGJyZWFrcG9pbnQ6ICcnLFxuICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgaXNUYWJsZXQ6IGZhbHNlLFxuICAgICAgICBpc0x0TGFyZ2VUYWJsZXQ6IGZhbHNlLFxuICAgICAgICBpc0x0RGVza3RvcDogZmFsc2UsXG4gICAgICAgIGlzRGVza3RvcDogZmFsc2UsXG4gICAgICAgIGlzWEw6IGZhbHNlLFxuICAgICAgICBpc1hYTDogZmFsc2UsXG4gICAgICAgIGlzRkhEOiBmYWxzZSxcbiAgICAgICAgaXMySzogZmFsc2UsXG4gICAgICAgIGlzNEs6IGZhbHNlLFxuICAgIH0sXG4gICAgYnJlYWtwb2ludFZhbHVlczogW10sXG4gICAgbWVudUxpbmtzOiBbXSxcbiAgICBzaWRlYmFyTGlua3M6IFtdLFxuICAgIGNvbWJpbmVkTGlua3M6IFtdLFxuICAgIGlzQmxvY2tEb2N1bWVudEFjdGl2ZTogZmFsc2UsXG4gICAgZGV2aWNlSW5mbzogbnVsbCxcbiAgICBhY3RpdmVMYW5ndWFnZTogJ2VuJyxcbiAgICBsYW5ndWFnZXM6IEV1aUV1TGFuZ3VhZ2VzLmdldExhbmd1YWdlcygpLFxuICAgIGFwcE1ldGFkYXRhOiBudWxsLFxuICAgIGhhc01vZGFsQWN0aXZlOiBmYWxzZSxcbiAgICBpc0RpbW1lckFjdGl2ZTogZmFsc2UsXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlBcHBTaGVsbFNlcnZpY2Uge1xuICAgIG5hdmlnYXRpb25TdGFydEN1c3RvbUhhbmRsZXI6ICgpID0+IHZvaWQ7XG4gICAgbmF2aWdhdGlvbkVuZEN1c3RvbUhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFVJU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZXhwb3NlZCBvYnNlcnZhYmxlc1xuXG4gICAgZ2V0IGJyZWFrcG9pbnQkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGdldCBicmVha3BvaW50cyQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gc3RhdGUgb3BlcmF0aW9uc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS1cbiAgICBnZXQgc3RhdGUoKTogVUlTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gcHVibGljIHNldHRlcnMgYW5kIGZ1bmN0aW9uc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBzZXQgaXNTaWRlYmFyT3Blbihpc09wZW46IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaXNTaWRlYmFyT3BlbjogaXNPcGVuLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgaXNTaWRlYmFyT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNTaWRlYmFyT3BlbjtcbiAgICB9XG5cbiAgICBzZXQgaXNTaWRlYmFyQWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGlzU2lkZWJhckFjdGl2ZTogaXNBY3RpdmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldCBzaWRlYmFyTGlua3MobGlua3M6IEV1aU1lbnVJdGVtW10pIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgc2lkZWJhckxpbmtzOiBsaW5rcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0IG1lbnVMaW5rcyhsaW5rczogRXVpTWVudUl0ZW1bXSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBtZW51TGlua3M6IGxpbmtzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgaXNCbG9ja0RvY3VtZW50QWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGlzQmxvY2tEb2N1bWVudEFjdGl2ZTogaXNBY3RpdmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBoYXNIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmhhc0hlYWRlcjtcbiAgICB9XG5cbiAgICAvLyBFZGl0IG1vZGVcbiAgICBnZXQgaXNEaW1tZXJBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRGltbWVyQWN0aXZlO1xuICAgIH1cblxuICAgIHNldCBpc0RpbW1lckFjdGl2ZShpc0FjdGl2ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBpc0RpbW1lckFjdGl2ZTogaXNBY3RpdmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N0YXRlJDogQmVoYXZpb3JTdWJqZWN0PFVJU3RhdGU+O1xuICAgIHByaXZhdGUgX2JyZWFrcG9pbnQkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByaXZhdGUgX2JyZWFrcG9pbnRzJDogQmVoYXZpb3JTdWJqZWN0PGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChHTE9CQUxfQ09ORklHX1RPS0VOKSBwcm90ZWN0ZWQgY29uZmlnOiBHbG9iYWxDb25maWcsXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBvYmplY3QsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgc3RvcmVTZXJ2aWNlOiBTdG9yZVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBsZXQgc3RhdGVXaXRoQ29uZmlnID0gaW5pdGlhbFN0YXRlO1xuICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSBjb25maWc/LmkxOG4/LmkxOG5TZXJ2aWNlPy5sYW5ndWFnZXMgfHwgaW5pdGlhbFN0YXRlLmxhbmd1YWdlcztcbiAgICAgICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gY29uZmlnPy5pMThuPy5pMThuU2VydmljZT8uZGVmYXVsdExhbmd1YWdlIHx8IGluaXRpYWxTdGF0ZS5hY3RpdmVMYW5ndWFnZTtcbiAgICAgICAgc3RhdGVXaXRoQ29uZmlnID0ge1xuICAgICAgICAgICAgLi4uc3RhdGVXaXRoQ29uZmlnLFxuICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgIGxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBhY3RpdmVMYW5ndWFnZTogZGVmYXVsdExhbmd1YWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChzdGF0ZVdpdGhDb25maWcpO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgICAgICAgdGhpcy5iaW5kQWN0aXZlTGFuZ3VhZ2VUb0FwcFNoZWxsU3RhdGUoKTtcblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTdGF0ZShuZXh0U3RhdGU6IFVJU3RhdGUsIHVwZGF0ZUkxOCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJyZWFrcG9pbnQsIGJyZWFrcG9pbnRzO1xuICAgICAgICBsZXQgY29tYmluZWRMaW5rcztcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2luZG93IHdpZHRoIGhhcyBiZWVuIHVwZGF0ZWQgZnJvbSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS53aW5kb3dXaWR0aCAhPT0gbmV4dFN0YXRlLndpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICBicmVha3BvaW50ID0gdGhpcy5nZXRCcmVha3BvaW50KG5leHRTdGF0ZS53aW5kb3dXaWR0aCk7XG4gICAgICAgICAgICBicmVha3BvaW50cyA9IHRoaXMuZ2V0QnJlYWtwb2ludHMoYnJlYWtwb2ludCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnQkLm5leHQoYnJlYWtwb2ludCk7XG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cyQubmV4dChicmVha3BvaW50cyk7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vdCBwcm9wYWdhdGUgdGhlIG9sZCBvbmVzIHdpdGhvdXQgZG9pbmcgYW55IGNhbGN1bGF0aW9uc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWtwb2ludCA9IHN0YXRlLmJyZWFrcG9pbnQ7XG4gICAgICAgICAgICBicmVha3BvaW50cyA9IHN0YXRlLmJyZWFrcG9pbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluYWxseSBnZXQgdGhlIHdyYXBwZXIgY2xhc3NlcyB3aGVuIGJvdGggdGhlIHN0YXRlIGFuZCBicmVha3BvaW50IGFyZSBrbm93blxuICAgICAgICBjb25zdCB3cmFwcGVyQ2xhc3NlcyA9IHRoaXMuZ2V0V3JhcHBlckNsYXNzZXMobmV4dFN0YXRlLCBicmVha3BvaW50KTtcblxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgbWVudUxpbmtzIG9yIHNpZGViYXJMaW5rcyBoYXZlIGNoYW5nZWQgZnJvbSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5tZW51TGlua3MgIT09IG5leHRTdGF0ZS5tZW51TGlua3MgfHwgdGhpcy5zdGF0ZS5zaWRlYmFyTGlua3MgIT09IG5leHRTdGF0ZS5zaWRlYmFyTGlua3MpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkTGlua3MgPSBbLi4ubmV4dFN0YXRlLm1lbnVMaW5rcywgLi4ubmV4dFN0YXRlLnNpZGViYXJMaW5rc107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21iaW5lZExpbmtzID0gdGhpcy5zdGF0ZS5jb21iaW5lZExpbmtzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmVVcGRhdGUgPSB7IC4uLnRoaXMuc3RhdGUgfTtcblxuICAgICAgICAvLyB3ZSBwdXQgaXQgYWxsIHRvZ2V0aGVyIHdpdGggdGhlIGNhbGN1bGF0ZWQgcHJvcGVydGllc1xuICAgICAgICB0aGlzLl9zdGF0ZSQubmV4dCh7XG4gICAgICAgICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3NlcyxcbiAgICAgICAgICAgIGJyZWFrcG9pbnQsXG4gICAgICAgICAgICBicmVha3BvaW50cyxcbiAgICAgICAgICAgIGNvbWJpbmVkTGlua3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgU3RvcmUgTGFuZ3VhZ2VcbiAgICAgICAgaWYgKHVwZGF0ZUkxOCAmJiBuZXh0U3RhdGUuYWN0aXZlTGFuZ3VhZ2UgIT09IHN0YXRlQmVmb3JlVXBkYXRlLmFjdGl2ZUxhbmd1YWdlKSB7XG4gICAgICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnVwZGF0ZVN0YXRlKHsgYWN0aXZlTGFuZzogbmV4dFN0YXRlLmFjdGl2ZUxhbmd1YWdlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBzbGljZSBmcm9tIHRoZSBzdGF0ZSB3aGV0aGVyIHRoYXQgY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBjYW4gYmUgJ2tleScgb3IgJ2tleS5zdWIuc3ViJ1xuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZ2V0U3RhdGUoa2V5Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGRlZmVyKCgpID0+XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBrZXkgZXhpc3RzXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICA/IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKChzdGF0ZSkgPT4gZ2V0KHN0YXRlLCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IGlzRXF1YWwoeCwgeSkpLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5zdGF0ZSQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHNpZGViYXJUb2dnbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTaWRlYmFyT3BlbiA9ICF0aGlzLnN0YXRlLmlzU2lkZWJhck9wZW47XG4gICAgfVxuXG4gICAgLy8gRWRpdCBtb2RlXG4gICAgcHVibGljIGRpbW1lckFjdGl2ZVRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmlzRGltbWVyQWN0aXZlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBpc0RpbW1lckFjdGl2ZTogIWlzQWN0aXZlLFxuICAgICAgICB9KTtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVFZGl0TW9kZUNzc1ZhcnMoIWlzQWN0aXZlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGltbWVyQWN0aXZlU3RhdGUoYWN0aXZlU3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaXNEaW1tZXJBY3RpdmU6IGFjdGl2ZVN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVFZGl0TW9kZUNzc1ZhcnMoYWN0aXZlU3RhdGUpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tXG4gICAgLy8gcHVibGljIG1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLVxuICAgIHB1YmxpYyBmZXRjaEFwcE1ldGFkYXRhKG1ldGFkYXRhRmlsZVBhdGggPSAnYXNzZXRzL2FwcC1tZXRhZGF0YS5qc29uJyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldEpzb24obWV0YWRhdGFGaWxlUGF0aCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBhcHBNZXRhZGF0YTogZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVTaWRlYmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBoYXNTaWRlYmFyOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNTaWRlYmFySGlkZGVuKSB7XG4gICAgICAgICAgICBDc3NVdGlscy5hY3RpdmF0ZVNpZGViYXJDc3NWYXJzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVTaWRlYmFySGVhZGVyKCk6IHZvaWQge1xuICAgICAgICBDc3NVdGlscy5hY3RpdmF0ZVNpZGViYXJIZWFkZXJDc3NWYXJzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlU2lkZWJhckZvb3RlcigpOiB2b2lkIHtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVTaWRlYmFyRm9vdGVyQ3NzVmFycygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY3RpdmF0ZUhlYWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzSGVhZGVyOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVIZWFkZXJDc3NWYXJzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlQnJlYWRjcnVtYigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzQnJlYWRjcnVtYjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIENzc1V0aWxzLmFjdGl2YXRlQnJlYWRjcnVtYkNzc1ZhcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVUb3BNZXNzYWdlKGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGhhc1RvcE1lc3NhZ2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBDc3NVdGlscy5hY3RpdmF0ZVRvcE1lc3NhZ2VDc3NWYXJzKGhlaWdodCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlVG9vbGJhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzVG9vbGJhcjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIENzc1V0aWxzLmFjdGl2YXRlVG9vbGJhckNzc1ZhcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVUb29sYmFyTWVudSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzVG9vbGJhck1lbnU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgLS1ldWktZi1zaXplLWJhc2UgQ1NTIHZhcmlhYmxlXG4gICAgICovXG4gICAgcHVibGljIGdldEJhc2VGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hcHBCYXNlRm9udFNpemUgfHwgQ3NzVXRpbHMuZ2V0Q3NzVmFyVmFsdWUoJy0tZXVpLWYtc2l6ZS1iYXNlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiAtLWV1aS1mLXNpemUtYmFzZSBDU1MgdmFyaWFibGUgYW5kIHRoZSBVSVN0YXRlIGFwcEJhc2VGb250U2l6ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCYXNlRm9udFNpemUobmV3c2l6ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBhcHBCYXNlRm9udFNpemU6IG5ld3NpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICk7XG4gICAgICAgIENzc1V0aWxzLnNldENzc1ZhclZhbHVlKCctLWV1aS1mLXNpemUtYmFzZScsIG5ld3NpemUpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIHByaXZhdGUgZ2V0dGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAgIHByaXZhdGUgZ2V0V3JhcHBlckNsYXNzZXMoc3RhdGU6IFVJU3RhdGUsIGJyZWFrcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgY2xhc3Nlcy5wdXNoKGJyZWFrcG9pbnQpO1xuXG4gICAgICAgIGlmIChzdGF0ZS5oYXNTaWRlYmFyKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuaXNTaWRlYmFySGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzaWRlYmFyLS1oaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc1NpZGViYXJPcGVuKSB7XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzaWRlYmFyLS1vcGVuJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2lkZWJhci0tY2xvc2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZGV2aWNlSW5mbz8uaXNGRikge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdmZicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5kZXZpY2VJbmZvPy5pc0lFKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2llJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmRldmljZUluZm8/LmlzQ2hyb21lKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2Nocm9tZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJyZWFrcG9pbnQod2luZG93V2lkdGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCBia3AgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5icmVha3BvaW50VmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBicmVha3BvaW50VmFsdWVzOiBDc3NVdGlscy5nZXRCcmVha3BvaW50VmFsdWVzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUuYnJlYWtwb2ludFZhbHVlcy5mb3JFYWNoKChiLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA8IHRoaXMuc3RhdGUuYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93V2lkdGggPj0gYi52YWx1ZSAmJiB3aW5kb3dXaWR0aCA8IHRoaXMuc3RhdGUuYnJlYWtwb2ludFZhbHVlc1tpKzFdLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJrcCA9IGIuYmtwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZih3aW5kb3dXaWR0aCA+PSBiLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYmtwID0gYi5ia3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBia3A7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCcmVha3BvaW50cyhia3A6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc01vYmlsZTogYmtwID09PSAneHMnIHx8IGJrcCA9PT0gJ3NtJyxcbiAgICAgICAgICAgIGlzVGFibGV0OiBia3AgPT09ICdtZCcsXG4gICAgICAgICAgICBpc0x0TGFyZ2VUYWJsZXQ6IGJrcCA9PT0gJ3hzJyB8fCBia3AgPT09ICdzbScgfHwgYmtwID09PSAnbWQnIHx8IGJrcCA9PT0gJ2xnJyxcbiAgICAgICAgICAgIGlzTHREZXNrdG9wOiBia3AgPT09ICd4cycgfHwgYmtwID09PSAnc20nIHx8IGJrcCA9PT0gJ21kJyB8fCBia3AgPT09ICdsZycgfHwgYmtwID09PSAneGwnLFxuICAgICAgICAgICAgaXNEZXNrdG9wOiBia3AgPT09ICd4eGwnLFxuICAgICAgICAgICAgaXNYTDogYmtwID09PSAneGwnLFxuICAgICAgICAgICAgaXNYWEw6IGJrcCA9PT0gJ3h4bCcsXG4gICAgICAgICAgICBpc0ZIRDogYmtwID09PSAnZmhkJyxcbiAgICAgICAgICAgIGlzMks6IGJrcCA9PT0gJzJrJyxcbiAgICAgICAgICAgIGlzNEs6IGJrcCA9PT0gJzRrJyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEpzb24odXJsOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldCh1cmwpKS50aGVuKHRoaXMuZXh0cmFjdERhdGEpLmNhdGNoKHRoaXMuaGFuZGxlRXJyb3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdERhdGEocmVzOiBSZXNwb25zZSk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSByZXM7XG4gICAgICAgIHJldHVybiBib2R5IHx8IHt9O1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRBY3RpdmVMYW5ndWFnZVRvQXBwU2hlbGxTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9yZVNlcnZpY2Uuc2VsZWN0KGdldEFjdGl2ZUxhbmcpLnN1YnNjcmliZSgoYWN0aXZlTGFuZykgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZUxhbmcgIT09IHRoaXMuc3RhdGUuYWN0aXZlTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlTGFuZ3VhZ2U6IGFjdGl2ZUxhbmcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
417
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWFwcC1zaGVsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9ldWktYXBwLXNoZWxsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQWdCLGFBQWEsRUFBNEIsTUFBTSxXQUFXLENBQUM7QUFDbEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEQsT0FBTyxFQUFVLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUN4QyxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUF5RGhELE1BQU0sWUFBWSxHQUFZO0lBQzFCLE9BQU8sRUFBRSxFQUFFO0lBQ1gsWUFBWSxFQUFFLEVBQUU7SUFDaEIsV0FBVyxFQUFFLEVBQUU7SUFDZixlQUFlLEVBQUUsRUFBRTtJQUVuQixhQUFhLEVBQUUsSUFBSTtJQUNuQixlQUFlLEVBQUUsS0FBSztJQUN0QixVQUFVLEVBQUUsS0FBSztJQUNqQixTQUFTLEVBQUUsS0FBSztJQUNoQixhQUFhLEVBQUUsS0FBSztJQUNwQixhQUFhLEVBQUUsS0FBSztJQUNwQixvQkFBb0IsRUFBRSxLQUFL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QTlZUSxrQkFBa0Isa0JBNEZILG1CQUFtQix1REFFL0IsV0FBVyxhQUNYLFFBQVE7a0hBL0ZYLGtCQUFrQixjQUZmLE1BQU07OzJGQUVULGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQTZGUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBRXRDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsUUFBUTs7MEJBR2YsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVmZXIsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFdWlFdUxhbmd1YWdlcywgR2xvYmFsQ29uZmlnLCBnZXRBY3RpdmVMYW5nLCBFdWlMYW5ndWFnZSwgRXVpTWVudUl0ZW0gfSBmcm9tICdAZXVpL2Jhc2UnO1xuaW1wb3J0IHsgR0xPQkFMX0NPTkZJR19UT0tFTiB9IGZyb20gJy4vY29uZmlnL3Rva2Vucyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4vaTE4bic7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yZS9zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gtZXMvaXNFcXVhbCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC1lcy9nZXQnO1xuaW1wb3J0IHsgQ3NzVXRpbHMgfSBmcm9tICcuLi9oZWxwZXJzL2Nzcy11dGlscyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgaW50ZXJmYWNlIFVJU3RhdGU8QlAgPSBhbnksIERJID0gYW55LCBBTUQgPWFueSwgQlBWID0gYW55PiB7XG4gICAgLy8gYXBwIHN0YXRlXG4gICAgYXBwTmFtZT86IHN0cmluZztcbiAgICBhcHBTaG9ydE5hbWU/OiBzdHJpbmc7XG4gICAgYXBwU3ViVGl0bGU/OiBzdHJpbmc7XG4gICAgYXBwQmFzZUZvbnRTaXplPzogc3RyaW5nO1xuXG4gICAgLy8gU2lkZWJhciBzdGF0ZVxuICAgIGlzU2lkZWJhck9wZW4/OiBib29sZWFuO1xuICAgIGlzU2lkZWJhckFjdGl2ZT86IGJvb2xlYW47XG4gICAgaGFzU2lkZWJhcj86IGJvb2xlYW47XG4gICAgaGFzQnJlYWRjcnVtYj86IGJvb2xlYW47XG4gICAgaGFzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBoYXNIZWFkZXJMb2dvPzogYm9vbGVhbjtcbiAgICBoYXNIZWFkZXJFbnZpcm9ubWVudD86IGJvb2xlYW47XG4gICAgaGFzVG9vbGJhcj86IGJvb2xlYW47XG4gICAgaGFzVG9vbGJhck1lbnU/OiBib29sZWFuO1xuICAgIGVudmlyb25tZW50VmFsdWU/OiBzdHJpbmc7XG4gICAgaXNTaWRlYmFySGlkZGVuPzogYm9vbGVhbjtcbiAgICBoYXNUb3BNZXNzYWdlPzogYm9vbGVhbjtcblxuICAgIC8vIHdpbmRvdyBzdGF0ZVxuICAgIHdpbmRvd1dpZHRoPzogbnVtYmVyO1xuICAgIHdpbmRvd0hlaWdodD86IG51bWJlcjtcbiAgICBtYWluQ29udGVudEhlaWdodD86IG51bWJlcjtcbiAgICBwYWdlSGVhZGVySGVpZ2h0PzogbnVtYmVyO1xuICAgIGJyZWFrcG9pbnQ/OiBzdHJpbmc7XG4gICAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmc7XG4gICAgYnJlYWtwb2ludHM/OiBCUDtcbiAgICBicmVha3BvaW50VmFsdWVzPzogQlBWO1xuXG4gICAgLy8gbmF2aWdhdGlvbiBzdGF0ZVxuICAgIG1lbnVMaW5rcz86IEV1aU1lbnVJdGVtW107XG4gICAgc2lkZWJhckxpbmtzPzogRXVpTWVudUl0ZW1bXTtcbiAgICBjb21iaW5lZExpbmtzPzogRXVpTWVudUl0ZW1bXTtcblxuICAgIC8vIG90aGVyIHN0YXRlc1xuICAgIGlzQmxvY2tEb2N1bWVudEFjdGl2ZT86IGJvb2xlYW47XG5cbiAgICAvLyBkZXZpY2UgaW5mb1xuICAgIGRldmljZUluZm86IERJO1xuXG4gICAgLy8gbGFuZ3VhZ2UgaW5mb3NcbiAgICBhY3RpdmVMYW5ndWFnZTogc3RyaW5nO1xuICAgIGxhbmd1YWdlczogKHN0cmluZyB8IEV1aUxhbmd1YWdlKVtdO1xuXG4gICAgLy8gYXBwIG1ldGFkYXRhXG4gICAgYXBwTWV0YWRhdGE6IEFNRDtcblxuICAgIC8vIHZhcmlvdXMgZHluYW1pYyBzdGF0ZVxuICAgIGhhc01vZGFsQWN0aXZlPzogYm9vbGVhbjtcbiAgICBpc0RpbW1lckFjdGl2ZT86IGJvb2xlYW47IC8vIFVzYWdlOiBtYXAgdG8gZXVpIGJhc2UgZGlyZWN0aXZlIGlucHV0IGNvZXJjZSBldWlIaWdobGlnaHRlZFxufVxuXG5jb25zdCBpbml0aWFsU3RhdGU6IFVJU3RhdGUgPSB7XG4gICAgYXBwTmFtZTogJycsXG4gICAgYXBwU2hvcnROYW1lOiAnJyxcbiAgICBhcHBTdWJUaXRsZTogJycsXG4gICAgYXBwQmFzZUZvbnRTaXplOiAnJyxcblxuICAgIGlzU2lkZWJhck9wZW46IHRydWUsXG4gICAgaXNTaWRlYmFyQWN0aXZlOiBmYWxzZSxcbiAgICBoYXNTaWRlYmFyOiBmYWxzZSxcbiAgICBoYXNIZWFkZXI6IGZhbHNlLFxuICAgIGhhc0JyZWFkY3J1bWI6IGZhbHNlLFxuICAgIGhhc0hlYWRlckxvZ286IGZhbHNlLFxuICAgIGhhc0hlYWRlckVudmlyb25tZW50OiBmYWxzZSxcbiAgICBoYXNUb29sYmFyOiBmYWxzZSxcbiAgICBoYXNUb29sYmFyTWVudTogZmFsc2UsXG4gICAgZW52aXJvbm1lbnRWYWx1ZTogJycsXG4gICAgaXNTaWRlYmFySGlkZGVuOiBmYWxzZSxcbiAgICBoYXNUb3BNZXNzYWdlOiBmYWxzZSxcbiAgICB3aW5kb3dXaWR0aDogMCxcbiAgICB3aW5kb3dIZWlnaHQ6IDAsXG4gICAgbWFpbkNvbnRlbnRIZWlnaHQ6IDAsXG4gICAgcGFnZUhlYWRlckhlaWdodDogMCxcbiAgICB3cmFwcGVyQ2xhc3NlczogJycsXG4gICAgYnJlYWtwb2ludDogJycsXG4gICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgICAgICBpc1RhYmxldDogZmFsc2UsXG4gICAgICAgIGlzTHRMYXJnZVRhYmxldDogZmFsc2UsXG4gICAgICAgIGlzTHREZXNrdG9wOiBmYWxzZSxcbiAgICAgICAgaXNEZXNrdG9wOiBmYWxzZSxcbiAgICAgICAgaXNYTDogZmFsc2UsXG4gICAgICAgIGlzWFhMOiBmYWxzZSxcbiAgICAgICAgaXNGSEQ6IGZhbHNlLFxuICAgICAgICBpczJLOiBmYWxzZSxcbiAgICAgICAgaXM0SzogZmFsc2UsXG4gICAgfSxcbiAgICBicmVha3BvaW50VmFsdWVzOiBbXSxcbiAgICBtZW51TGlua3M6IFtdLFxuICAgIHNpZGViYXJMaW5rczogW10sXG4gICAgY29tYmluZWRMaW5rczogW10sXG4gICAgaXNCbG9ja0RvY3VtZW50QWN0aXZlOiBmYWxzZSxcbiAgICBkZXZpY2VJbmZvOiBudWxsLFxuICAgIGFjdGl2ZUxhbmd1YWdlOiAnZW4nLFxuICAgIGxhbmd1YWdlczogRXVpRXVMYW5ndWFnZXMuZ2V0TGFuZ3VhZ2VzKCksXG4gICAgYXBwTWV0YWRhdGE6IG51bGwsXG4gICAgaGFzTW9kYWxBY3RpdmU6IGZhbHNlLFxuICAgIGlzRGltbWVyQWN0aXZlOiBmYWxzZSxcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEV1aUFwcFNoZWxsU2VydmljZSB7XG4gICAgbmF2aWdhdGlvblN0YXJ0Q3VzdG9tSGFuZGxlcjogKCkgPT4gdm9pZDtcbiAgICBuYXZpZ2F0aW9uRW5kQ3VzdG9tSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBnZXQgc3RhdGUkKCk6IE9ic2VydmFibGU8VUlTdGF0ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBleHBvc2VkIG9ic2VydmFibGVzXG5cbiAgICBnZXQgYnJlYWtwb2ludCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZ2V0IGJyZWFrcG9pbnRzJCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBzdGF0ZSBvcGVyYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuICAgIGdldCBzdGF0ZSgpOiBVSVN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBwdWJsaWMgc2V0dGVycyBhbmQgZnVuY3Rpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHNldCBpc1NpZGViYXJPcGVuKGlzT3BlbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBpc1NpZGViYXJPcGVuOiBpc09wZW4sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBpc1NpZGViYXJPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc1NpZGViYXJPcGVuO1xuICAgIH1cblxuICAgIHNldCBpc1NpZGViYXJBY3RpdmUoaXNBY3RpdmU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaXNTaWRlYmFyQWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0IHNpZGViYXJMaW5rcyhsaW5rczogRXVpTWVudUl0ZW1bXSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBzaWRlYmFyTGlua3M6IGxpbmtzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgbWVudUxpbmtzKGxpbmtzOiBFdWlNZW51SXRlbVtdKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIG1lbnVMaW5rczogbGlua3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldCBpc0Jsb2NrRG9jdW1lbnRBY3RpdmUoaXNBY3RpdmU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaXNCbG9ja0RvY3VtZW50QWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0hlYWRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaGFzSGVhZGVyO1xuICAgIH1cblxuICAgIC8vIEVkaXQgbW9kZVxuICAgIGdldCBpc0RpbW1lckFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNEaW1tZXJBY3RpdmU7XG4gICAgfVxuXG4gICAgc2V0IGlzRGltbWVyQWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGlzRGltbWVyQWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8VUlTdGF0ZT47XG4gICAgcHJpdmF0ZSBfYnJlYWtwb2ludCQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBfYnJlYWtwb2ludHMkOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEdMT0JBTF9DT05GSUdfVE9LRU4pIHByb3RlY3RlZCBjb25maWc6IEdsb2JhbENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IG9iamVjdCxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgc3RvcmVTZXJ2aWNlOiBTdG9yZVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBsZXQgc3RhdGVXaXRoQ29uZmlnID0gaW5pdGlhbFN0YXRlO1xuICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSBjb25maWc/LmkxOG4/LmkxOG5TZXJ2aWNlPy5sYW5ndWFnZXMgfHwgaW5pdGlhbFN0YXRlLmxhbmd1YWdlcztcbiAgICAgICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gY29uZmlnPy5pMThuPy5pMThuU2VydmljZT8uZGVmYXVsdExhbmd1YWdlIHx8IGluaXRpYWxTdGF0ZS5hY3RpdmVMYW5ndWFnZTtcbiAgICAgICAgc3RhdGVXaXRoQ29uZmlnID0ge1xuICAgICAgICAgICAgLi4uc3RhdGVXaXRoQ29uZmlnLFxuICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgIGxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBhY3RpdmVMYW5ndWFnZTogZGVmYXVsdExhbmd1YWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChzdGF0ZVdpdGhDb25maWcpO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgICAgICAgdGhpcy5iaW5kQWN0aXZlTGFuZ3VhZ2VUb0FwcFNoZWxsU3RhdGUoKTtcblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTdGF0ZShuZXh0U3RhdGU6IFVJU3RhdGUsIHVwZGF0ZUkxOCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJyZWFrcG9pbnQsIGJyZWFrcG9pbnRzO1xuICAgICAgICBsZXQgY29tYmluZWRMaW5rcztcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2luZG93IHdpZHRoIGhhcyBiZWVuIHVwZGF0ZWQgZnJvbSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS53aW5kb3dXaWR0aCAhPT0gbmV4dFN0YXRlLndpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICBicmVha3BvaW50ID0gdGhpcy5nZXRCcmVha3BvaW50KG5leHRTdGF0ZS53aW5kb3dXaWR0aCk7XG4gICAgICAgICAgICBicmVha3BvaW50cyA9IHRoaXMuZ2V0QnJlYWtwb2ludHMoYnJlYWtwb2ludCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnQkLm5leHQoYnJlYWtwb2ludCk7XG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cyQubmV4dChicmVha3BvaW50cyk7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vdCBwcm9wYWdhdGUgdGhlIG9sZCBvbmVzIHdpdGhvdXQgZG9pbmcgYW55IGNhbGN1bGF0aW9uc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWtwb2ludCA9IHN0YXRlLmJyZWFrcG9pbnQ7XG4gICAgICAgICAgICBicmVha3BvaW50cyA9IHN0YXRlLmJyZWFrcG9pbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluYWxseSBnZXQgdGhlIHdyYXBwZXIgY2xhc3NlcyB3aGVuIGJvdGggdGhlIHN0YXRlIGFuZCBicmVha3BvaW50IGFyZSBrbm93blxuICAgICAgICBjb25zdCB3cmFwcGVyQ2xhc3NlcyA9IHRoaXMuZ2V0V3JhcHBlckNsYXNzZXMobmV4dFN0YXRlLCBicmVha3BvaW50KTtcblxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgbWVudUxpbmtzIG9yIHNpZGViYXJMaW5rcyBoYXZlIGNoYW5nZWQgZnJvbSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5tZW51TGlua3MgIT09IG5leHRTdGF0ZS5tZW51TGlua3MgfHwgdGhpcy5zdGF0ZS5zaWRlYmFyTGlua3MgIT09IG5leHRTdGF0ZS5zaWRlYmFyTGlua3MpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkTGlua3MgPSBbLi4ubmV4dFN0YXRlLm1lbnVMaW5rcywgLi4ubmV4dFN0YXRlLnNpZGViYXJMaW5rc107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21iaW5lZExpbmtzID0gdGhpcy5zdGF0ZS5jb21iaW5lZExpbmtzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmVVcGRhdGUgPSB7IC4uLnRoaXMuc3RhdGUgfTtcblxuICAgICAgICAvLyB3ZSBwdXQgaXQgYWxsIHRvZ2V0aGVyIHdpdGggdGhlIGNhbGN1bGF0ZWQgcHJvcGVydGllc1xuICAgICAgICB0aGlzLl9zdGF0ZSQubmV4dCh7XG4gICAgICAgICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3NlcyxcbiAgICAgICAgICAgIGJyZWFrcG9pbnQsXG4gICAgICAgICAgICBicmVha3BvaW50cyxcbiAgICAgICAgICAgIGNvbWJpbmVkTGlua3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgU3RvcmUgTGFuZ3VhZ2VcbiAgICAgICAgaWYgKHVwZGF0ZUkxOCAmJiBuZXh0U3RhdGUuYWN0aXZlTGFuZ3VhZ2UgIT09IHN0YXRlQmVmb3JlVXBkYXRlLmFjdGl2ZUxhbmd1YWdlKSB7XG4gICAgICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnVwZGF0ZVN0YXRlKHsgYWN0aXZlTGFuZzogbmV4dFN0YXRlLmFjdGl2ZUxhbmd1YWdlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBzbGljZSBmcm9tIHRoZSBzdGF0ZSB3aGV0aGVyIHRoYXQgY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBjYW4gYmUgJ2tleScgb3IgJ2tleS5zdWIuc3ViJ1xuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZ2V0U3RhdGUoa2V5Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGRlZmVyKCgpID0+XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBrZXkgZXhpc3RzXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICA/IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKChzdGF0ZSkgPT4gZ2V0KHN0YXRlLCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IGlzRXF1YWwoeCwgeSkpLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5zdGF0ZSQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHNpZGViYXJUb2dnbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTaWRlYmFyT3BlbiA9ICF0aGlzLnN0YXRlLmlzU2lkZWJhck9wZW47XG4gICAgfVxuXG4gICAgLy8gRWRpdCBtb2RlXG4gICAgcHVibGljIGRpbW1lckFjdGl2ZVRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmlzRGltbWVyQWN0aXZlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBpc0RpbW1lckFjdGl2ZTogIWlzQWN0aXZlLFxuICAgICAgICB9KTtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVFZGl0TW9kZUNzc1ZhcnMoIWlzQWN0aXZlLCB0aGlzLmRvY3VtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGltbWVyQWN0aXZlU3RhdGUoYWN0aXZlU3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaXNEaW1tZXJBY3RpdmU6IGFjdGl2ZVN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVFZGl0TW9kZUNzc1ZhcnMoYWN0aXZlU3RhdGUsIHRoaXMuZG9jdW1lbnQpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tXG4gICAgLy8gcHVibGljIG1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLVxuICAgIHB1YmxpYyBmZXRjaEFwcE1ldGFkYXRhKG1ldGFkYXRhRmlsZVBhdGggPSAnYXNzZXRzL2FwcC1tZXRhZGF0YS5qc29uJyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldEpzb24obWV0YWRhdGFGaWxlUGF0aCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBhcHBNZXRhZGF0YTogZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVTaWRlYmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBoYXNTaWRlYmFyOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNTaWRlYmFySGlkZGVuKSB7XG4gICAgICAgICAgICBDc3NVdGlscy5hY3RpdmF0ZVNpZGViYXJDc3NWYXJzKHRoaXMuZG9jdW1lbnQsIHRoaXMucGxhdGZvcm1JZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVTaWRlYmFySGVhZGVyKCk6IHZvaWQge1xuICAgICAgICBDc3NVdGlscy5hY3RpdmF0ZVNpZGViYXJIZWFkZXJDc3NWYXJzKHRoaXMuZG9jdW1lbnQsIHRoaXMucGxhdGZvcm1JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlU2lkZWJhckZvb3RlcigpOiB2b2lkIHtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVTaWRlYmFyRm9vdGVyQ3NzVmFycyh0aGlzLmRvY3VtZW50LCB0aGlzLnBsYXRmb3JtSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY3RpdmF0ZUhlYWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzSGVhZGVyOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgQ3NzVXRpbHMuYWN0aXZhdGVIZWFkZXJDc3NWYXJzKHRoaXMuZG9jdW1lbnQsIHRoaXMucGxhdGZvcm1JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlQnJlYWRjcnVtYigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzQnJlYWRjcnVtYjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIENzc1V0aWxzLmFjdGl2YXRlQnJlYWRjcnVtYkNzc1ZhcnModGhpcy5kb2N1bWVudCwgdGhpcy5wbGF0Zm9ybUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVUb3BNZXNzYWdlKGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGhhc1RvcE1lc3NhZ2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBDc3NVdGlscy5hY3RpdmF0ZVRvcE1lc3NhZ2VDc3NWYXJzKGhlaWdodCwgdGhpcy5kb2N1bWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlVG9vbGJhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzVG9vbGJhcjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIENzc1V0aWxzLmFjdGl2YXRlVG9vbGJhckNzc1ZhcnModGhpcy5kb2N1bWVudCwgdGhpcy5wbGF0Zm9ybUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVUb29sYmFyTWVudSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaGFzVG9vbGJhck1lbnU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgLS1ldWktZi1zaXplLWJhc2UgQ1NTIHZhcmlhYmxlXG4gICAgICovXG4gICAgcHVibGljIGdldEJhc2VGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hcHBCYXNlRm9udFNpemUgfHwgQ3NzVXRpbHMuZ2V0Q3NzVmFyVmFsdWUoJy0tZXVpLWYtc2l6ZS1iYXNlJywgdGhpcy5kb2N1bWVudCwgdGhpcy5wbGF0Zm9ybUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIC0tZXVpLWYtc2l6ZS1iYXNlIENTUyB2YXJpYWJsZSBhbmQgdGhlIFVJU3RhdGUgYXBwQmFzZUZvbnRTaXplXG4gICAgICovXG4gICAgcHVibGljIHNldEJhc2VGb250U2l6ZShuZXdzaXplOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgIGFwcEJhc2VGb250U2l6ZTogbmV3c2l6ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTtcbiAgICAgICAgQ3NzVXRpbHMuc2V0Q3NzVmFyVmFsdWUoJy0tZXVpLWYtc2l6ZS1iYXNlJywgbmV3c2l6ZSwgdGhpcy5kb2N1bWVudCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gcHJpdmF0ZSBnZXR0ZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gICAgcHJpdmF0ZSBnZXRXcmFwcGVyQ2xhc3NlcyhzdGF0ZTogVUlTdGF0ZSwgYnJlYWtwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjbGFzc2VzLnB1c2goYnJlYWtwb2ludCk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmhhc1NpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc1NpZGViYXJIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NpZGViYXItLWhpZGRlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzU2lkZWJhck9wZW4pIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NpZGViYXItLW9wZW4nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzaWRlYmFyLS1jbG9zZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5kZXZpY2VJbmZvPy5pc0ZGKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2ZmJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmRldmljZUluZm8/LmlzSUUpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZGV2aWNlSW5mbz8uaXNDaHJvbWUpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnY2hyb21lJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QnJlYWtwb2ludCh3aW5kb3dXaWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJrcCA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRWYWx1ZXM6IENzc1V0aWxzLmdldEJyZWFrcG9pbnRWYWx1ZXModGhpcy5kb2N1bWVudCwgdGhpcy5wbGF0Zm9ybUlkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZS5icmVha3BvaW50VmFsdWVzLmZvckVhY2goKGIsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpIDwgdGhpcy5zdGF0ZS5icmVha3BvaW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3dXaWR0aCA+PSBiLnZhbHVlICYmIHdpbmRvd1dpZHRoIDwgdGhpcy5zdGF0ZS5icmVha3BvaW50VmFsdWVzW2krMV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYmtwID0gYi5ia3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmKHdpbmRvd1dpZHRoID49IGIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBia3AgPSBiLmJrcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGJrcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJyZWFrcG9pbnRzKGJrcDogc3RyaW5nKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzTW9iaWxlOiBia3AgPT09ICd4cycgfHwgYmtwID09PSAnc20nLFxuICAgICAgICAgICAgaXNUYWJsZXQ6IGJrcCA9PT0gJ21kJyxcbiAgICAgICAgICAgIGlzTHRMYXJnZVRhYmxldDogYmtwID09PSAneHMnIHx8IGJrcCA9PT0gJ3NtJyB8fCBia3AgPT09ICdtZCcgfHwgYmtwID09PSAnbGcnLFxuICAgICAgICAgICAgaXNMdERlc2t0b3A6IGJrcCA9PT0gJ3hzJyB8fCBia3AgPT09ICdzbScgfHwgYmtwID09PSAnbWQnIHx8IGJrcCA9PT0gJ2xnJyB8fCBia3AgPT09ICd4bCcsXG4gICAgICAgICAgICBpc0Rlc2t0b3A6IGJrcCA9PT0gJ3h4bCcsXG4gICAgICAgICAgICBpc1hMOiBia3AgPT09ICd4bCcsXG4gICAgICAgICAgICBpc1hYTDogYmtwID09PSAneHhsJyxcbiAgICAgICAgICAgIGlzRkhEOiBia3AgPT09ICdmaGQnLFxuICAgICAgICAgICAgaXMySzogYmtwID09PSAnMmsnLFxuICAgICAgICAgICAgaXM0SzogYmtwID09PSAnNGsnLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SnNvbih1cmw6IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0KHVybCkpLnRoZW4odGhpcy5leHRyYWN0RGF0YSkuY2F0Y2godGhpcy5oYW5kbGVFcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRyYWN0RGF0YShyZXM6IFJlc3BvbnNlKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHJlcztcbiAgICAgICAgcmV0dXJuIGJvZHkgfHwge307XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZEFjdGl2ZUxhbmd1YWdlVG9BcHBTaGVsbFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlU2VydmljZS5zZWxlY3QoZ2V0QWN0aXZlTGFuZykuc3Vic2NyaWJlKChhY3RpdmVMYW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlTGFuZyAhPT0gdGhpcy5zdGF0ZS5hY3RpdmVMYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVMYW5ndWFnZTogYWN0aXZlTGFuZyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,47 +1,207 @@
|
|
|
1
1
|
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
3
|
import { GLOBAL_CONFIG_TOKEN } from './config/tokens';
|
|
3
|
-
import {
|
|
4
|
+
import { DOCUMENT } from '@angular/common';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./eui-app-shell.service";
|
|
5
7
|
export var EuiTheme;
|
|
6
8
|
(function (EuiTheme) {
|
|
7
|
-
EuiTheme["
|
|
8
|
-
EuiTheme["
|
|
9
|
-
EuiTheme["
|
|
9
|
+
EuiTheme["DEFAULT"] = "default";
|
|
10
|
+
EuiTheme["ECL_EC"] = "ecl-ec";
|
|
11
|
+
EuiTheme["ECL_EC_RTL"] = "ecl-ec-rtl";
|
|
12
|
+
EuiTheme["ECL_EU"] = "ecl-eu";
|
|
13
|
+
EuiTheme["ECL_EU_RTL"] = "ecl-eu-rtl";
|
|
14
|
+
EuiTheme["EUI_LEGACY"] = "eui-legacy";
|
|
15
|
+
EuiTheme["EUI_LEGACY_HC"] = "eui-legacy-high-contrast";
|
|
16
|
+
EuiTheme["DARK"] = "dark";
|
|
17
|
+
EuiTheme["COMPACT"] = "compact";
|
|
10
18
|
})(EuiTheme || (EuiTheme = {}));
|
|
19
|
+
;
|
|
20
|
+
;
|
|
21
|
+
const initialState = {
|
|
22
|
+
themes: [
|
|
23
|
+
{ name: EuiTheme.DEFAULT, isActive: false, styleSheet: null, cssClass: null },
|
|
24
|
+
{ name: EuiTheme.ECL_EC, isActive: false, styleSheet: 'eui-ecl-ec.css', cssClass: null },
|
|
25
|
+
{ name: EuiTheme.ECL_EC_RTL, isActive: false, styleSheet: 'eui-ecl-ec-rtl.css', cssClass: null },
|
|
26
|
+
{ name: EuiTheme.ECL_EU, isActive: false, styleSheet: 'eui-ecl-eu.css', cssClass: null },
|
|
27
|
+
{ name: EuiTheme.ECL_EU_RTL, isActive: false, styleSheet: 'eui-ecl-eu-rtl.css', cssClass: null },
|
|
28
|
+
{ name: EuiTheme.EUI_LEGACY, isActive: false, styleSheet: null, cssClass: 'eui-t-eui-legacy' },
|
|
29
|
+
{ name: EuiTheme.EUI_LEGACY_HC, isActive: false, styleSheet: null, cssClass: 'eui-t-high-contrast' },
|
|
30
|
+
{ name: EuiTheme.DARK, isActive: false, styleSheet: null, cssClass: 'eui-t-dark' },
|
|
31
|
+
{ name: EuiTheme.COMPACT, isActive: false, styleSheet: null, cssClass: 'eui-t-compact' },
|
|
32
|
+
],
|
|
33
|
+
theme: {
|
|
34
|
+
isDefault: false,
|
|
35
|
+
isEclEc: false,
|
|
36
|
+
isEclEcRtl: false,
|
|
37
|
+
isEclEu: false,
|
|
38
|
+
isEclEuRtl: false,
|
|
39
|
+
isEuiLegacy: false,
|
|
40
|
+
isEuiLegacyHc: false,
|
|
41
|
+
isDark: false,
|
|
42
|
+
isCompact: false,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
11
45
|
export class EuiThemeService {
|
|
12
|
-
constructor(config) {
|
|
46
|
+
constructor(document, config, asService) {
|
|
47
|
+
this.document = document;
|
|
13
48
|
this.config = config;
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.theme
|
|
17
|
-
this.
|
|
18
|
-
this.isEC$ = this.theme$.pipe(map((theme) => EuiTheme.EC === theme));
|
|
19
|
-
const theme = this.config?.eui?.theme || EuiTheme.EC;
|
|
20
|
-
this.setTheme(theme);
|
|
49
|
+
this.asService = asService;
|
|
50
|
+
this._state$ = new BehaviorSubject(initialState);
|
|
51
|
+
const themeName = this.config?.eui?.theme || EuiTheme.DEFAULT;
|
|
52
|
+
this.setActiveTheme(themeName, true);
|
|
21
53
|
}
|
|
22
|
-
|
|
23
|
-
return
|
|
54
|
+
get state$() {
|
|
55
|
+
return this._state$.asObservable();
|
|
24
56
|
}
|
|
25
|
-
|
|
26
|
-
return
|
|
57
|
+
get state() {
|
|
58
|
+
return this._state$.getValue();
|
|
27
59
|
}
|
|
28
|
-
|
|
29
|
-
return this.theme;
|
|
60
|
+
isDefault() {
|
|
61
|
+
return this.state.theme.isDefault;
|
|
30
62
|
}
|
|
31
|
-
|
|
32
|
-
this.theme
|
|
33
|
-
this.themeSubject.next(theme);
|
|
63
|
+
isEclEc() {
|
|
64
|
+
return this.state.theme.isEclEc;
|
|
34
65
|
}
|
|
35
|
-
|
|
66
|
+
isEclEcRtl() {
|
|
67
|
+
return this.state.theme.isEclEcRtl;
|
|
68
|
+
}
|
|
69
|
+
isEclEu() {
|
|
70
|
+
return this.state.theme.isEclEu;
|
|
71
|
+
}
|
|
72
|
+
isEclEuRtl() {
|
|
73
|
+
return this.state.theme.isEclEuRtl;
|
|
74
|
+
}
|
|
75
|
+
isEuiLegacy() {
|
|
76
|
+
return this.state.theme.isEuiLegacy;
|
|
77
|
+
}
|
|
78
|
+
isEuiLegacyHc() {
|
|
79
|
+
return this.state.theme.isEuiLegacyHc;
|
|
80
|
+
}
|
|
81
|
+
isDark() {
|
|
82
|
+
return this.state.theme.isDark;
|
|
83
|
+
}
|
|
84
|
+
isCompact() {
|
|
85
|
+
return this.state.theme.isCompact;
|
|
86
|
+
}
|
|
87
|
+
setActiveTheme(theme, isActive) {
|
|
88
|
+
const themes = this.state.themes;
|
|
89
|
+
const themeIdx = themes.findIndex(t => t.name === theme);
|
|
90
|
+
if (themeIdx < 0) {
|
|
91
|
+
throw new Error('NO_THEME_FOUND');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
themes[themeIdx].isActive = isActive;
|
|
95
|
+
const themeFound = themes[themeIdx];
|
|
96
|
+
const status = initialState.theme;
|
|
97
|
+
switch (theme) {
|
|
98
|
+
case EuiTheme.DEFAULT: {
|
|
99
|
+
status.isDefault = isActive;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case EuiTheme.ECL_EC: {
|
|
103
|
+
status.isEclEc = isActive;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case EuiTheme.ECL_EC_RTL: {
|
|
107
|
+
status.isEclEcRtl = isActive;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case EuiTheme.ECL_EU: {
|
|
111
|
+
status.isEclEu = isActive;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case EuiTheme.ECL_EU_RTL: {
|
|
115
|
+
status.isEclEuRtl = isActive;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case EuiTheme.DARK: {
|
|
119
|
+
status.isDark = isActive;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case EuiTheme.COMPACT: {
|
|
123
|
+
status.isCompact = isActive;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case EuiTheme.EUI_LEGACY: {
|
|
127
|
+
status.isEuiLegacy = isActive;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case EuiTheme.EUI_LEGACY_HC: {
|
|
131
|
+
status.isEuiLegacyHc = isActive;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
this._state$.next({
|
|
136
|
+
themes,
|
|
137
|
+
theme: status,
|
|
138
|
+
});
|
|
139
|
+
this._renderTheme(themeFound, isActive);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
_renderTheme(themeFound, isActive) {
|
|
143
|
+
if (themeFound.name === EuiTheme.COMPACT) {
|
|
144
|
+
if (isActive) {
|
|
145
|
+
this.asService.setBaseFontSize('14px');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.asService.setBaseFontSize('16px');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (themeFound.name === EuiTheme.ECL_EC_RTL || themeFound.name === EuiTheme.ECL_EU_RTL) {
|
|
152
|
+
const rtlLink = this.document.getElementById('rtl-theme');
|
|
153
|
+
this._renderThemeCss(themeFound, isActive, rtlLink);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const themeLink = this.document.getElementById('eui-theme');
|
|
157
|
+
this._renderThemeCss(themeFound, isActive, themeLink);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
_renderThemeCss(themeFound, isActive, link) {
|
|
161
|
+
const head = this.document.getElementsByTagName('head')[0];
|
|
162
|
+
if (isActive) {
|
|
163
|
+
if (themeFound.cssClass) {
|
|
164
|
+
document.querySelector('html').classList.add(themeFound.cssClass);
|
|
165
|
+
}
|
|
166
|
+
if (themeFound.styleSheet) {
|
|
167
|
+
if (link) {
|
|
168
|
+
link.href = themeFound.styleSheet;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const style = this.document.createElement('link');
|
|
172
|
+
style.id = 'eui-theme';
|
|
173
|
+
style.rel = 'stylesheet';
|
|
174
|
+
style.href = `assets/${themeFound.styleSheet}`;
|
|
175
|
+
head.appendChild(style);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
if (themeFound.cssClass) {
|
|
181
|
+
document.querySelector('html').classList.remove(themeFound.cssClass);
|
|
182
|
+
}
|
|
183
|
+
if (themeFound.styleSheet) {
|
|
184
|
+
if (link) {
|
|
185
|
+
link.media = '';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiThemeService, deps: [{ token: DOCUMENT }, { token: GLOBAL_CONFIG_TOKEN, optional: true }, { token: i1.EuiAppShellService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
36
191
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiThemeService, providedIn: 'root' }); }
|
|
37
192
|
}
|
|
38
193
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiThemeService, decorators: [{
|
|
39
194
|
type: Injectable,
|
|
40
|
-
args: [{
|
|
41
|
-
|
|
195
|
+
args: [{
|
|
196
|
+
providedIn: 'root',
|
|
197
|
+
}]
|
|
198
|
+
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
199
|
+
type: Inject,
|
|
200
|
+
args: [DOCUMENT]
|
|
201
|
+
}] }, { type: undefined, decorators: [{
|
|
42
202
|
type: Optional
|
|
43
203
|
}, {
|
|
44
204
|
type: Inject,
|
|
45
205
|
args: [GLOBAL_CONFIG_TOKEN]
|
|
46
|
-
}] }] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRoZW1lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2V1aS10aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsR0FBRyxFQUFjLGFBQWEsRUFBVyxNQUFNLE1BQU0sQ0FBQzs7QUFFL0QsTUFBTSxDQUFOLElBQVksUUFJWDtBQUpELFdBQVksUUFBUTtJQUNoQixxQkFBUyxDQUFBO0lBQ1QscUJBQVMsQ0FBQTtJQUNULHVCQUFXLENBQUE7QUFDZixDQUFDLEVBSlcsUUFBUSxLQUFSLFFBQVEsUUFJbkI7QUFHRCxNQUFNLE9BQU8sZUFBZTtJQVF4QixZQUErRCxNQUFvQjtRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBSDNFLFVBQUssR0FBYSxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQXNCLElBQUksYUFBYSxFQUFZLENBQUM7UUFHcEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVyRSxNQUFNLEtBQUssR0FBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFrQixJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sUUFBUSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxTQUFTO1FBQ0wsT0FBTyxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFlO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBbENRLGVBQWUsa0JBUVEsbUJBQW1CO2tIQVIxQyxlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHTE9CQUxfQ09ORklHX1RPS0VOIH0gZnJvbSAnLi9jb25maWcvdG9rZW5zJztcbmltcG9ydCB7IEdsb2JhbENvbmZpZyB9IGZyb20gJ0BldWkvYmFzZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGVudW0gRXVpVGhlbWUge1xuICAgIEVDID0gJ2VjJyxcbiAgICBFVSA9ICdldScsXG4gICAgRVVJID0gJ2V1aScsXG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRXVpVGhlbWVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgdGhlbWUkOiBPYnNlcnZhYmxlPEV1aVRoZW1lPjtcbiAgICBwdWJsaWMgaXNFVSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIGlzRUMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSB0aGVtZTogRXVpVGhlbWUgPSBFdWlUaGVtZS5FQztcbiAgICBwcml2YXRlIHRoZW1lU3ViamVjdDogU3ViamVjdDxFdWlUaGVtZT4gPSBuZXcgUmVwbGF5U3ViamVjdDxFdWlUaGVtZT4oKTtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoR0xPQkFMX0NPTkZJR19UT0tFTikgcHJvdGVjdGVkIGNvbmZpZzogR2xvYmFsQ29uZmlnKSB7XG4gICAgICAgIHRoaXMudGhlbWUkID0gdGhpcy50aGVtZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAgICAgdGhpcy5pc0VVJCA9IHRoaXMudGhlbWUkLnBpcGUobWFwKCh0aGVtZSkgPT4gRXVpVGhlbWUuRVUgPT09IHRoZW1lKSk7XG5cbiAgICAgICAgdGhpcy5pc0VDJCA9IHRoaXMudGhlbWUkLnBpcGUobWFwKCh0aGVtZSkgPT4gRXVpVGhlbWUuRUMgPT09IHRoZW1lKSk7XG5cbiAgICAgICAgY29uc3QgdGhlbWUgPSAodGhpcy5jb25maWc/LmV1aT8udGhlbWUgYXMgRXVpVGhlbWUpIHx8IEV1aVRoZW1lLkVDO1xuICAgICAgICB0aGlzLnNldFRoZW1lKHRoZW1lKTtcbiAgICB9XG5cbiAgICBpc0VDVGhlbWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBFdWlUaGVtZS5FQyA9PT0gdGhpcy50aGVtZTtcbiAgICB9XG5cbiAgICBpc0VVVGhlbWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBFdWlUaGVtZS5FVSA9PT0gdGhpcy50aGVtZTtcbiAgICB9XG5cbiAgICBnZXRUaGVtZSgpOiBFdWlUaGVtZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW1lO1xuICAgIH1cblxuICAgIHNldFRoZW1lKHRoZW1lOiBFdWlUaGVtZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRoZW1lID0gdGhlbWU7XG4gICAgICAgIHRoaXMudGhlbWVTdWJqZWN0Lm5leHQodGhlbWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
206
|
+
}] }, { type: i1.EuiAppShellService }] });
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRoZW1lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2V1aS10aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTNDLE1BQU0sQ0FBTixJQUFZLFFBVVg7QUFWRCxXQUFZLFFBQVE7SUFDaEIsK0JBQW1CLENBQUE7SUFDbkIsNkJBQWlCLENBQUE7SUFDakIscUNBQXlCLENBQUE7SUFDekIsNkJBQWlCLENBQUE7SUFDakIscUNBQXlCLENBQUE7SUFDekIscUNBQXlCLENBQUE7SUFDekIsc0RBQTBDLENBQUE7SUFDMUMseUJBQWEsQ0FBQTtJQUNiLCtCQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFWVyxRQUFRLEtBQVIsUUFBUSxRQVVuQjtBQUFBLENBQUM7QUFPRCxDQUFDO0FBUUYsTUFBTSxZQUFZLEdBQWU7SUFDN0IsTUFBTSxFQUFFO1FBQ0osRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM3RSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDeEYsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUs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SUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2xELEtBQUssQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDO29CQUN2QixLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztvQkFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFFL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDUCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQzs4R0FwSVEsZUFBZSxrQkFJWixRQUFRLGFBQ0ksbUJBQW1CO2tIQUxsQyxlQUFlLGNBRlosTUFBTTs7MkZBRVQsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUtRLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdMT0JBTF9DT05GSUdfVE9LRU4gfSBmcm9tICcuL2NvbmZpZy90b2tlbnMnO1xuaW1wb3J0IHsgR2xvYmFsQ29uZmlnIH0gZnJvbSAnQGV1aS9iYXNlJztcbmltcG9ydCB7IEV1aUFwcFNoZWxsU2VydmljZSB9IGZyb20gJy4vZXVpLWFwcC1zaGVsbC5zZXJ2aWNlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGVudW0gRXVpVGhlbWUge1xuICAgIERFRkFVTFQgPSAnZGVmYXVsdCcsXG4gICAgRUNMX0VDID0gJ2VjbC1lYycsXG4gICAgRUNMX0VDX1JUTCA9ICdlY2wtZWMtcnRsJyxcbiAgICBFQ0xfRVUgPSAnZWNsLWV1JyxcbiAgICBFQ0xfRVVfUlRMID0gJ2VjbC1ldS1ydGwnLFxuICAgIEVVSV9MRUdBQ1kgPSAnZXVpLWxlZ2FjeScsXG4gICAgRVVJX0xFR0FDWV9IQyA9ICdldWktbGVnYWN5LWhpZ2gtY29udHJhc3QnLFxuICAgIERBUksgPSAnZGFyaycsXG4gICAgQ09NUEFDVCA9ICdjb21wYWN0Jyxcbn07XG5cbmludGVyZmFjZSBJRXVpVGhlbWUge1xuICAgIG5hbWU6IEV1aVRoZW1lLFxuICAgIGlzQWN0aXZlOiBib29sZWFuLFxuICAgIHN0eWxlU2hlZXQ6IHN0cmluZyxcbiAgICBjc3NDbGFzczogc3RyaW5nLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBUaGVtZVN0YXRlIHtcbiAgICB0aGVtZXM6IElFdWlUaGVtZVtdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhlbWU6IGFueTtcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBUaGVtZVN0YXRlID0ge1xuICAgIHRoZW1lczogW1xuICAgICAgICB7IG5hbWU6IEV1aVRoZW1lLkRFRkFVTFQsIGlzQWN0aXZlOiBmYWxzZSwgc3R5bGVTaGVldDogbnVsbCwgY3NzQ2xhc3M6IG51bGwgfSxcbiAgICAgICAgeyBuYW1lOiBFdWlUaGVtZS5FQ0xfRUMsIGlzQWN0aXZlOiBmYWxzZSwgc3R5bGVTaGVldDogJ2V1aS1lY2wtZWMuY3NzJywgY3NzQ2xhc3M6IG51bGwgfSxcbiAgICAgICAgeyBuYW1lOiBFdWlUaGVtZS5FQ0xfRUNfUlRMLCBpc0FjdGl2ZTogZmFsc2UsIHN0eWxlU2hlZXQ6ICdldWktZWNsLWVjLXJ0bC5jc3MnLCBjc3NDbGFzczogbnVsbCB9LFxuICAgICAgICB7IG5hbWU6IEV1aVRoZW1lLkVDTF9FVSwgaXNBY3RpdmU6IGZhbHNlLCBzdHlsZVNoZWV0OiAnZXVpLWVjbC1ldS5jc3MnLCBjc3NDbGFzczogbnVsbCB9LFxuICAgICAgICB7IG5hbWU6IEV1aVRoZW1lLkVDTF9FVV9SVEwsIGlzQWN0aXZlOiBmYWxzZSwgc3R5bGVTaGVldDogJ2V1aS1lY2wtZXUtcnRsLmNzcycsIGNzc0NsYXNzOiBudWxsIH0sXG4gICAgICAgIHsgbmFtZTogRXVpVGhlbWUuRVVJX0xFR0FDWSwgaXNBY3RpdmU6IGZhbHNlLCBzdHlsZVNoZWV0OiBudWxsLCBjc3NDbGFzczogJ2V1aS10LWV1aS1sZWdhY3knIH0sXG4gICAgICAgIHsgbmFtZTogRXVpVGhlbWUuRVVJX0xFR0FDWV9IQywgaXNBY3RpdmU6IGZhbHNlLCBzdHlsZVNoZWV0OiBudWxsLCBjc3NDbGFzczogJ2V1aS10LWhpZ2gtY29udHJhc3QnIH0sXG4gICAgICAgIHsgbmFtZTogRXVpVGhlbWUuREFSSywgaXNBY3RpdmU6IGZhbHNlLCBzdHlsZVNoZWV0OiBudWxsLCBjc3NDbGFzczogJ2V1aS10LWRhcmsnIH0sXG4gICAgICAgIHsgbmFtZTogRXVpVGhlbWUuQ09NUEFDVCwgaXNBY3RpdmU6IGZhbHNlLCBzdHlsZVNoZWV0OiBudWxsLCBjc3NDbGFzczogJ2V1aS10LWNvbXBhY3QnIH0sXG4gICAgXSxcbiAgICB0aGVtZToge1xuICAgICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBpc0VjbEVjOiBmYWxzZSxcbiAgICAgICAgaXNFY2xFY1J0bDogZmFsc2UsXG4gICAgICAgIGlzRWNsRXU6IGZhbHNlLFxuICAgICAgICBpc0VjbEV1UnRsOiBmYWxzZSxcbiAgICAgICAgaXNFdWlMZWdhY3k6IGZhbHNlLFxuICAgICAgICBpc0V1aUxlZ2FjeUhjOiBmYWxzZSxcbiAgICAgICAgaXNEYXJrOiBmYWxzZSxcbiAgICAgICAgaXNDb21wYWN0OiBmYWxzZSxcbiAgICB9LFxufTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVGhlbWVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9zdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxUaGVtZVN0YXRlPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChHTE9CQUxfQ09ORklHX1RPS0VOKSBwcm90ZWN0ZWQgY29uZmlnOiBHbG9iYWxDb25maWcsXG4gICAgICAgIHByaXZhdGUgYXNTZXJ2aWNlOiBFdWlBcHBTaGVsbFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX3N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgY29uc3QgdGhlbWVOYW1lID0gKHRoaXMuY29uZmlnPy5ldWk/LnRoZW1lIGFzIEV1aVRoZW1lKSB8fCBFdWlUaGVtZS5ERUZBVUxUO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZVRoZW1lKHRoZW1lTmFtZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFRoZW1lU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogVGhlbWVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBpc0RlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnRoZW1lLmlzRGVmYXVsdDtcbiAgICB9XG4gICAgaXNFY2xFYygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGhlbWUuaXNFY2xFYztcbiAgICB9XG4gICAgaXNFY2xFY1J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGhlbWUuaXNFY2xFY1J0bDtcbiAgICB9XG4gICAgaXNFY2xFdSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGhlbWUuaXNFY2xFdTtcbiAgICB9XG4gICAgaXNFY2xFdVJ0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGhlbWUuaXNFY2xFdVJ0bDtcbiAgICB9XG4gICAgaXNFdWlMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnRoZW1lLmlzRXVpTGVnYWN5O1xuICAgIH1cbiAgICBpc0V1aUxlZ2FjeUhjKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS50aGVtZS5pc0V1aUxlZ2FjeUhjO1xuICAgIH1cbiAgICBpc0RhcmsoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnRoZW1lLmlzRGFyaztcbiAgICB9XG4gICAgaXNDb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS50aGVtZS5pc0NvbXBhY3Q7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlVGhlbWUodGhlbWU6IEV1aVRoZW1lLCBpc0FjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZXMgPSB0aGlzLnN0YXRlLnRoZW1lcztcbiAgICAgICAgY29uc3QgdGhlbWVJZHggPSB0aGVtZXMuZmluZEluZGV4KHQgPT4gdC5uYW1lID09PSB0aGVtZSk7XG5cbiAgICAgICAgaWYgKHRoZW1lSWR4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT19USEVNRV9GT1VORCcpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVtZXNbdGhlbWVJZHhdLmlzQWN0aXZlID0gaXNBY3RpdmU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRoZW1lRm91bmQ6IElFdWlUaGVtZSA9IHRoZW1lc1t0aGVtZUlkeF07XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGluaXRpYWxTdGF0ZS50aGVtZTtcblxuICAgICAgICAgICAgc3dpdGNoKHRoZW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBFdWlUaGVtZS5ERUZBVUxUOiB7IHN0YXR1cy5pc0RlZmF1bHQgPSBpc0FjdGl2ZTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICBjYXNlIEV1aVRoZW1lLkVDTF9FQzogeyBzdGF0dXMuaXNFY2xFYyA9IGlzQWN0aXZlOyBicmVhazsgfVxuICAgICAgICAgICAgICAgIGNhc2UgRXVpVGhlbWUuRUNMX0VDX1JUTDogeyBzdGF0dXMuaXNFY2xFY1J0bCA9IGlzQWN0aXZlOyBicmVhazsgfVxuICAgICAgICAgICAgICAgIGNhc2UgRXVpVGhlbWUuRUNMX0VVOiB7IHN0YXR1cy5pc0VjbEV1ID0gaXNBY3RpdmU7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgY2FzZSBFdWlUaGVtZS5FQ0xfRVVfUlRMOiB7IHN0YXR1cy5pc0VjbEV1UnRsID0gaXNBY3RpdmU7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgY2FzZSBFdWlUaGVtZS5EQVJLOiB7IHN0YXR1cy5pc0RhcmsgPSBpc0FjdGl2ZTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICBjYXNlIEV1aVRoZW1lLkNPTVBBQ1Q6IHsgc3RhdHVzLmlzQ29tcGFjdCA9IGlzQWN0aXZlOyBicmVhazsgfVxuICAgICAgICAgICAgICAgIGNhc2UgRXVpVGhlbWUuRVVJX0xFR0FDWTogeyBzdGF0dXMuaXNFdWlMZWdhY3kgPSBpc0FjdGl2ZTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICBjYXNlIEV1aVRoZW1lLkVVSV9MRUdBQ1lfSEM6IHsgc3RhdHVzLmlzRXVpTGVnYWN5SGMgPSBpc0FjdGl2ZTsgYnJlYWs7IH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoe1xuICAgICAgICAgICAgICAgIHRoZW1lcyxcbiAgICAgICAgICAgICAgICB0aGVtZTogc3RhdHVzLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRoZW1lKHRoZW1lRm91bmQsIGlzQWN0aXZlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JlbmRlclRoZW1lKHRoZW1lRm91bmQ6IElFdWlUaGVtZSwgaXNBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoZW1lRm91bmQubmFtZSA9PT0gRXVpVGhlbWUuQ09NUEFDVCkge1xuICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc1NlcnZpY2Uuc2V0QmFzZUZvbnRTaXplKCcxNHB4Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNTZXJ2aWNlLnNldEJhc2VGb250U2l6ZSgnMTZweCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAodGhlbWVGb3VuZC5uYW1lID09PSBFdWlUaGVtZS5FQ0xfRUNfUlRMIHx8IHRoZW1lRm91bmQubmFtZSA9PT0gRXVpVGhlbWUuRUNMX0VVX1JUTCkge1xuICAgICAgICAgICAgY29uc3QgcnRsTGluayA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J0bC10aGVtZScpIGFzIEhUTUxMaW5rRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRoZW1lQ3NzKHRoZW1lRm91bmQsIGlzQWN0aXZlLCBydGxMaW5rKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGhlbWVMaW5rID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXVpLXRoZW1lJykgYXMgSFRNTExpbmtFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGhlbWVDc3ModGhlbWVGb3VuZCwgaXNBY3RpdmUsIHRoZW1lTGluayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW5kZXJUaGVtZUNzcyh0aGVtZUZvdW5kOiBJRXVpVGhlbWUsIGlzQWN0aXZlOiBib29sZWFuLCBsaW5rOiBIVE1MTGlua0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGVhZCA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIGlmICh0aGVtZUZvdW5kLmNzc0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLmNsYXNzTGlzdC5hZGQodGhlbWVGb3VuZC5jc3NDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhlbWVGb3VuZC5zdHlsZVNoZWV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gdGhlbWVGb3VuZC5zdHlsZVNoZWV0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmlkID0gJ2V1aS10aGVtZSc7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuaHJlZiA9IGBhc3NldHMvJHt0aGVtZUZvdW5kLnN0eWxlU2hlZXR9YDtcblxuICAgICAgICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhlbWVGb3VuZC5jc3NDbGFzcykge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5jbGFzc0xpc3QucmVtb3ZlKHRoZW1lRm91bmQuY3NzQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhlbWVGb3VuZC5zdHlsZVNoZWV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgbGluay5tZWRpYSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|