@wavemaker/app-ng-runtime 11.9.5-1.6044 → 11.9.5-1.6099

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.9.5-1.6044",
3
+ "version": "11.9.5-1.6099",
4
4
  "description": "All modules required for a wavemaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -2470,47 +2470,19 @@
2470
2470
  type: i0.Injectable,
2471
2471
  args: [{ providedIn: 'root' }]
2472
2472
  }], () => [{ type: PipeProvider }, { type: i1__namespace.App }], null); })();
2473
-
2474
- const injectorMap = {
2475
- DialogService: i1.AbstractDialogService,
2476
- i18nService: i1.AbstractI18nService,
2477
- PipeService: PipeService,
2478
- statePersistence: i1.StatePersistence,
2479
- SpinnerService: i1.AbstractSpinnerService,
2480
- StatePersistenceService: i1.StatePersistence,
2481
- Viewport: i1.Viewport,
2482
- ToasterService: i1.AbstractToasterService,
2483
- Utils: i1.UtilsService,
2484
- CONSTANTS: i1.ConstantService,
2485
- FIELD_TYPE: i1.FieldTypeService,
2486
- FIELD_WIDGET: i1.FieldWidgetService,
2487
- DynamicComponentService: i1.DynamicComponentRefProvider
2488
- };
2489
2473
  const noop = (...args) => { };
2490
- // Wraps httpService to behave as angular 1.x $http service.
2491
- const getHttpDependency = function () {
2492
- const httpService = this.httpService;
2493
- const fn = function (key, options) {
2494
- const args = Array.from(arguments).slice(1);
2495
- return Promise.resolve(httpService[key].apply(httpService, args));
2496
- };
2497
- const $http = function () {
2498
- return fn.apply(undefined, ['send', ...Array.from(arguments)]);
2499
- };
2500
- ['get', 'post', 'head', 'put', 'delete', 'jsonp', 'patch'].forEach(key => $http[key] = fn.bind(undefined, key));
2501
- return $http;
2502
- };
2503
2474
  class AppRef {
2504
2475
  reload() {
2505
2476
  window.location.reload();
2506
2477
  }
2507
- constructor(inj, i18nService, statePersistence, httpService, securityService, routeReuseStrategy) {
2478
+ constructor(inj, i18nService, statePersistence, httpService, securityService, routeReuseStrategy, ngZone) {
2508
2479
  this.inj = inj;
2509
2480
  this.i18nService = i18nService;
2510
2481
  this.statePersistence = statePersistence;
2511
2482
  this.httpService = httpService;
2512
2483
  this.securityService = securityService;
2513
2484
  this.routeReuseStrategy = routeReuseStrategy;
2485
+ this.ngZone = ngZone;
2514
2486
  this.Variables = {};
2515
2487
  this.Actions = {};
2516
2488
  this.onAppVariablesReady = noop;
@@ -2547,24 +2519,9 @@
2547
2519
  this._eventNotifier.notify.apply(this._eventNotifier, arguments);
2548
2520
  }
2549
2521
  getDependency(injToken) {
2550
- if (lodashEs.isString(injToken)) {
2551
- if (injToken === 'HttpService') {
2552
- return getHttpDependency.call(this);
2553
- }
2554
- let providerInstance = injectorMap[injToken] && this.inj.get(injectorMap[injToken]);
2555
- if (!providerInstance && this.inj['records']?.values) {
2556
- const values = this.inj['records'].values();
2557
- let next = values?.next();
2558
- while (next && !next.done) {
2559
- if (next?.value?.value?.constructor?.SERVICE_NAME === injToken) {
2560
- return next.value.value;
2561
- }
2562
- next = values.next();
2563
- }
2564
- }
2565
- return providerInstance;
2522
+ {
2523
+ return this.ngZone;
2566
2524
  }
2567
- return this.inj.get(injToken);
2568
2525
  }
2569
2526
  /**
2570
2527
  * triggers the onSessionTimeout callback in app.js
@@ -2613,12 +2570,12 @@
2613
2570
  i1.registerFnByExpr(expr, fn[0], fn[1]);
2614
2571
  });
2615
2572
  }
2616
- static { this.ɵfac = function AppRef_Factory(t) { return new (t || AppRef)(i0__namespace.ɵɵinject(i0__namespace.Injector), i0__namespace.ɵɵinject(i1__namespace.AbstractI18nService), i0__namespace.ɵɵinject(i1__namespace.StatePersistence), i0__namespace.ɵɵinject(i1__namespace.AbstractHttpService), i0__namespace.ɵɵinject(i2__namespace.SecurityService), i0__namespace.ɵɵinject(i1$1__namespace.RouteReuseStrategy)); }; }
2573
+ static { this.ɵfac = function AppRef_Factory(t) { return new (t || AppRef)(i0__namespace.ɵɵinject(i0__namespace.Injector), i0__namespace.ɵɵinject(i1__namespace.AbstractI18nService), i0__namespace.ɵɵinject(i1__namespace.StatePersistence), i0__namespace.ɵɵinject(i1__namespace.AbstractHttpService), i0__namespace.ɵɵinject(i2__namespace.SecurityService), i0__namespace.ɵɵinject(i1$1__namespace.RouteReuseStrategy), i0__namespace.ɵɵinject(i0__namespace.NgZone)); }; }
2617
2574
  static { this.ɵprov = /*@__PURE__*/ i0__namespace.ɵɵdefineInjectable({ token: AppRef, factory: AppRef.ɵfac }); }
2618
2575
  }
2619
2576
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassMetadata(AppRef, [{
2620
2577
  type: i0.Injectable
2621
- }], () => [{ type: i0__namespace.Injector }, { type: i1__namespace.AbstractI18nService }, { type: i1__namespace.StatePersistence }, { type: i1__namespace.AbstractHttpService }, { type: i2__namespace.SecurityService }, { type: i1$1__namespace.RouteReuseStrategy }], null); })();
2578
+ }], () => [{ type: i0__namespace.Injector }, { type: i1__namespace.AbstractI18nService }, { type: i1__namespace.StatePersistence }, { type: i1__namespace.AbstractHttpService }, { type: i2__namespace.SecurityService }, { type: i1$1__namespace.RouteReuseStrategy }, { type: i0__namespace.NgZone }], null); })();
2622
2579
 
2623
2580
  class ToasterServiceImpl extends i1.AbstractToasterService {
2624
2581
  constructor(toaster) {
@@ -2774,7 +2731,12 @@
2774
2731
  });
2775
2732
  }
2776
2733
  loadAppLocaleBundle() {
2777
- this.loadResource(`${APP_LOCALE_ROOT_PATH}/${this.selectedLocale}.json`)
2734
+ let rootPath = APP_LOCALE_ROOT_PATH;
2735
+ const localeBundleBaseUrl = i1.getWmProjectProperties().localeBundleBaseUrl;
2736
+ if (!(lodashEs.isEmpty(lodashEs.trim(localeBundleBaseUrl)))) {
2737
+ rootPath = localeBundleBaseUrl;
2738
+ }
2739
+ this.loadResource(`${rootPath}/${this.selectedLocale}.json`)
2778
2740
  .then(bundle => {
2779
2741
  this.extendMessages(bundle.messages);
2780
2742
  this.extendPrefabMessages(bundle);
@@ -1,4 +1,4 @@
1
- import { Injectable, Injector } from '@angular/core';
1
+ import { Injectable, Injector, NgZone } from '@angular/core';
2
2
  import { RouteReuseStrategy } from '@angular/router';
3
3
  import { AbstractDialogService, AbstractHttpService, AbstractI18nService, AbstractSpinnerService, AbstractToasterService, EventNotifier, FieldTypeService, FieldWidgetService, getWmProjectProperties, isDefined, ConstantService, UtilsService, DynamicComponentRefProvider, StatePersistence, Viewport, registerFnByExpr } from '@wm/core';
4
4
  import { SecurityService } from '@wm/security';
@@ -42,13 +42,14 @@ export class AppRef {
42
42
  reload() {
43
43
  window.location.reload();
44
44
  }
45
- constructor(inj, i18nService, statePersistence, httpService, securityService, routeReuseStrategy) {
45
+ constructor(inj, i18nService, statePersistence, httpService, securityService, routeReuseStrategy, ngZone) {
46
46
  this.inj = inj;
47
47
  this.i18nService = i18nService;
48
48
  this.statePersistence = statePersistence;
49
49
  this.httpService = httpService;
50
50
  this.securityService = securityService;
51
51
  this.routeReuseStrategy = routeReuseStrategy;
52
+ this.ngZone = ngZone;
52
53
  this.Variables = {};
53
54
  this.Actions = {};
54
55
  this.onAppVariablesReady = noop;
@@ -85,6 +86,9 @@ export class AppRef {
85
86
  this._eventNotifier.notify.apply(this._eventNotifier, arguments);
86
87
  }
87
88
  getDependency(injToken) {
89
+ if ('ngZone') {
90
+ return this.ngZone;
91
+ }
88
92
  if (isString(injToken)) {
89
93
  if (injToken === 'HttpService') {
90
94
  return getHttpDependency.call(this);
@@ -151,10 +155,10 @@ export class AppRef {
151
155
  registerFnByExpr(expr, fn[0], fn[1]);
152
156
  });
153
157
  }
154
- static { this.ɵfac = function AppRef_Factory(t) { return new (t || AppRef)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i1.AbstractI18nService), i0.ɵɵinject(i1.StatePersistence), i0.ɵɵinject(i1.AbstractHttpService), i0.ɵɵinject(i2.SecurityService), i0.ɵɵinject(i3.RouteReuseStrategy)); }; }
158
+ static { this.ɵfac = function AppRef_Factory(t) { return new (t || AppRef)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i1.AbstractI18nService), i0.ɵɵinject(i1.StatePersistence), i0.ɵɵinject(i1.AbstractHttpService), i0.ɵɵinject(i2.SecurityService), i0.ɵɵinject(i3.RouteReuseStrategy), i0.ɵɵinject(i0.NgZone)); }; }
155
159
  static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppRef, factory: AppRef.ɵfac }); }
156
160
  }
157
161
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppRef, [{
158
162
  type: Injectable
159
- }], () => [{ type: i0.Injector }, { type: i1.AbstractI18nService }, { type: i1.StatePersistence }, { type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i3.RouteReuseStrategy }], null); })();
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL3NlcnZpY2VzL2FwcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWiwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFFdkQsTUFBTSxXQUFXLEdBQUc7SUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDLFdBQVcsRUFBRSxXQUFXO0lBQ3hCLGdCQUFnQixFQUFFLGdCQUFnQjtJQUNsQyxjQUFjLEVBQUUsc0JBQXNCO0lBQ3RDLHVCQUF1QixFQUFFLGdCQUFnQjtJQUN6QyxRQUFRLEVBQUUsUUFBUTtJQUNsQixjQUFjLEVBQUUsc0JBQXNCO0lBQ3RDLEtBQUssRUFBRSxZ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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzNELENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxpR0FBaUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5SCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxtQkFBbUIsQ0FBQyxXQUFXO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7dUVBMUlRLE1BQU07dUVBQU4sTUFBTSxXQUFOLE1BQU07O2lGQUFOLE1BQU07Y0FEbEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZVJldXNlU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICAgIEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgIEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICBBYnN0cmFjdFRvYXN0ZXJTZXJ2aWNlLFxuICAgIEV2ZW50Tm90aWZpZXIsXG4gICAgRmllbGRUeXBlU2VydmljZSxcbiAgICBGaWVsZFdpZGdldFNlcnZpY2UsXG4gICAgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyxcbiAgICBpc0RlZmluZWQsXG4gICAgQ29uc3RhbnRTZXJ2aWNlLFxuICAgIFV0aWxzU2VydmljZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICBWaWV3cG9ydCxcbiAgICByZWdpc3RlckZuQnlFeHByXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5cbmltcG9ydCB7IFdtRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gJy4uL3V0aWwvd20tcm91dGUtcmV1c2Utc3RyYXRlZ3knO1xuaW1wb3J0IHsgUGlwZVNlcnZpY2UgfSBmcm9tIFwiLi9waXBlLnNlcnZpY2VcIjtcbmltcG9ydCB7ZWFjaCwgZ2V0LCBpc0VtcHR5LCBpc1N0cmluZ30gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBpbmplY3Rvck1hcCA9IHtcbiAgICBEaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgaTE4blNlcnZpY2U6IEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgUGlwZVNlcnZpY2U6IFBpcGVTZXJ2aWNlLFxuICAgIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgU3Bpbm5lclNlcnZpY2U6IEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgU3RhdGVQZXJzaXN0ZW5jZVNlcnZpY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgVmlld3BvcnQ6IFZpZXdwb3J0LFxuICAgIFRvYXN0ZXJTZXJ2aWNlOiBBYnN0cmFjdFRvYXN0ZXJTZXJ2aWNlLFxuICAgIFV0aWxzOiBVdGlsc1NlcnZpY2UsXG4gICAgQ09OU1RBTlRTOiBDb25zdGFudFNlcnZpY2UsXG4gICAgRklFTERfVFlQRTogRmllbGRUeXBlU2VydmljZSxcbiAgICBGSUVMRF9XSURHRVQ6IEZpZWxkV2lkZ2V0U2VydmljZSxcbiAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyXG59O1xuXG5jb25zdCBlbnVtIFBST0pFQ1RfVFlQRSB7XG4gICAgQVBQTElDQVRJT04gPSAnQVBQTElDQVRJT04nLFxuICAgIFBSRUZBQiA9ICdQUkVGQUInLFxuICAgIFRFTVBMQVRFX0JVTkRMRSA9ICdURU1QTEFURUJVTkRMRSdcbn1cblxuY29uc3Qgbm9vcCA9ICguLi5hcmdzKSA9PiB7fTtcblxuLy8gV3JhcHMgaHR0cFNlcnZpY2UgdG8gYmVoYXZlIGFzIGFuZ3VsYXIgMS54ICRodHRwIHNlcnZpY2UuXG5jb25zdCBnZXRIdHRwRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGh0dHBTZXJ2aWNlID0gdGhpcy5odHRwU2VydmljZTtcbiAgICBjb25zdCBmbiA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnM/KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cykuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHR0cFNlcnZpY2Vba2V5XS5hcHBseShodHRwU2VydmljZSwgYXJncykpO1xuICAgIH07XG4gICAgY29uc3QgJGh0dHAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh1bmRlZmluZWQsIFsnc2VuZCcsIC4uLkFycmF5LmZyb20oYXJndW1lbnRzKV0pO1xuICAgIH07XG4gICAgWydnZXQnLCAncG9zdCcsICdoZWFkJywgJ3B1dCcsICdkZWxldGUnLCAnanNvbnAnLCAncGF0Y2gnXS5mb3JFYWNoKGtleSA9PiAkaHR0cFtrZXldID0gZm4uYmluZCh1bmRlZmluZWQsIGtleSkpO1xuICAgIHJldHVybiAkaHR0cDtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBSZWYge1xuICAgIFZhcmlhYmxlczogYW55ID0ge307XG4gICAgQWN0aW9uczogYW55ID0ge307XG4gICAgb25BcHBWYXJpYWJsZXNSZWFkeSA9IG5vb3A7XG4gICAgb25CZWZvcmVBcHBSZWFkeSA9IG5vb3A7XG4gICAgb25TZXNzaW9uVGltZW91dCA9IG5vb3A7XG4gICAgb25QYWdlUmVhZHkgPSBub29wO1xuICAgIG9uQmVmb3JlUGFnZUxlYXZlID0gbm9vcDtcbiAgICBvbkJlZm9yZVNlcnZpY2VDYWxsID0gIG5vb3A7XG4gICAgb25TZXJ2aWNlU3VjY2VzcyA9ICBub29wO1xuICAgIG9uU2VydmljZUVycm9yID0gIG5vb3A7XG4gICAgZHluYW1pY0NvbXBvbmVudENvbnRhaW5lclJlZiA9IHt9O1xuXG4gICAgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgICBpc1ByZWZhYlR5cGU6IGJvb2xlYW47XG4gICAgaXNBcHBsaWNhdGlvblR5cGU6IGJvb2xlYW47XG4gICAgaXNUYWJsZXRBcHBsaWNhdGlvblR5cGU6IGJvb2xlYW47XG4gICAgaXNUZW1wbGF0ZUJ1bmRsZVR5cGU6IGJvb2xlYW47XG5cbiAgICB0YXJnZXRQbGF0Zm9ybTogc3RyaW5nO1xuXG4gICAgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICBjaGFuZ2VMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLnNldFNlbGVjdGVkTG9jYWxlLmJpbmQodGhpcy5pMThuU2VydmljZSk7XG4gICAgZ2V0U2VsZWN0ZWRMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlLmJpbmQodGhpcy5pMThuU2VydmljZSk7XG4gICAgc2V0VGltZXpvbmUgPSB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lLmJpbmQodGhpcy5pMThuU2VydmljZSk7XG4gICAgc2V0d2lkZ2V0TG9jYWxlID0gdGhpcy5pMThuU2VydmljZS5zZXR3aWRnZXRMb2NhbGUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgX2V2ZW50Tm90aWZpZXIgPSBuZXcgRXZlbnROb3RpZmllcigpO1xuXG4gICAgbGFuZGluZ1BhZ2VOYW1lID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLmhvbWVQYWdlO1xuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlUmV1c2VTdHJhdGVneTogUm91dGVSZXVzZVN0cmF0ZWd5XG4gICAgKSB7XG5cbiAgICAgICAgY29uc3Qgd21Qcm9qZWN0UHJvcGVydGllcyA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKTtcblxuICAgICAgICB0aGlzLnByb2plY3ROYW1lID0gd21Qcm9qZWN0UHJvcGVydGllcy5uYW1lO1xuICAgICAgICB0aGlzLmlzUHJlZmFiVHlwZSA9IHdtUHJvamVjdFByb3BlcnRpZXMudHlwZSA9PT0gUFJPSkVDVF9UWVBFLlBSRUZBQjtcbiAgICAgICAgdGhpcy5pc0FwcGxpY2F0aW9uVHlwZSA9IHdtUHJvamVjdFByb3BlcnRpZXMudHlwZSA9PT0gUFJPSkVDVF9UWVBFLkFQUExJQ0FUSU9OO1xuICAgICAgICB0aGlzLmlzVGVtcGxhdGVCdW5kbGVUeXBlID0gd21Qcm9qZWN0UHJvcGVydGllcy50eXBlID09PSBQUk9KRUNUX1RZUEUuVEVNUExBVEVfQlVORExFO1xuICAgICAgICB0aGlzLnRhcmdldFBsYXRmb3JtID0gd21Qcm9qZWN0UHJvcGVydGllcy5wbGF0Zm9ybVR5cGU7XG5cbiAgICAgICAgdGhpcy5odHRwU2VydmljZS5yZWdpc3Rlck9uU2Vzc2lvblRpbWVvdXQodGhpcy5vbjQwMS5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0QXBwTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0TG9jYWxlKHRoaXMuYXBwTG9jYWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJQYWdlQ2FjaGUocGFnZU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kgaW5zdGFuY2VvZiBXbURlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICh0aGlzLnJvdXRlUmV1c2VTdHJhdGVneSBhcyBXbURlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kpLnJlc2V0KHBhZ2VOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnkoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmRhdGE6IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnROb3RpZmllci5ub3RpZnkuYXBwbHkodGhpcy5fZXZlbnROb3RpZmllciwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVwZW5kZW5jeShpbmpUb2tlbikge1xuICAgICAgICBpZiAoaXNTdHJpbmcoaW5qVG9rZW4pKSB7XG4gICAgICAgICAgICBpZiAoaW5qVG9rZW4gPT09ICdIdHRwU2VydmljZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SHR0cERlcGVuZGVuY3kuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwcm92aWRlckluc3RhbmNlID0gaW5qZWN0b3JNYXBbaW5qVG9rZW5dICYmIHRoaXMuaW5qLmdldChpbmplY3Rvck1hcFtpbmpUb2tlbl0pO1xuICAgICAgICAgICAgaWYgKCFwcm92aWRlckluc3RhbmNlICYmIHRoaXMuaW5qWydyZWNvcmRzJ10/LnZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuaW5qWydyZWNvcmRzJ10udmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSB2YWx1ZXM/Lm5leHQoKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Py52YWx1ZT8udmFsdWU/LmNvbnN0cnVjdG9yPy5TRVJWSUNFX05BTUUgPT09IGlualRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdmFsdWVzLm5leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJJbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbmouZ2V0KGlualRva2VuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0cmlnZ2VycyB0aGUgb25TZXNzaW9uVGltZW91dCBjYWxsYmFjayBpbiBhcHAuanNcbiAgICAgKi9cbiAgICBvbjQwMSgpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSBnZXQodGhpcy5zZWN1cml0eVNlcnZpY2UuZ2V0KCksICd1c2VySW5mbycpO1xuICAgICAgICAvLyBpZiBhIHByZXZpb3VzIHVzZXIgZXhpc3RzLCBhIHNlc3Npb24gdGltZSBvdXQgdHJpZ2dlcmVkXG4gICAgICAgIGlmICghaXNFbXB0eSh1c2VySW5mbykpIHtcbiAgICAgICAgICAgIHRoaXMub25TZXNzaW9uVGltZW91dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudE5vdGlmaWVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5QXBwKHRlbXBsYXRlLCB0eXBlLCB0aXRsZSkge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25BY3Rpb24gPSBnZXQodGhpcywgJ0FjdGlvbnMuYXBwTm90aWZpY2F0aW9uJyk7XG4gICAgICAgIGNvbnN0IEVYQ0xVREVfTk9USUZJQ0FUSU9OX01FU1NBR0VTID0gWydQUk9DRVNTX1JFSkVDVEVEX0lOX1FVRVVFJ107XG4gICAgICAgIGNvbnN0IHNraXBEZWZhdWx0Tm90aWZpY2F0aW9uID0gRVhDTFVERV9OT1RJRklDQVRJT05fTUVTU0FHRVMuaW5kZXhPZih0ZW1wbGF0ZSkgIT09IC0xO1xuICAgICAgICBpZiAobm90aWZpY2F0aW9uQWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBkbyBub3Qgbm90aWZ5IHRoZSBlcnJvciB0byB0aGUgYXBwLCBqdXN0IHRocm93IGl0IGluIGNvbnNvbGVcbiAgICAgICAgICAgIGlmIChza2lwRGVmYXVsdE5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQXBwIEVycm9yJywgdGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICdzdWNjZXNzJztcbiAgICAgICAgICAgIHRlbXBsYXRlID0gbm90aWZpY2F0aW9uQWN0aW9uLmdldE1lc3NhZ2UoKSB8fCB0ZW1wbGF0ZTtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFjdGlvbi5pbnZva2Uoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpc0RlZmluZWQodGl0bGUpID8gdGl0bGUgOiB0eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgY2xhc3M6IHR5cGUsXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgZXJyb3IgZG8gbm90IGNsb3NlIHRoZSB0b2FzdHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdHlwZS50b1VwcGVyQ2FzZSgpID09PSAnRVJST1InID8gMCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkZWZhdWx0IEFjdGlvbiBcImFwcE5vdGlmaWNhdGlvblwiIGRvZXNuXFwndCBleGlzdCBpbiB0aGUgYXBwLiBBcHAgbm90aWZpZWQgZm9sbG93aW5nIGVycm9yOlxcbicsIHRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGJpbmQgZXhwcmVzc2lvbnMgZnJvbSBhcHAgdmFyaWFibGVzXG4gICAgICogaXQgd2lsbCBiZSBjYWxsZWQgZnJvbSBhcHAuanMgaW4gZ2VuZXJhdGVkIGFuZ3VsYXIgYXBwXG4gICAgICogQHBhcmFtIGV4cHJlc3Npb25zLCBtYXAgb2YgYmluZCBleHByZXNzaW9uIHZzIGdlbmVyYXRlZCBmdW5jdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3RlckV4cHJlc3Npb25zKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIGVhY2goZXhwcmVzc2lvbnMsIChmbiwgZXhwcikgPT4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJGbkJ5RXhwcihleHByLCBmblswXSwgZm5bMV0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
163
+ }], () => [{ type: i0.Injector }, { type: i1.AbstractI18nService }, { type: i1.StatePersistence }, { type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i3.RouteReuseStrategy }, { type: i0.NgZone }], null); })();
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL3NlcnZpY2VzL2FwcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVyRCxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osMkJBQTJCLEVBQzNCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ25CLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7O0FBRXZELE1BQU0sV0FBVyxHQUFHO0lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7SUFDcEMsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxXQUFXLEVBQUUsV0FBVztJQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsY0FBYyxFQUFFLHNCQUFzQjtJQUN0Qyx1QkFBdUIsRUFBRSxnQkFBZ0I7SUFDekMsUUFBUSxFQUFFLFFBQVE7SUFDbEIsY0FBYyxFQUFFLHNCQUFzQjtJQUN0QyxL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QUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwRCxLQUFLLEVBQUUsSUFBSTtnQkFDWCwrQ0FBK0M7Z0JBQy9DLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDM0QsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlILENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQixDQUFDLFdBQVc7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMzQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt1RUE5SVEsTUFBTTt1RUFBTixNQUFNLFdBQU4sTUFBTTs7aUZBQU4sTUFBTTtjQURsQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgIEFic3RyYWN0VG9hc3RlclNlcnZpY2UsXG4gICAgRXZlbnROb3RpZmllcixcbiAgICBGaWVsZFR5cGVTZXJ2aWNlLFxuICAgIEZpZWxkV2lkZ2V0U2VydmljZSxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIGlzRGVmaW5lZCxcbiAgICBDb25zdGFudFNlcnZpY2UsXG4gICAgVXRpbHNTZXJ2aWNlLFxuICAgIER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgIFZpZXdwb3J0LFxuICAgIHJlZ2lzdGVyRm5CeUV4cHJcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcblxuaW1wb3J0IHsgV21EZWZhdWx0Um91dGVSZXVzZVN0cmF0ZWd5IH0gZnJvbSAnLi4vdXRpbC93bS1yb3V0ZS1yZXVzZS1zdHJhdGVneSc7XG5pbXBvcnQgeyBQaXBlU2VydmljZSB9IGZyb20gXCIuL3BpcGUuc2VydmljZVwiO1xuaW1wb3J0IHtlYWNoLCBnZXQsIGlzRW1wdHksIGlzU3RyaW5nfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IGluamVjdG9yTWFwID0ge1xuICAgIERpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBQaXBlU2VydmljZTogUGlwZVNlcnZpY2UsXG4gICAgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICBTcGlubmVyU2VydmljZTogQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICBTdGF0ZVBlcnNpc3RlbmNlU2VydmljZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICBWaWV3cG9ydDogVmlld3BvcnQsXG4gICAgVG9hc3RlclNlcnZpY2U6IEFic3RyYWN0VG9hc3RlclNlcnZpY2UsXG4gICAgVXRpbHM6IFV0aWxzU2VydmljZSxcbiAgICBDT05TVEFOVFM6IENvbnN0YW50U2VydmljZSxcbiAgICBGSUVMRF9UWVBFOiBGaWVsZFR5cGVTZXJ2aWNlLFxuICAgIEZJRUxEX1dJREdFVDogRmllbGRXaWRnZXRTZXJ2aWNlLFxuICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXJcbn07XG5cbmNvbnN0IGVudW0gUFJPSkVDVF9UWVBFIHtcbiAgICBBUFBMSUNBVElPTiA9ICdBUFBMSUNBVElPTicsXG4gICAgUFJFRkFCID0gJ1BSRUZBQicsXG4gICAgVEVNUExBVEVfQlVORExFID0gJ1RFTVBMQVRFQlVORExFJ1xufVxuXG5jb25zdCBub29wID0gKC4uLmFyZ3MpID0+IHt9O1xuXG4vLyBXcmFwcyBodHRwU2VydmljZSB0byBiZWhhdmUgYXMgYW5ndWxhciAxLnggJGh0dHAgc2VydmljZS5cbmNvbnN0IGdldEh0dHBEZXBlbmRlbmN5ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaHR0cFNlcnZpY2UgPSB0aGlzLmh0dHBTZXJ2aWNlO1xuICAgIGNvbnN0IGZuID0gZnVuY3Rpb24gKGtleSwgb3B0aW9ucz8pIHtcbiAgICAgICAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKS5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShodHRwU2VydmljZVtrZXldLmFwcGx5KGh0dHBTZXJ2aWNlLCBhcmdzKSk7XG4gICAgfTtcbiAgICBjb25zdCAkaHR0cCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgWydzZW5kJywgLi4uQXJyYXkuZnJvbShhcmd1bWVudHMpXSk7XG4gICAgfTtcbiAgICBbJ2dldCcsICdwb3N0JywgJ2hlYWQnLCAncHV0JywgJ2RlbGV0ZScsICdqc29ucCcsICdwYXRjaCddLmZvckVhY2goa2V5ID0+ICRodHRwW2tleV0gPSBmbi5iaW5kKHVuZGVmaW5lZCwga2V5KSk7XG4gICAgcmV0dXJuICRodHRwO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcFJlZiB7XG4gICAgVmFyaWFibGVzOiBhbnkgPSB7fTtcbiAgICBBY3Rpb25zOiBhbnkgPSB7fTtcbiAgICBvbkFwcFZhcmlhYmxlc1JlYWR5ID0gbm9vcDtcbiAgICBvbkJlZm9yZUFwcFJlYWR5ID0gbm9vcDtcbiAgICBvblNlc3Npb25UaW1lb3V0ID0gbm9vcDtcbiAgICBvblBhZ2VSZWFkeSA9IG5vb3A7XG4gICAgb25CZWZvcmVQYWdlTGVhdmUgPSBub29wO1xuICAgIG9uQmVmb3JlU2VydmljZUNhbGwgPSAgbm9vcDtcbiAgICBvblNlcnZpY2VTdWNjZXNzID0gIG5vb3A7XG4gICAgb25TZXJ2aWNlRXJyb3IgPSAgbm9vcDtcbiAgICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0ge307XG5cbiAgICBwcm9qZWN0TmFtZTogc3RyaW5nO1xuICAgIGlzUHJlZmFiVHlwZTogYm9vbGVhbjtcbiAgICBpc0FwcGxpY2F0aW9uVHlwZTogYm9vbGVhbjtcbiAgICBpc1RhYmxldEFwcGxpY2F0aW9uVHlwZTogYm9vbGVhbjtcbiAgICBpc1RlbXBsYXRlQnVuZGxlVHlwZTogYm9vbGVhbjtcblxuICAgIHRhcmdldFBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgICBhcHBMb2NhbGU6IGFueTtcblxuICAgIGNoYW5nZUxvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2Uuc2V0U2VsZWN0ZWRMb2NhbGUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcbiAgICBnZXRTZWxlY3RlZExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcbiAgICBzZXRUaW1lem9uZSA9IHRoaXMuaTE4blNlcnZpY2Uuc2V0VGltZXpvbmUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcbiAgICBzZXR3aWRnZXRMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLnNldHdpZGdldExvY2FsZS5iaW5kKHRoaXMuaTE4blNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSBfZXZlbnROb3RpZmllciA9IG5ldyBFdmVudE5vdGlmaWVyKCk7XG5cbiAgICBsYW5kaW5nUGFnZU5hbWUgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2U7XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVSZXVzZVN0cmF0ZWd5OiBSb3V0ZVJldXNlU3RyYXRlZ3ksXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgKSB7XG5cbiAgICAgICAgY29uc3Qgd21Qcm9qZWN0UHJvcGVydGllcyA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKTtcblxuICAgICAgICB0aGlzLnByb2plY3ROYW1lID0gd21Qcm9qZWN0UHJvcGVydGllcy5uYW1lO1xuICAgICAgICB0aGlzLmlzUHJlZmFiVHlwZSA9IHdtUHJvamVjdFByb3BlcnRpZXMudHlwZSA9PT0gUFJPSkVDVF9UWVBFLlBSRUZBQjtcbiAgICAgICAgdGhpcy5pc0FwcGxpY2F0aW9uVHlwZSA9IHdtUHJvamVjdFByb3BlcnRpZXMudHlwZSA9PT0gUFJPSkVDVF9UWVBFLkFQUExJQ0FUSU9OO1xuICAgICAgICB0aGlzLmlzVGVtcGxhdGVCdW5kbGVUeXBlID0gd21Qcm9qZWN0UHJvcGVydGllcy50eXBlID09PSBQUk9KRUNUX1RZUEUuVEVNUExBVEVfQlVORExFO1xuICAgICAgICB0aGlzLnRhcmdldFBsYXRmb3JtID0gd21Qcm9qZWN0UHJvcGVydGllcy5wbGF0Zm9ybVR5cGU7XG5cbiAgICAgICAgdGhpcy5odHRwU2VydmljZS5yZWdpc3Rlck9uU2Vzc2lvblRpbWVvdXQodGhpcy5vbjQwMS5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0QXBwTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0TG9jYWxlKHRoaXMuYXBwTG9jYWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJQYWdlQ2FjaGUocGFnZU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kgaW5zdGFuY2VvZiBXbURlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICh0aGlzLnJvdXRlUmV1c2VTdHJhdGVneSBhcyBXbURlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kpLnJlc2V0KHBhZ2VOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnkoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmRhdGE6IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnROb3RpZmllci5ub3RpZnkuYXBwbHkodGhpcy5fZXZlbnROb3RpZmllciwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVwZW5kZW5jeShpbmpUb2tlbikge1xuICAgICAgICBpZiAoJ25nWm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmluZyhpbmpUb2tlbikpIHtcbiAgICAgICAgICAgIGlmIChpbmpUb2tlbiA9PT0gJ0h0dHBTZXJ2aWNlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRIdHRwRGVwZW5kZW5jeS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHByb3ZpZGVySW5zdGFuY2UgPSBpbmplY3Rvck1hcFtpbmpUb2tlbl0gJiYgdGhpcy5pbmouZ2V0KGluamVjdG9yTWFwW2lualRva2VuXSk7XG4gICAgICAgICAgICBpZiAoIXByb3ZpZGVySW5zdGFuY2UgJiYgdGhpcy5pbmpbJ3JlY29yZHMnXT8udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5pbmpbJ3JlY29yZHMnXS52YWx1ZXMoKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHZhbHVlcz8ubmV4dCgpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQ/LnZhbHVlPy52YWx1ZT8uY29uc3RydWN0b3I/LlNFUlZJQ0VfTkFNRSA9PT0gaW5qVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSB2YWx1ZXMubmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlckluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmluai5nZXQoaW5qVG9rZW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRyaWdnZXJzIHRoZSBvblNlc3Npb25UaW1lb3V0IGNhbGxiYWNrIGluIGFwcC5qc1xuICAgICAqL1xuICAgIG9uNDAxKCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IGdldCh0aGlzLnNlY3VyaXR5U2VydmljZS5nZXQoKSwgJ3VzZXJJbmZvJyk7XG4gICAgICAgIC8vIGlmIGEgcHJldmlvdXMgdXNlciBleGlzdHMsIGEgc2Vzc2lvbiB0aW1lIG91dCB0cmlnZ2VyZWRcbiAgICAgICAgaWYgKCFpc0VtcHR5KHVzZXJJbmZvKSkge1xuICAgICAgICAgICAgdGhpcy5vblNlc3Npb25UaW1lb3V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3Vic2NyaWJlKGV2ZW50TmFtZSwgY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Tm90aWZpZXIuc3Vic2NyaWJlKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlBcHAodGVtcGxhdGUsIHR5cGUsIHRpdGxlKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkFjdGlvbiA9IGdldCh0aGlzLCAnQWN0aW9ucy5hcHBOb3RpZmljYXRpb24nKTtcbiAgICAgICAgY29uc3QgRVhDTFVERV9OT1RJRklDQVRJT05fTUVTU0FHRVMgPSBbJ1BST0NFU1NfUkVKRUNURURfSU5fUVVFVUUnXTtcbiAgICAgICAgY29uc3Qgc2tpcERlZmF1bHROb3RpZmljYXRpb24gPSBFWENMVURFX05PVElGSUNBVElPTl9NRVNTQUdFUy5pbmRleE9mKHRlbXBsYXRlKSAhPT0gLTE7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25BY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCBub3RpZnkgdGhlIGVycm9yIHRvIHRoZSBhcHAsIGp1c3QgdGhyb3cgaXQgaW4gY29uc29sZVxuICAgICAgICAgICAgaWYgKHNraXBEZWZhdWx0Tm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdBcHAgRXJyb3InLCB0ZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ3N1Y2Nlc3MnO1xuICAgICAgICAgICAgdGVtcGxhdGUgPSBub3RpZmljYXRpb25BY3Rpb24uZ2V0TWVzc2FnZSgpIHx8IHRlbXBsYXRlO1xuICAgICAgICAgICAgbm90aWZpY2F0aW9uQWN0aW9uLmludm9rZSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGlzRGVmaW5lZCh0aXRsZSkgPyB0aXRsZSA6IHR5cGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjbGFzczogdHlwZSxcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBlcnJvciBkbyBub3QgY2xvc2UgdGhlIHRvYXN0clxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiB0eXBlLnRvVXBwZXJDYXNlKCkgPT09ICdFUlJPUicgPyAwIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRlZmF1bHQgQWN0aW9uIFwiYXBwTm90aWZpY2F0aW9uXCIgZG9lc25cXCd0IGV4aXN0IGluIHRoZSBhcHAuIEFwcCBub3RpZmllZCBmb2xsb3dpbmcgZXJyb3I6XFxuJywgdGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYmluZCBleHByZXNzaW9ucyBmcm9tIGFwcCB2YXJpYWJsZXNcbiAgICAgKiBpdCB3aWxsIGJlIGNhbGxlZCBmcm9tIGFwcC5qcyBpbiBnZW5lcmF0ZWQgYW5ndWxhciBhcHBcbiAgICAgKiBAcGFyYW0gZXhwcmVzc2lvbnMsIG1hcCBvZiBiaW5kIGV4cHJlc3Npb24gdnMgZ2VuZXJhdGVkIGZ1bmN0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyRXhwcmVzc2lvbnMoZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgZWFjaChleHByZXNzaW9ucywgKGZuLCBleHByKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RlckZuQnlFeHByKGV4cHIsIGZuWzBdLCBmblsxXSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -4,7 +4,7 @@ import { defineLocale } from 'ngx-bootstrap/chronos';
4
4
  import { BsLocaleService } from 'ngx-bootstrap/datepicker';
5
5
  import { _WM_APP_PROJECT, AbstractI18nService, AppDefaults, getSessionStorageItem, getWmProjectProperties, isMobile, isMobileApp, loadScripts, replace, setCSS, setSessionStorageItem, App } from '@wm/core';
6
6
  import { CONSTANTS } from '@wm/variables';
7
- import { find, forEach, get, includes, intersection, isObject, map, toLower } from "lodash-es";
7
+ import { find, forEach, get, includes, intersection, isEmpty, isObject, map, toLower, trim } from "lodash-es";
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/common/http";
10
10
  import * as i2 from "ngx-bootstrap/datepicker";
@@ -80,7 +80,12 @@ export class I18nServiceImpl extends AbstractI18nService {
80
80
  });
81
81
  }
82
82
  loadAppLocaleBundle() {
83
- this.loadResource(`${APP_LOCALE_ROOT_PATH}/${this.selectedLocale}.json`)
83
+ let rootPath = APP_LOCALE_ROOT_PATH;
84
+ const localeBundleBaseUrl = getWmProjectProperties().localeBundleBaseUrl;
85
+ if (!(isEmpty(trim(localeBundleBaseUrl)))) {
86
+ rootPath = localeBundleBaseUrl;
87
+ }
88
+ this.loadResource(`${rootPath}/${this.selectedLocale}.json`)
84
89
  .then(bundle => {
85
90
  this.extendMessages(bundle.messages);
86
91
  this.extendPrefabMessages(bundle);
@@ -331,4 +336,4 @@ export class I18nServiceImpl extends AbstractI18nService {
331
336
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(I18nServiceImpl, [{
332
337
  type: Injectable
333
338
  }], () => [{ type: i1.HttpClient }, { type: i2.BsLocaleService }, { type: i3.AppDefaults }, { type: i0.Injector }], null); })();
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcnVudGltZS1iYXNlL3NyYy9zZXJ2aWNlcy9pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUNILGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsT0FBTyxFQUNQLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsR0FBRyxFQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7O0FBSTdGLE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUM7QUFDOUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPO0lBQ3ZILE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxP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ICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBkZWZpbmVMb2NhbGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Nocm9ub3MnO1xuaW1wb3J0IHsgQnNMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuaW1wb3J0IHtcbiAgICBfV01fQVBQX1BST0pFQ1QsXG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBBcHBEZWZhdWx0cyxcbiAgICBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyxcbiAgICBpc01vYmlsZSxcbiAgICBpc01vYmlsZUFwcCxcbiAgICBsb2FkU2NyaXB0cyxcbiAgICByZXBsYWNlLFxuICAgIHNldENTUyxcbiAgICBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0sXG4gICAgQXBwXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IENPTlNUQU5UUyB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHtmaW5kLCBmb3JFYWNoLCBnZXQsIGluY2x1ZGVzLCBpbnRlcnNlY3Rpb24sIGlzT2JqZWN0LCBtYXAsIHRvTG93ZXJ9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCBtb21lbnQ7XG5cbmNvbnN0IEFQUF9MT0NBTEVfUk9PVF9QQVRIID0gJ3Jlc291cmNlcy9pMThuJztcbmNvbnN0IFJUTF9MQU5HVUFHRV9DT0RFUyA9IFsnYXInLCAnYXItMDAxJywgJ2FyLWFlJywgJ2FyLWJoJywgJ2FyLWR6JywgJ2FyLWVnJywgJ2FyLWlxJywgJ2FyLWpvJywgJ2FyLWt3JywgJ2FyLWxiJywgJ2FyLWx5JyxcbiAgICAnYXItbWEnLCAnYXItb20nLCAnYXItcWEnLCAnYXItc2EnLCAnYXItc2QnLCAnYXItc3knLCAnYXItdG4nLCAnYXIteWUnLCAnYXJjJywgJ2JjYycsICdicWknLCAnY2tiJywgJ2R2JywgJ2ZhJywgJ2dsaycsXG4gICAgJ2hlJywgJ2t1JywgJ216bicsICdwbmInLCAncHMnLCAnc2QnLCAndWcnLCAndXInLCAneWknXTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEkxOG5TZXJ2aWNlSW1wbCBleHRlbmRzIEFic3RyYWN0STE4blNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBzZWxlY3RlZExvY2FsZTogc3RyaW5nO1xuICAgIHByaXZhdGUgZGVmYXVsdFN1cHBvcnRlZExvY2FsZSA9ICdlbic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBMb2NhbGU6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZWZhYkxvY2FsZTogTWFwPFN0cmluZywgYW55PjtcbiAgICBwcml2YXRlIG1lc3NhZ2VzOiBhbnk7XG4gICAgcHJpdmF0ZSBfaXNBbmd1bGFyTG9jYWxlTG9hZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmb3JtYXRzQnlMb2NhbGUgPSB7J3RpbWV6b25lJzogJycsICdudW1iZXInOiAnJ307XG4gICAgcHJpdmF0ZSBnZXQgYXBwKCkgeyByZXR1cm4gdGhpcy5pbmouZ2V0KEFwcCkgfTtcblxuICAgIHByaXZhdGUgYnVuZGxlTG9hZGVkOntba2V5OnN0cmluZ10gOiBhbnl9ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSAkaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBic0xvY2FsZVNlcnZpY2U6IEJzTG9jYWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBEZWZhdWx0czogQXBwRGVmYXVsdHMsXG4gICAgICAgIHByaXZhdGUgaW5qOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IHt9O1xuICAgICAgICB0aGlzLnByZWZhYkxvY2FsZSA9IG5ldyBNYXAoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZURpcmVjdGlvbigpIHtcbiAgICAgICAgbGV0IGRpcmVjdGlvbjogJ2x0cicgfCAncnRsJyA9ICdsdHInO1xuICAgICAgICBpZiAoUlRMX0xBTkdVQUdFX0NPREVTLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRMb2NhbGUpKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAncnRsJztcbiAgICAgICAgfVxuXG4gICAgICAgIHNldENTUyhkb2N1bWVudC5ib2R5LCAnZGlyZWN0aW9uJywgZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSB7fTtcblxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcy5hcHBMb2NhbGUsIHRoaXMubWVzc2FnZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdFN1cHBvcnRlZExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VwcG9ydGVkTG9jYWxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBcHBMb2NhbGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwTG9jYWxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmVmYWJMb2NhbGVCdW5kbGUocHJlZmFiTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCF0aGlzLnByZWZhYkxvY2FsZS5oYXMocHJlZmFiTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJlZmFiTG9jYWxlLnNldChwcmVmYWJOYW1lLCBPYmplY3QuY3JlYXRlKHRoaXMuYXBwTG9jYWxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJlZmFiTG9jYWxlLmdldChwcmVmYWJOYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dGVuZFByZWZhYk1lc3NhZ2VzKG1lc3NhZ2VzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFtZXNzYWdlcy5wcmVmYWJNZXNzYWdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMobWVzc2FnZXMucHJlZmFiTWVzc2FnZXMpLmZvckVhY2goKHByZWZhYk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGJ1bmRsZSA9IHRoaXMucHJlZmFiTG9jYWxlLmdldChwcmVmYWJOYW1lKTtcbiAgICAgICAgICAgIGlmICghYnVuZGxlKSB7XG4gICAgICAgICAgICAgICAgYnVuZGxlID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmFwcExvY2FsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmYWJMb2NhbGUuc2V0KHByZWZhYk5hbWUsIGJ1bmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJ1bmRsZSwgbWVzc2FnZXMucHJlZmFiTWVzc2FnZXNbcHJlZmFiTmFtZV0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dGVuZE1lc3NhZ2VzKG1lc3NhZ2VzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm1lc3NhZ2VzLCBtZXNzYWdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUmVzb3VyY2UocGF0aCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldChwYXRoKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgZXJyb3IgbG9hZGluZyBsb2NhbGUgcmVzb3VyY2UgZnJvbSAke3BhdGh9YCk7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkQXBwTG9jYWxlQnVuZGxlKCkge1xuICAgICAgICB0aGlzLmxvYWRSZXNvdXJjZShgJHtBUFBfTE9DQUxFX1JPT1RfUEFUSH0vJHt0aGlzLnNlbGVjdGVkTG9jYWxlfS5qc29uYClcbiAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHRlbmRNZXNzYWdlcyhidW5kbGUubWVzc2FnZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5kUHJlZmFiTWVzc2FnZXMoYnVuZGxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcERlZmF1bHRzLnNldEZvcm1hdHMoYnVuZGxlLmZvcm1hdHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlTG9hZGVkLmFwcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMb2NhbGVDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZE1vbWVudExvY2FsZUJ1bmRsZShtb21lbnRMb2NhbGUpIHtcbiAgICAgICAgY29uc3QgX2NkblVybCA9IF9XTV9BUFBfUFJPSkVDVC5jZG5VcmwgfHwgX1dNX0FQUF9QUk9KRUNULm5nRGVzdDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhbGUgPT09IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSkge1xuICAgICAgICAgICAgbW9tZW50LmxvY2FsZSh0aGlzLmRlZmF1bHRTdXBwb3J0ZWRMb2NhbGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGggPSBfY2RuVXJsICsgYGxvY2FsZXMvbW9tZW50LyR7bW9tZW50TG9jYWxlfS5qc2A7XG4gICAgICAgIGxvYWRTY3JpcHRzKFtwYXRoXSwgdHJ1ZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgbW9tZW50LmxvY2FsZSh0aGlzLnNlbGVjdGVkTG9jYWxlKTtcblxuICAgICAgICAgICAgLy8gRm9yIG5neCBib290c3RyYXAgbG9jYWxlLCBnZXQgdGhlIGNvbmZpZyBmcm9tIHNjcmlwdCBhbmQgYXBwbHkgbG9jYWxlXG4gICAgICAgICAgICAvLyBtb21lbnQubG9jYWxlRGF0YShtb21lbnRMb2NhbGUpIHdpbGwgcmV0dXJuIG1vbWVudCBsb2NhbGUgaW5zdGFuY2UuIF9jb25maWcgaW5zaWRlIHdpbGwgaGF2ZSBhY3R1YWwgY29uZmlnXG4gICAgICAgICAgICBsZXQgX2NvbmZpZyA9IG1vbWVudC5sb2NhbGVEYXRhKG1vbWVudExvY2FsZSk7XG4gICAgICAgICAgICBfY29uZmlnID0gX2NvbmZpZyAmJiBfY29uZmlnLl9jb25maWc7XG4gICAgICAgICAgICBkZWZpbmVMb2NhbGUodGhpcy5zZWxlY3RlZExvY2FsZSwgX2NvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UodGhpcy5nZXRTZWxlY3RlZExvY2FsZSgpIHx8IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSk7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5tb21lbnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMb2NhbGVDaGFuZ2VkKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRBbmd1bGFyTG9jYWxlQnVuZGxlKGFuZ0xvY2FsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfY2RuVXJsID0gX1dNX0FQUF9QUk9KRUNULmNkblVybCB8fCBfV01fQVBQX1BST0pFQ1QubmdEZXN0O1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhbGUgPT09IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gX2NkblVybCArIGBsb2NhbGVzL2FuZ3VsYXIvZ2xvYmFsLyR7YW5nTG9jYWxlfS5qc2A7XG5cbiAgICAgICAgICAgIGxvYWRTY3JpcHRzKFtwYXRoXSwgdHJ1ZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQW5ndWxhckxvY2FsZUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgcmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkQ2FsZW5kYXJMb2NhbGVCdW5kbGUoY2FsZW5kYXJMb2NhbGUsIGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgX2NkblVybCA9IF9XTV9BUFBfUFJPSkVDVC5jZG5VcmwgfHwgX1dNX0FQUF9QUk9KRUNULm5nRGVzdDtcbiAgICAgICAgbGV0IHBhdGg6IHN0cmluZztcbiAgICAgICAgaWYgKGNhbGVuZGFyTG9jYWxlKSB7XG4gICAgICAgICAgICBwYXRoID0gX2NkblVybCArIGBsb2NhbGVzL2Z1bGxjYWxlbmRhci8ke2NhbGVuZGFyTG9jYWxlfS5qc2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm4gaW4gY2FzZSBvZiBtb2JpbGUgYXBwIG9yIGlmIHNlbGVjdGVkIGxvY2FsZSBpcyBkZWZhdWx0IHN1cHBvcnRlZCBsb2NhbGUuXG4gICAgICAgIGlmICghZm9yY2UgJiYgKGlzTW9iaWxlKCkgfHwgaXNNb2JpbGVBcHAoKSB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlID09PSB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRMb2NhbGUpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgc2NyaXB0LiBJbiBzY3JpcHQsIG1vbWVudCBkZWZpbmVzIHRoZSBsb2FkZWQgbG9jYWxlXG4gICAgICAgIHJldHVybiBsb2FkU2NyaXB0cyhbcGF0aF0sIHRydWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkTW9tZW50VGltZVpvbmVCdW5kbGUobG9jYWxlLCBjb21wSW5zdGFuY2U/KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9jZG5VcmwgPSBfV01fQVBQX1BST0pFQ1QuY2RuVXJsIHx8IF9XTV9BUFBfUFJPSkVDVC5uZ0Rlc3Q7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gX2NkblVybCArIGBsb2NhbGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUtd2l0aC1kYXRhLmpzYDtcbiAgICAgICAgICAgIGxvYWRTY3JpcHRzKFtwYXRoXSwgdHJ1ZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIGxvY2FsZSBpcyBwcm92aWRlZCBpbiB0aGUgZm9ybSBvZiBvZmZzZXQgYW5kIG5vdCB0aW1lem9uZSBuYW1lLCBkZWR1Y2UgdGhlIG5hbWUuXG4gICAgICAgICAgICAgICAgICogSWYgbG9jYWxlIGlzIHByb3ZpZGVkIGFzIEdNVCs5LCBuYW1lIHdpbGwgYmUgZGVkdWNlZCBhcyBBc2lhL1Rva3lvXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxlT2JqID0gbG9jYWxlO1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvY2FsZU9ialsndGltZXpvbmUnXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGVJbmRleCA9IGxvY2FsZS5pbmRleE9mKCcrJyk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9jYWxlLnN1YnN0cihsb2NhbGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlT2JqWyd0aW1lem9uZSddID0gZmluZChtb21lbnQudHoubmFtZXMoKSwgKHRpbWV6b25lTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZSA9PT0gbW9tZW50LnR6KHRpbWV6b25lTmFtZSkuZm9ybWF0KCdaJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb21lbnQudHouc2V0RGVmYXVsdChsb2NhbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZURhdGEgPSAgY29tcEluc3RhbmNlICYmIGNvbXBJbnN0YW5jZS5mb3JtYXRzQnlMb2NhbGUgPyBjb21wSW5zdGFuY2UuZm9ybWF0c0J5TG9jYWxlIDogdGhpcy5mb3JtYXRzQnlMb2NhbGU7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihsb2NhbGVEYXRhLCBsb2NhbGVPYmopO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZExvY2FsZUJ1bmRsZXMobGliTG9jYWxlKSB7XG4gICAgICAgIGlmIChsaWJMb2NhbGUubW9tZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb21lbnRMb2NhbGVCdW5kbGUobGliTG9jYWxlLm1vbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZExvY2FsZSA9PT0gdGhpcy5kZWZhdWx0U3VwcG9ydGVkTG9jYWxlKSB7XG4gICAgICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UodGhpcy5nZXRTZWxlY3RlZExvY2FsZSgpIHx8IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSk7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5tb21lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWJMb2NhbGUuZnVsbENhbGVuZGFyICYmIHdpbmRvd1snRnVsbENhbGVuZGFyJ10pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZENhbGVuZGFyTG9jYWxlQnVuZGxlKGxpYkxvY2FsZS5mdWxsQ2FsZW5kYXIpPy50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TG9jYWxlQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWJMb2NhbGUuYW5ndWxhcikge1xuICAgICAgICAgICAgdGhpcy5sb2FkQXBwTG9jYWxlQnVuZGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFuZ3VsYXJMb2NhbGVCdW5kbGUobGliTG9jYWxlLmFuZ3VsYXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lem9uZShsb2NhbGUsIGNvbXBJbnN0YW5jZT8pIHtcbiAgICAgICAgdGhpcy5sb2FkTW9tZW50VGltZVpvbmVCdW5kbGUobG9jYWxlLCBjb21wSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUaW1lem9uZShjb21wSW5zdGFuY2U/KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VDb25maWcgPSBnZXQodGhpcy5hcHAsICdhY3RpdmVQYWdlLmZvcm1hdHNCeUxvY2FsZS50aW1lem9uZScpO1xuICAgICAgICBjb25zdCBjb21wQ29uZmlnID0gZ2V0KGNvbXBJbnN0YW5jZSwgJ2Zvcm1hdHNCeUxvY2FsZS50aW1lem9uZScpO1xuICAgICAgICBpZiAoY29tcENvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBDb25maWc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFnZUNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZ2VDb25maWc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRzQnlMb2NhbGVbJ3RpbWV6b25lJ107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0c0J5TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRzQnlMb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNlbGVjdGVkTG9jYWxlKGxvY2FsZSkge1xuXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBldmVudCBpcyBwcm9wYWdhdGVkIGZyb20gdGhlIHNlbGVjdCBvciBhbnkgc3VjaCB3aWRnZXRcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxvY2FsZSkpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvY2FsZS5kYXRhdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaWJMb2NhbGUgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuc3VwcG9ydGVkTGFuZ3VhZ2VzW2xvY2FsZV07XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZExvY2FsZSA9IE9iamVjdC5rZXlzKGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5zdXBwb3J0ZWRMYW5ndWFnZXMpO1xuXG4gICAgICAgIGlmICghaW5jbHVkZXMoc3VwcG9ydGVkTG9jYWxlLCBsb2NhbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxvY2FsZSB8fCBsb2NhbGUgPT09IHRoaXMuc2VsZWN0ZWRMb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFNlc3Npb25TdG9yYWdlSXRlbSgnc2VsZWN0ZWRMb2NhbGUnLCBsb2NhbGUpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSBsb2NhbGU7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIGxvY2FsZURhdGEgb2JqZWN0XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgICAgIHRoaXMuYnVuZGxlTG9hZGVkLm1vbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idW5kbGVMb2FkZWQuYXBwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnVuZGxlTG9hZGVkLmFuZ3VsYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idW5kbGVMb2FkZWQubGliTG9jYWxlID0gbGliTG9jYWxlO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGxvY2FsZSBidW5kbGVzIG9mIHRoZSBzZWxlY3RlZCBsb2NhbGVcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZExvY2FsZUJ1bmRsZXMobGliTG9jYWxlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxlRGlyZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5hbmd1bGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TG9jYWxlQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZHVjZUFwcExvY2FsZSgpIHtcbiAgICAgICAgLy8gY29tcHV0YXRpb24gdG8gZmluZCBhcHAgZGVmYXVsdCBsb2NhbGVcbiAgICAgICAgY29uc3QgX2FjY2VwdExhbmcgPSB0aGlzLmdldEFjY2VwdGVkTGFuZ3VhZ2VzKCk7XG4gICAgICAgIGNvbnN0IF9kZWZhdWx0TGFuZ3VhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICBfYWNjZXB0TGFuZy5wdXNoKF9kZWZhdWx0TGFuZ3VhZ2UpO1xuXG4gICAgICAgIC8vIGNoZWNrcyB3aGV0aGVyIHVzZXIgcHJlZmVyZW5jZSBpcyBiYXNlZCBvbiBicm93c2VyIHNldCBsYW5ndWFnZXMgb3IgZGVmYXVsdCBsYW5ndWFnZSBzZXQgaW4gcHJvamVjdFxuICAgICAgICBsZXQgcHJlZmVyQnJvd3NlckxhbmcgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkucHJlZmVyQnJvd3Nlckxhbmc7XG4gICAgICAgIGlmICghcHJlZmVyQnJvd3NlckxhbmcpIHsgLy8gd2hlbiBwcmVmZXJCcm93c2VyTGFuZyBpcyBub3QgZGVmaW5lZCwgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBwcmVmZXJCcm93c2VyTGFuZyAgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgeyAvLyBjb252ZXJ0IHN0cmluZ2lmaWVkIGJvb2xlYW4gdmFsdWVzIHJlY2lldmVkIGZyb20gQkUgdG8gYm9vbGVhbnNcbiAgICAgICAgICAgIHByZWZlckJyb3dzZXJMYW5nPSAocHJlZmVyQnJvd3NlckxhbmcgPT09ICd0cnVlJyB8fCBwcmVmZXJCcm93c2VyTGFuZyA9PT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgX3N1cHBvcnRlZExhbmcgPSBPYmplY3Qua2V5cyhnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuc3VwcG9ydGVkTGFuZ3VhZ2VzKSB8fCBbdGhpcy5kZWZhdWx0U3VwcG9ydGVkTG9jYWxlXTtcblxuICAgICAgICAvLyB3aGVuIHByZWZlcmVuY2UgaXMgZ2l2ZW4gdG8gYnJvd3NlciBzZXQgbGFuZ3VhZ2VzLCBkbyBub3QgcG9wdWxhdGUgX3NlbGVjdGVkRGVmYXVsdExhbmcgdmFyaWFibGVcbiAgICAgICAgbGV0IF9zZWxlY3RlZERlZmF1bHRMYW5nID0gcHJlZmVyQnJvd3NlckxhbmcgPyB1bmRlZmluZWQgOiBfZGVmYXVsdExhbmd1YWdlO1xuXG4gICAgICAgIGxldCBfYXBwU3VwcG9ydGVkTGFuZztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZvciBjb3Jkb3ZhLCBjaGVjayBmb3IgbGFuZ3VhZ2UgaWdub3JpbmcgdGhlIGxvY2FsZVxuICAgICAgICAgKiBBcyB0aGUgbmF2aWdhdG9yLmxhbmd1YWdlcyBhbHdheXMgcmV0dXJucyB0aGUgbGFuZ3VhZ2Ugd2l0aCBsb2NhbGUgKGVuLXVzKVxuICAgICAgICAgKiBUaGUgc3VwcG9ydGVkTGFuZ3VhZ2VzIGZyb20gQkUgZG9lc24ndCBpbmNsdWRlIGxvY2FsZSAoZW4pIHdoaWNoIGxlYWRzIHRvIG1pc21hdGNoXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgICAgIGxldCBzdXBwb3J0ZWRMYW5nID0gW107XG4gICAgICAgICAgICBmb3JFYWNoKF9hY2NlcHRMYW5nLCBmdW5jdGlvbiAobGFuZykge1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVkTGFuZyA9IGZpbmQoX3N1cHBvcnRlZExhbmcsICh2YWwpID0+IGxhbmcgPT09IHZhbCkgfHwgZmluZChfc3VwcG9ydGVkTGFuZywgKHZhbCkgPT4gbGFuZy5zdGFydHNXaXRoKHZhbCkpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkTGFuZykge1xuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMYW5nLnB1c2gobWF0Y2hlZExhbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgX2FwcFN1cHBvcnRlZExhbmcgPSBzdXBwb3J0ZWRMYW5nWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGZvciB0aGUgc2Vzc2lvbiBzdG9yYWdlIHRvIGxvYWQgYW55IHByZS1yZXF1ZXN0ZWQgbG9jYWxlXG4gICAgICAgIGNvbnN0IF9kZWZhdWx0TGFuZyA9IGdldFNlc3Npb25TdG9yYWdlSXRlbSgnc2VsZWN0ZWRMb2NhbGUnKSB8fCBfc2VsZWN0ZWREZWZhdWx0TGFuZyB8fCBfYXBwU3VwcG9ydGVkTGFuZyB8fCBpbnRlcnNlY3Rpb24oX2FjY2VwdExhbmcsIF9zdXBwb3J0ZWRMYW5nKVswXSB8fCB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRMb2NhbGU7XG4gICAgICAgIC8vIGlmIHRoZSBzdXBwb3J0ZWRMb2NhbGUgaXMgbm90IGF2YWlsYWJsZSBzZXQgaXQgdG8gZGVmYXVsdExvY2FsZVxuICAgICAgICBfc3VwcG9ydGVkTGFuZyA9IF9zdXBwb3J0ZWRMYW5nIHx8IFtfZGVmYXVsdExhbmddO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IF9kZWZhdWx0TGFuZyB8fCBfc3VwcG9ydGVkTGFuZ1swXTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZERlZmF1bHRMb2NhbGUoKSB7XG4gICAgICAgIERhdGUucHJvdG90eXBlW1wibW9udGhcIl0gPSBEYXRlLnByb3RvdHlwZS5nZXRNb250aDtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5kZWR1Y2VBcHBMb2NhbGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2VsZWN0ZWRMb2NhbGUobG9jYWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TG9jYWxpemVkTWVzc2FnZShtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlKHRoaXMuYXBwTG9jYWxlW21lc3NhZ2VdLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFjY2VwdGVkIGxhbmd1YWdlcyBsaXN0XG4gICAgcHVibGljIGdldEFjY2VwdGVkTGFuZ3VhZ2VzKCkge1xuICAgICAgICBsZXQgbGFuZ3VhZ2VzO1xuICAgICAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlcyA9IG5hdmlnYXRvci5sYW5ndWFnZXMgfHwgW25hdmlnYXRvci5sYW5ndWFnZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYW5ndWFnZXMgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnByZWZlcnJlZExhbmd1YWdlIHx8ICcnKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWNjZXB0LUxhbmd1YWdlIEhlYWRlciB3aWxsIGNvbnRhaW4gc2V0IG9mIHN1cHBvcnRlZCBsb2NhbGUsIHNvIHRyeSBzcGxpdHRpbmcgdGhlIHN0cmluZyB0byBwcm9wZXIgbG9jYWxlIHNldFxuICAgICAgICAgICAgICogRXg6IGVuLGVuLVVTO3E9MC45LGRlO3E9MC42LGFyO3E9MC4yLGhpXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogU3BsaXQgdGhlIGFib3ZlIGludG8gW2VuLGVuLXVzLGRlLGFyLGhpXVxuICAgICAgICAgICAgICogQHR5cGUge0FycmF5fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsYW5ndWFnZXMgPSBsYW5ndWFnZXMuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24obG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5zcGxpdCgnOycpWzBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcChsYW5ndWFnZXMsIHRvTG93ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0Q2FsZW5kYXJMb2NhbGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhbGUgIT09ICdlbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRDYWxlbmRhckxvY2FsZUJ1bmRsZSh0aGlzLnNlbGVjdGVkTG9jYWxlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQW5ndWxhckxvY2FsZUxvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQW5ndWxhckxvY2FsZUxvYWRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0d2lkZ2V0TG9jYWxlKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmZvcm1hdHNCeUxvY2FsZVsnbnVtYmVyJ10gPSBsb2NhbGVbJ251bWJlciddO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXR3aWRnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHNCeUxvY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUxvY2FsZUNoYW5nZWQoKSB7XG4gICAgICAgIGlmKHRoaXMuYnVuZGxlTG9hZGVkLm1vbWVudCAmJiB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgJiYgdGhpcy5idW5kbGVMb2FkZWQuYW5ndWxhciAmJiB0aGlzLmJ1bmRsZUxvYWRlZC5hcHApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSggICdsb2NhbGUtY2hhbmdlZCcsIHRoaXMuYnVuZGxlTG9hZGVkLmxpYkxvY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcnVudGltZS1iYXNlL3NyYy9zZXJ2aWNlcy9pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUNILGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEVBQ1gsT0FBTyxFQUNQLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsR0FBRyxFQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFJNUcsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU87SUFDdkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxP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Q2xILElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFHLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNMLENBQUM7Z0ZBL1dRLGVBQWU7dUVBQWYsZUFBZSxXQUFmLGVBQWU7O2lGQUFmLGVBQWU7Y0FEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZGVmaW5lTG9jYWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9jaHJvbm9zJztcbmltcG9ydCB7IEJzTG9jYWxlU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7XG4gICAgX1dNX0FQUF9QUk9KRUNULFxuICAgIEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgQXBwRGVmYXVsdHMsXG4gICAgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtLFxuICAgIGdldFdtUHJvamVjdFByb3BlcnRpZXMsXG4gICAgaXNNb2JpbGUsXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgbG9hZFNjcmlwdHMsXG4gICAgcmVwbGFjZSxcbiAgICBzZXRDU1MsXG4gICAgc2V0U2Vzc2lvblN0b3JhZ2VJdGVtLFxuICAgIEFwcFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tICdAd20vdmFyaWFibGVzJztcbmltcG9ydCB7ZmluZCwgZm9yRWFjaCwgZ2V0LCBpbmNsdWRlcywgaW50ZXJzZWN0aW9uLCBpc0VtcHR5LCBpc09iamVjdCwgbWFwLCB0b0xvd2VyLCB0cmltfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuXG5jb25zdCBBUFBfTE9DQUxFX1JPT1RfUEFUSCA9ICdyZXNvdXJjZXMvaTE4bic7XG5jb25zdCBSVExfTEFOR1VBR0VfQ09ERVMgPSBbJ2FyJywgJ2FyLTAwMScsICdhci1hZScsICdhci1iaCcsICdhci1keicsICdhci1lZycsICdhci1pcScsICdhci1qbycsICdhci1rdycsICdhci1sYicsICdhci1seScsXG4gICAgJ2FyLW1hJywgJ2FyLW9tJywgJ2FyLXFhJywgJ2FyLXNhJywgJ2FyLXNkJywgJ2FyLXN5JywgJ2FyLXRuJywgJ2FyLXllJywgJ2FyYycsICdiY2MnLCAnYnFpJywgJ2NrYicsICdkdicsICdmYScsICdnbGsnLFxuICAgICdoZScsICdrdScsICdtem4nLCAncG5iJywgJ3BzJywgJ3NkJywgJ3VnJywgJ3VyJywgJ3lpJ107XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJMThuU2VydmljZUltcGwgZXh0ZW5kcyBBYnN0cmFjdEkxOG5TZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgc2VsZWN0ZWRMb2NhbGU6IHN0cmluZztcbiAgICBwcml2YXRlIGRlZmF1bHRTdXBwb3J0ZWRMb2NhbGUgPSAnZW4nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwTG9jYWxlOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVmYWJMb2NhbGU6IE1hcDxTdHJpbmcsIGFueT47XG4gICAgcHJpdmF0ZSBtZXNzYWdlczogYW55O1xuICAgIHByaXZhdGUgX2lzQW5ndWxhckxvY2FsZUxvYWRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgZm9ybWF0c0J5TG9jYWxlID0geyd0aW1lem9uZSc6ICcnLCAnbnVtYmVyJzogJyd9O1xuICAgIHByaXZhdGUgZ2V0IGFwcCgpIHsgcmV0dXJuIHRoaXMuaW5qLmdldChBcHApIH07XG5cbiAgICBwcml2YXRlIGJ1bmRsZUxvYWRlZDp7W2tleTpzdHJpbmddIDogYW55fSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgJGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgYnNMb2NhbGVTZXJ2aWNlOiBCc0xvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBwcml2YXRlIGluajogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSB7fTtcbiAgICAgICAgdGhpcy5wcmVmYWJMb2NhbGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVEaXJlY3Rpb24oKSB7XG4gICAgICAgIGxldCBkaXJlY3Rpb246ICdsdHInIHwgJ3J0bCcgPSAnbHRyJztcbiAgICAgICAgaWYgKFJUTF9MQU5HVUFHRV9DT0RFUy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkTG9jYWxlKSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gJ3J0bCc7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRDU1MoZG9jdW1lbnQuYm9keSwgJ2RpcmVjdGlvbicsIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0ge307XG5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuYXBwTG9jYWxlLCB0aGlzLm1lc3NhZ2VzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRMb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlZmF1bHRTdXBwb3J0ZWRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXBwTG9jYWxlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcExvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJlZmFiTG9jYWxlQnVuZGxlKHByZWZhYk5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5wcmVmYWJMb2NhbGUuaGFzKHByZWZhYk5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnByZWZhYkxvY2FsZS5zZXQocHJlZmFiTmFtZSwgT2JqZWN0LmNyZWF0ZSh0aGlzLmFwcExvY2FsZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnByZWZhYkxvY2FsZS5nZXQocHJlZmFiTmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlbmRQcmVmYWJNZXNzYWdlcyhtZXNzYWdlczogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghbWVzc2FnZXMucHJlZmFiTWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5rZXlzKG1lc3NhZ2VzLnByZWZhYk1lc3NhZ2VzKS5mb3JFYWNoKChwcmVmYWJOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBidW5kbGUgPSB0aGlzLnByZWZhYkxvY2FsZS5nZXQocHJlZmFiTmFtZSk7XG4gICAgICAgICAgICBpZiAoIWJ1bmRsZSkge1xuICAgICAgICAgICAgICAgIGJ1bmRsZSA9IE9iamVjdC5jcmVhdGUodGhpcy5hcHBMb2NhbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlZmFiTG9jYWxlLnNldChwcmVmYWJOYW1lLCBidW5kbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihidW5kbGUsIG1lc3NhZ2VzLnByZWZhYk1lc3NhZ2VzW3ByZWZhYk5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlbmRNZXNzYWdlcyhtZXNzYWdlczogYW55KTogdm9pZCB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tZXNzYWdlcywgbWVzc2FnZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFJlc291cmNlKHBhdGgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5nZXQocGF0aClcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGVycm9yIGxvYWRpbmcgbG9jYWxlIHJlc291cmNlIGZyb20gJHtwYXRofWApO1xuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZEFwcExvY2FsZUJ1bmRsZSgpIHtcbiAgICAgICAgbGV0IHJvb3RQYXRoID0gQVBQX0xPQ0FMRV9ST09UX1BBVEg7XG4gICAgICAgIGNvbnN0IGxvY2FsZUJ1bmRsZUJhc2VVcmwgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkubG9jYWxlQnVuZGxlQmFzZVVybDtcbiAgICAgICAgaWYoICEoaXNFbXB0eSh0cmltKGxvY2FsZUJ1bmRsZUJhc2VVcmwpKSkgKSB7XG4gICAgICAgICAgICByb290UGF0aCA9IGxvY2FsZUJ1bmRsZUJhc2VVcmw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRSZXNvdXJjZShgJHtyb290UGF0aH0vJHt0aGlzLnNlbGVjdGVkTG9jYWxlfS5qc29uYClcbiAgICAgICAgICAgIC50aGVuKGJ1bmRsZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHRlbmRNZXNzYWdlcyhidW5kbGUubWVzc2FnZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5kUHJlZmFiTWVzc2FnZXMoYnVuZGxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcERlZmF1bHRzLnNldEZvcm1hdHMoYnVuZGxlLmZvcm1hdHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVuZGxlTG9hZGVkLmFwcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMb2NhbGVDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZE1vbWVudExvY2FsZUJ1bmRsZShtb21lbnRMb2NhbGUpIHtcbiAgICAgICAgY29uc3QgX2NkblVybCA9IF9XTV9BUFBfUFJPSkVDVC5jZG5VcmwgfHwgX1dNX0FQUF9QUk9KRUNULm5nRGVzdDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhbGUgPT09IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSkge1xuICAgICAgICAgICAgbW9tZW50LmxvY2FsZSh0aGlzLmRlZmF1bHRTdXBwb3J0ZWRMb2NhbGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGggPSBfY2RuVXJsICsgYGxvY2FsZXMvbW9tZW50LyR7bW9tZW50TG9jYWxlfS5qc2A7XG4gICAgICAgIGxvYWRTY3JpcHRzKFtwYXRoXSwgdHJ1ZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgbW9tZW50LmxvY2FsZSh0aGlzLnNlbGVjdGVkTG9jYWxlKTtcblxuICAgICAgICAgICAgLy8gRm9yIG5neCBib290c3RyYXAgbG9jYWxlLCBnZXQgdGhlIGNvbmZpZyBmcm9tIHNjcmlwdCBhbmQgYXBwbHkgbG9jYWxlXG4gICAgICAgICAgICAvLyBtb21lbnQubG9jYWxlRGF0YShtb21lbnRMb2NhbGUpIHdpbGwgcmV0dXJuIG1vbWVudCBsb2NhbGUgaW5zdGFuY2UuIF9jb25maWcgaW5zaWRlIHdpbGwgaGF2ZSBhY3R1YWwgY29uZmlnXG4gICAgICAgICAgICBsZXQgX2NvbmZpZyA9IG1vbWVudC5sb2NhbGVEYXRhKG1vbWVudExvY2FsZSk7XG4gICAgICAgICAgICBfY29uZmlnID0gX2NvbmZpZyAmJiBfY29uZmlnLl9jb25maWc7XG4gICAgICAgICAgICBkZWZpbmVMb2NhbGUodGhpcy5zZWxlY3RlZExvY2FsZSwgX2NvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UodGhpcy5nZXRTZWxlY3RlZExvY2FsZSgpIHx8IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSk7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5tb21lbnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMb2NhbGVDaGFuZ2VkKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRBbmd1bGFyTG9jYWxlQnVuZGxlKGFuZ0xvY2FsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfY2RuVXJsID0gX1dNX0FQUF9QUk9KRUNULmNkblVybCB8fCBfV01fQVBQX1BST0pFQ1QubmdEZXN0O1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhbGUgPT09IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gX2NkblVybCArIGBsb2NhbGVzL2FuZ3VsYXIvZ2xvYmFsLyR7YW5nTG9jYWxlfS5qc2A7XG5cbiAgICAgICAgICAgIGxvYWRTY3JpcHRzKFtwYXRoXSwgdHJ1ZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQW5ndWxhckxvY2FsZUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgcmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkQ2FsZW5kYXJMb2NhbGVCdW5kbGUoY2FsZW5kYXJMb2NhbGUsIGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgX2NkblVybCA9IF9XTV9BUFBfUFJPSkVDVC5jZG5VcmwgfHwgX1dNX0FQUF9QUk9KRUNULm5nRGVzdDtcbiAgICAgICAgbGV0IHBhdGg6IHN0cmluZztcbiAgICAgICAgaWYgKGNhbGVuZGFyTG9jYWxlKSB7XG4gICAgICAgICAgICBwYXRoID0gX2NkblVybCArIGBsb2NhbGVzL2Z1bGxjYWxlbmRhci8ke2NhbGVuZGFyTG9jYWxlfS5qc2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm4gaW4gY2FzZSBvZiBtb2JpbGUgYXBwIG9yIGlmIHNlbGVjdGVkIGxvY2FsZSBpcyBkZWZhdWx0IHN1cHBvcnRlZCBsb2NhbGUuXG4gICAgICAgIGlmICghZm9yY2UgJiYgKGlzTW9iaWxlKCkgfHwgaXNNb2JpbGVBcHAoKSB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlID09PSB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRMb2NhbGUpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgc2NyaXB0LiBJbiBzY3JpcHQsIG1vbWVudCBkZWZpbmVzIHRoZSBsb2FkZWQgbG9jYWxlXG4gICAgICAgIHJldHVybiBsb2FkU2NyaXB0cyhbcGF0aF0sIHRydWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkTW9tZW50VGltZVpvbmVCdW5kbGUobG9jYWxlLCBjb21wSW5zdGFuY2U/KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9jZG5VcmwgPSBfV01fQVBQX1BST0pFQ1QuY2RuVXJsIHx8IF9XTV9BUFBfUFJPSkVDVC5uZ0Rlc3Q7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gX2NkblVybCArIGBsb2NhbGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUtd2l0aC1kYXRhLmpzYDtcbiAgICAgICAgICAgIGxvYWRTY3JpcHRzKFtwYXRoXSwgdHJ1ZSkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIGxvY2FsZSBpcyBwcm92aWRlZCBpbiB0aGUgZm9ybSBvZiBvZmZzZXQgYW5kIG5vdCB0aW1lem9uZSBuYW1lLCBkZWR1Y2UgdGhlIG5hbWUuXG4gICAgICAgICAgICAgICAgICogSWYgbG9jYWxlIGlzIHByb3ZpZGVkIGFzIEdNVCs5LCBuYW1lIHdpbGwgYmUgZGVkdWNlZCBhcyBBc2lhL1Rva3lvXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxlT2JqID0gbG9jYWxlO1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvY2FsZU9ialsndGltZXpvbmUnXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGVJbmRleCA9IGxvY2FsZS5pbmRleE9mKCcrJyk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9jYWxlLnN1YnN0cihsb2NhbGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlT2JqWyd0aW1lem9uZSddID0gZmluZChtb21lbnQudHoubmFtZXMoKSwgKHRpbWV6b25lTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZSA9PT0gbW9tZW50LnR6KHRpbWV6b25lTmFtZSkuZm9ybWF0KCdaJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb21lbnQudHouc2V0RGVmYXVsdChsb2NhbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZURhdGEgPSAgY29tcEluc3RhbmNlICYmIGNvbXBJbnN0YW5jZS5mb3JtYXRzQnlMb2NhbGUgPyBjb21wSW5zdGFuY2UuZm9ybWF0c0J5TG9jYWxlIDogdGhpcy5mb3JtYXRzQnlMb2NhbGU7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihsb2NhbGVEYXRhLCBsb2NhbGVPYmopO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZExvY2FsZUJ1bmRsZXMobGliTG9jYWxlKSB7XG4gICAgICAgIGlmIChsaWJMb2NhbGUubW9tZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb21lbnRMb2NhbGVCdW5kbGUobGliTG9jYWxlLm1vbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZExvY2FsZSA9PT0gdGhpcy5kZWZhdWx0U3VwcG9ydGVkTG9jYWxlKSB7XG4gICAgICAgICAgICB0aGlzLmJzTG9jYWxlU2VydmljZS51c2UodGhpcy5nZXRTZWxlY3RlZExvY2FsZSgpIHx8IHRoaXMuZGVmYXVsdFN1cHBvcnRlZExvY2FsZSk7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5tb21lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWJMb2NhbGUuZnVsbENhbGVuZGFyICYmIHdpbmRvd1snRnVsbENhbGVuZGFyJ10pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZENhbGVuZGFyTG9jYWxlQnVuZGxlKGxpYkxvY2FsZS5mdWxsQ2FsZW5kYXIpPy50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TG9jYWxlQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWJMb2NhbGUuYW5ndWxhcikge1xuICAgICAgICAgICAgdGhpcy5sb2FkQXBwTG9jYWxlQnVuZGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFuZ3VsYXJMb2NhbGVCdW5kbGUobGliTG9jYWxlLmFuZ3VsYXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUaW1lem9uZShsb2NhbGUsIGNvbXBJbnN0YW5jZT8pIHtcbiAgICAgICAgdGhpcy5sb2FkTW9tZW50VGltZVpvbmVCdW5kbGUobG9jYWxlLCBjb21wSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUaW1lem9uZShjb21wSW5zdGFuY2U/KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VDb25maWcgPSBnZXQodGhpcy5hcHAsICdhY3RpdmVQYWdlLmZvcm1hdHNCeUxvY2FsZS50aW1lem9uZScpO1xuICAgICAgICBjb25zdCBjb21wQ29uZmlnID0gZ2V0KGNvbXBJbnN0YW5jZSwgJ2Zvcm1hdHNCeUxvY2FsZS50aW1lem9uZScpO1xuICAgICAgICBpZiAoY29tcENvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBDb25maWc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFnZUNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZ2VDb25maWc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRzQnlMb2NhbGVbJ3RpbWV6b25lJ107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0c0J5TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRzQnlMb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNlbGVjdGVkTG9jYWxlKGxvY2FsZSkge1xuXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBldmVudCBpcyBwcm9wYWdhdGVkIGZyb20gdGhlIHNlbGVjdCBvciBhbnkgc3VjaCB3aWRnZXRcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxvY2FsZSkpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvY2FsZS5kYXRhdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaWJMb2NhbGUgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuc3VwcG9ydGVkTGFuZ3VhZ2VzW2xvY2FsZV07XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZExvY2FsZSA9IE9iamVjdC5rZXlzKGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5zdXBwb3J0ZWRMYW5ndWFnZXMpO1xuXG4gICAgICAgIGlmICghaW5jbHVkZXMoc3VwcG9ydGVkTG9jYWxlLCBsb2NhbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxvY2FsZSB8fCBsb2NhbGUgPT09IHRoaXMuc2VsZWN0ZWRMb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFNlc3Npb25TdG9yYWdlSXRlbSgnc2VsZWN0ZWRMb2NhbGUnLCBsb2NhbGUpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSBsb2NhbGU7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIGxvY2FsZURhdGEgb2JqZWN0XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgICAgIHRoaXMuYnVuZGxlTG9hZGVkLm1vbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idW5kbGVMb2FkZWQuYXBwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnVuZGxlTG9hZGVkLmFuZ3VsYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idW5kbGVMb2FkZWQubGliTG9jYWxlID0gbGliTG9jYWxlO1xuXG4gICAgICAgIC8vIGxvYWQgdGhlIGxvY2FsZSBidW5kbGVzIG9mIHRoZSBzZWxlY3RlZCBsb2NhbGVcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZExvY2FsZUJ1bmRsZXMobGliTG9jYWxlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxlRGlyZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmJ1bmRsZUxvYWRlZC5hbmd1bGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TG9jYWxlQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZHVjZUFwcExvY2FsZSgpIHtcbiAgICAgICAgLy8gY29tcHV0YXRpb24gdG8gZmluZCBhcHAgZGVmYXVsdCBsb2NhbGVcbiAgICAgICAgY29uc3QgX2FjY2VwdExhbmcgPSB0aGlzLmdldEFjY2VwdGVkTGFuZ3VhZ2VzKCk7XG4gICAgICAgIGNvbnN0IF9kZWZhdWx0TGFuZ3VhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICBfYWNjZXB0TGFuZy5wdXNoKF9kZWZhdWx0TGFuZ3VhZ2UpO1xuXG4gICAgICAgIC8vIGNoZWNrcyB3aGV0aGVyIHVzZXIgcHJlZmVyZW5jZSBpcyBiYXNlZCBvbiBicm93c2VyIHNldCBsYW5ndWFnZXMgb3IgZGVmYXVsdCBsYW5ndWFnZSBzZXQgaW4gcHJvamVjdFxuICAgICAgICBsZXQgcHJlZmVyQnJvd3NlckxhbmcgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkucHJlZmVyQnJvd3Nlckxhbmc7XG4gICAgICAgIGlmICghcHJlZmVyQnJvd3NlckxhbmcpIHsgLy8gd2hlbiBwcmVmZXJCcm93c2VyTGFuZyBpcyBub3QgZGVmaW5lZCwgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBwcmVmZXJCcm93c2VyTGFuZyAgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgeyAvLyBjb252ZXJ0IHN0cmluZ2lmaWVkIGJvb2xlYW4gdmFsdWVzIHJlY2lldmVkIGZyb20gQkUgdG8gYm9vbGVhbnNcbiAgICAgICAgICAgIHByZWZlckJyb3dzZXJMYW5nPSAocHJlZmVyQnJvd3NlckxhbmcgPT09ICd0cnVlJyB8fCBwcmVmZXJCcm93c2VyTGFuZyA9PT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgX3N1cHBvcnRlZExhbmcgPSBPYmplY3Qua2V5cyhnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuc3VwcG9ydGVkTGFuZ3VhZ2VzKSB8fCBbdGhpcy5kZWZhdWx0U3VwcG9ydGVkTG9jYWxlXTtcblxuICAgICAgICAvLyB3aGVuIHByZWZlcmVuY2UgaXMgZ2l2ZW4gdG8gYnJvd3NlciBzZXQgbGFuZ3VhZ2VzLCBkbyBub3QgcG9wdWxhdGUgX3NlbGVjdGVkRGVmYXVsdExhbmcgdmFyaWFibGVcbiAgICAgICAgbGV0IF9zZWxlY3RlZERlZmF1bHRMYW5nID0gcHJlZmVyQnJvd3NlckxhbmcgPyB1bmRlZmluZWQgOiBfZGVmYXVsdExhbmd1YWdlO1xuXG4gICAgICAgIGxldCBfYXBwU3VwcG9ydGVkTGFuZztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZvciBjb3Jkb3ZhLCBjaGVjayBmb3IgbGFuZ3VhZ2UgaWdub3JpbmcgdGhlIGxvY2FsZVxuICAgICAgICAgKiBBcyB0aGUgbmF2aWdhdG9yLmxhbmd1YWdlcyBhbHdheXMgcmV0dXJucyB0aGUgbGFuZ3VhZ2Ugd2l0aCBsb2NhbGUgKGVuLXVzKVxuICAgICAgICAgKiBUaGUgc3VwcG9ydGVkTGFuZ3VhZ2VzIGZyb20gQkUgZG9lc24ndCBpbmNsdWRlIGxvY2FsZSAoZW4pIHdoaWNoIGxlYWRzIHRvIG1pc21hdGNoXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgICAgIGxldCBzdXBwb3J0ZWRMYW5nID0gW107XG4gICAgICAgICAgICBmb3JFYWNoKF9hY2NlcHRMYW5nLCBmdW5jdGlvbiAobGFuZykge1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVkTGFuZyA9IGZpbmQoX3N1cHBvcnRlZExhbmcsICh2YWwpID0+IGxhbmcgPT09IHZhbCkgfHwgZmluZChfc3VwcG9ydGVkTGFuZywgKHZhbCkgPT4gbGFuZy5zdGFydHNXaXRoKHZhbCkpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkTGFuZykge1xuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMYW5nLnB1c2gobWF0Y2hlZExhbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgX2FwcFN1cHBvcnRlZExhbmcgPSBzdXBwb3J0ZWRMYW5nWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGZvciB0aGUgc2Vzc2lvbiBzdG9yYWdlIHRvIGxvYWQgYW55IHByZS1yZXF1ZXN0ZWQgbG9jYWxlXG4gICAgICAgIGNvbnN0IF9kZWZhdWx0TGFuZyA9IGdldFNlc3Npb25TdG9yYWdlSXRlbSgnc2VsZWN0ZWRMb2NhbGUnKSB8fCBfc2VsZWN0ZWREZWZhdWx0TGFuZyB8fCBfYXBwU3VwcG9ydGVkTGFuZyB8fCBpbnRlcnNlY3Rpb24oX2FjY2VwdExhbmcsIF9zdXBwb3J0ZWRMYW5nKVswXSB8fCB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRMb2NhbGU7XG4gICAgICAgIC8vIGlmIHRoZSBzdXBwb3J0ZWRMb2NhbGUgaXMgbm90IGF2YWlsYWJsZSBzZXQgaXQgdG8gZGVmYXVsdExvY2FsZVxuICAgICAgICBfc3VwcG9ydGVkTGFuZyA9IF9zdXBwb3J0ZWRMYW5nIHx8IFtfZGVmYXVsdExhbmddO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IF9kZWZhdWx0TGFuZyB8fCBfc3VwcG9ydGVkTGFuZ1swXTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZERlZmF1bHRMb2NhbGUoKSB7XG4gICAgICAgIERhdGUucHJvdG90eXBlW1wibW9udGhcIl0gPSBEYXRlLnByb3RvdHlwZS5nZXRNb250aDtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5kZWR1Y2VBcHBMb2NhbGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2VsZWN0ZWRMb2NhbGUobG9jYWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TG9jYWxpemVkTWVzc2FnZShtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlKHRoaXMuYXBwTG9jYWxlW21lc3NhZ2VdLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFjY2VwdGVkIGxhbmd1YWdlcyBsaXN0XG4gICAgcHVibGljIGdldEFjY2VwdGVkTGFuZ3VhZ2VzKCkge1xuICAgICAgICBsZXQgbGFuZ3VhZ2VzO1xuICAgICAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlcyA9IG5hdmlnYXRvci5sYW5ndWFnZXMgfHwgW25hdmlnYXRvci5sYW5ndWFnZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYW5ndWFnZXMgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnByZWZlcnJlZExhbmd1YWdlIHx8ICcnKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWNjZXB0LUxhbmd1YWdlIEhlYWRlciB3aWxsIGNvbnRhaW4gc2V0IG9mIHN1cHBvcnRlZCBsb2NhbGUsIHNvIHRyeSBzcGxpdHRpbmcgdGhlIHN0cmluZyB0byBwcm9wZXIgbG9jYWxlIHNldFxuICAgICAgICAgICAgICogRXg6IGVuLGVuLVVTO3E9MC45LGRlO3E9MC42LGFyO3E9MC4yLGhpXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogU3BsaXQgdGhlIGFib3ZlIGludG8gW2VuLGVuLXVzLGRlLGFyLGhpXVxuICAgICAgICAgICAgICogQHR5cGUge0FycmF5fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsYW5ndWFnZXMgPSBsYW5ndWFnZXMuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24obG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5zcGxpdCgnOycpWzBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcChsYW5ndWFnZXMsIHRvTG93ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0Q2FsZW5kYXJMb2NhbGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhbGUgIT09ICdlbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRDYWxlbmRhckxvY2FsZUJ1bmRsZSh0aGlzLnNlbGVjdGVkTG9jYWxlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQW5ndWxhckxvY2FsZUxvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQW5ndWxhckxvY2FsZUxvYWRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0d2lkZ2V0TG9jYWxlKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmZvcm1hdHNCeUxvY2FsZVsnbnVtYmVyJ10gPSBsb2NhbGVbJ251bWJlciddO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXR3aWRnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHNCeUxvY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUxvY2FsZUNoYW5nZWQoKSB7XG4gICAgICAgIGlmKHRoaXMuYnVuZGxlTG9hZGVkLm1vbWVudCAmJiB0aGlzLmJ1bmRsZUxvYWRlZC5mdWxsQ2FsZW5kYXIgJiYgdGhpcy5idW5kbGVMb2FkZWQuYW5ndWxhciAmJiB0aGlzLmJ1bmRsZUxvYWRlZC5hcHApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSggICdsb2NhbGUtY2hhbmdlZCcsIHRoaXMuYnVuZGxlTG9hZGVkLmxpYkxvY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
@@ -2562,13 +2562,14 @@ class AppRef {
2562
2562
  reload() {
2563
2563
  window.location.reload();
2564
2564
  }
2565
- constructor(inj, i18nService, statePersistence, httpService, securityService, routeReuseStrategy) {
2565
+ constructor(inj, i18nService, statePersistence, httpService, securityService, routeReuseStrategy, ngZone) {
2566
2566
  this.inj = inj;
2567
2567
  this.i18nService = i18nService;
2568
2568
  this.statePersistence = statePersistence;
2569
2569
  this.httpService = httpService;
2570
2570
  this.securityService = securityService;
2571
2571
  this.routeReuseStrategy = routeReuseStrategy;
2572
+ this.ngZone = ngZone;
2572
2573
  this.Variables = {};
2573
2574
  this.Actions = {};
2574
2575
  this.onAppVariablesReady = noop;
@@ -2605,6 +2606,9 @@ class AppRef {
2605
2606
  this._eventNotifier.notify.apply(this._eventNotifier, arguments);
2606
2607
  }
2607
2608
  getDependency(injToken) {
2609
+ if ('ngZone') {
2610
+ return this.ngZone;
2611
+ }
2608
2612
  if (isString(injToken)) {
2609
2613
  if (injToken === 'HttpService') {
2610
2614
  return getHttpDependency.call(this);
@@ -2671,12 +2675,12 @@ class AppRef {
2671
2675
  registerFnByExpr(expr, fn[0], fn[1]);
2672
2676
  });
2673
2677
  }
2674
- static { this.ɵfac = function AppRef_Factory(t) { return new (t || AppRef)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i1.AbstractI18nService), i0.ɵɵinject(i1.StatePersistence), i0.ɵɵinject(i1.AbstractHttpService), i0.ɵɵinject(i2.SecurityService), i0.ɵɵinject(i1$1.RouteReuseStrategy)); }; }
2678
+ static { this.ɵfac = function AppRef_Factory(t) { return new (t || AppRef)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i1.AbstractI18nService), i0.ɵɵinject(i1.StatePersistence), i0.ɵɵinject(i1.AbstractHttpService), i0.ɵɵinject(i2.SecurityService), i0.ɵɵinject(i1$1.RouteReuseStrategy), i0.ɵɵinject(i0.NgZone)); }; }
2675
2679
  static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppRef, factory: AppRef.ɵfac }); }
2676
2680
  }
2677
2681
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppRef, [{
2678
2682
  type: Injectable
2679
- }], () => [{ type: i0.Injector }, { type: i1.AbstractI18nService }, { type: i1.StatePersistence }, { type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i1$1.RouteReuseStrategy }], null); })();
2683
+ }], () => [{ type: i0.Injector }, { type: i1.AbstractI18nService }, { type: i1.StatePersistence }, { type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i1$1.RouteReuseStrategy }, { type: i0.NgZone }], null); })();
2680
2684
 
2681
2685
  class ToasterServiceImpl extends AbstractToasterService {
2682
2686
  constructor(toaster) {
@@ -2832,7 +2836,12 @@ class I18nServiceImpl extends AbstractI18nService {
2832
2836
  });
2833
2837
  }
2834
2838
  loadAppLocaleBundle() {
2835
- this.loadResource(`${APP_LOCALE_ROOT_PATH}/${this.selectedLocale}.json`)
2839
+ let rootPath = APP_LOCALE_ROOT_PATH;
2840
+ const localeBundleBaseUrl = getWmProjectProperties().localeBundleBaseUrl;
2841
+ if (!(isEmpty(trim(localeBundleBaseUrl)))) {
2842
+ rootPath = localeBundleBaseUrl;
2843
+ }
2844
+ this.loadResource(`${rootPath}/${this.selectedLocale}.json`)
2836
2845
  .then(bundle => {
2837
2846
  this.extendMessages(bundle.messages);
2838
2847
  this.extendPrefabMessages(bundle);