@bnsights/bbsf-utilities 1.0.67 → 1.0.69-beta.0

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.
Files changed (41) hide show
  1. package/README.md +71 -2
  2. package/auth/index.d.ts +5 -0
  3. package/auth/public-api.d.ts +1 -0
  4. package/esm2022/auth/bnsights-bbsf-utilities-auth.mjs +5 -0
  5. package/esm2022/auth/public-api.mjs +5 -0
  6. package/esm2022/http/bnsights-bbsf-utilities-http.mjs +5 -0
  7. package/esm2022/http/public-api.mjs +8 -0
  8. package/esm2022/lib/shared/services/preload.service.mjs +1 -4
  9. package/esm2022/lib/shared/services/request-handler.service.mjs +39 -45
  10. package/esm2022/lib/shared/services/styles-bundle.service.mjs +27 -6
  11. package/esm2022/public-api.mjs +40 -17
  12. package/esm2022/translate/bnsights-bbsf-utilities-translate.mjs +5 -0
  13. package/esm2022/translate/public-api.mjs +7 -0
  14. package/esm2022/ui/bnsights-bbsf-utilities-ui.mjs +5 -0
  15. package/esm2022/ui/public-api.mjs +8 -0
  16. package/esm2022/word/bnsights-bbsf-utilities-word.mjs +5 -0
  17. package/esm2022/word/public-api.mjs +6 -0
  18. package/fesm2022/bnsights-bbsf-utilities-auth.mjs +10 -0
  19. package/fesm2022/bnsights-bbsf-utilities-auth.mjs.map +1 -0
  20. package/fesm2022/bnsights-bbsf-utilities-http.mjs +10 -0
  21. package/fesm2022/bnsights-bbsf-utilities-http.mjs.map +1 -0
  22. package/fesm2022/bnsights-bbsf-utilities-translate.mjs +10 -0
  23. package/fesm2022/bnsights-bbsf-utilities-translate.mjs.map +1 -0
  24. package/fesm2022/bnsights-bbsf-utilities-ui.mjs +10 -0
  25. package/fesm2022/bnsights-bbsf-utilities-ui.mjs.map +1 -0
  26. package/fesm2022/bnsights-bbsf-utilities-word.mjs +10 -0
  27. package/fesm2022/bnsights-bbsf-utilities-word.mjs.map +1 -0
  28. package/fesm2022/bnsights-bbsf-utilities.mjs +75 -55
  29. package/fesm2022/bnsights-bbsf-utilities.mjs.map +1 -1
  30. package/http/index.d.ts +5 -0
  31. package/http/public-api.d.ts +4 -0
  32. package/lib/shared/services/request-handler.service.d.ts +1 -2
  33. package/lib/shared/services/styles-bundle.service.d.ts +7 -1
  34. package/package.json +36 -4
  35. package/public-api.d.ts +15 -11
  36. package/translate/index.d.ts +5 -0
  37. package/translate/public-api.d.ts +3 -0
  38. package/ui/index.d.ts +5 -0
  39. package/ui/public-api.d.ts +4 -0
  40. package/word/index.d.ts +5 -0
  41. package/word/public-api.d.ts +2 -0
package/README.md CHANGED
@@ -1,11 +1,80 @@
1
1
  # BnsightsUtilitiesLibrary
2
2
 
3
- BBSF Utilities package is part of BBSF 3 packages. It has all the common services useded by [BBSF Admin Portal](https://www.npmjs.com/package/@bnsights/bbsf-admin-portal) or [BBSF Controls](https://www.npmjs.com/package/@bnsights/bbsf-controls)
3
+ BBSF Utilities package is part of BBSF 3 packages. It has all the common services used by [BBSF Admin Portal](https://www.npmjs.com/package/@bnsights/bbsf-admin-portal) or [BBSF Controls](https://www.npmjs.com/package/@bnsights/bbsf-controls)
4
4
 
5
- For more info please visit [BBSF Controls documenation](https://bbsfadmin.bnsights.com/controls) or [BBSF documentation](https://bnsightsprojects.visualstudio.com/BBSF%203/_wiki/wikis/BBSF-3.wiki/65/BBSF-Documentation)
5
+ For more info please visit [BBSF Controls documentation](https://bbsfadmin.bnsights.com/controls) or [BBSF documentation](https://bnsightsprojects.visualstudio.com/BBSF%203/_wiki/wikis/BBSF-3.wiki/65/BBSF-Documentation)
6
+
7
+ ## 📦 Secondary Entry Points (Optimized Dependencies)
8
+
9
+ To optimize bundle size, the library now supports **secondary entry points** - only install what you use!
10
+
11
+ ### 📋 Features & Imports
12
+
13
+ | Feature | Import From | Dependencies | Size |
14
+ |---------|-------------|--------------|------|
15
+ | **Core** (Environment, Styling) | `@bnsights/bbsf-utilities` | `lodash` `nanoid` `tslib` | 2 MB |
16
+ | **Authentication** | `@bnsights/bbsf-utilities/auth` | `@auth0/angular-jwt` `ngx-cookie-service` `oidc-client` | +3 MB |
17
+ | **Word Generation** | `@bnsights/bbsf-utilities/word` | `jszip` `xmlbuilder2` `html-to-vdom` `virtual-dom` + 5 more | +8 MB |
18
+ | **Translation/i18n** | `@bnsights/bbsf-utilities/translate` | `@ngx-translate/core` | +2 MB |
19
+ | **UI Services** (Toasts, Loading, Validation) | `@bnsights/bbsf-utilities/ui` | `ng-block-ui` `ngx-toastr` | +3 MB |
20
+ | **HTTP Handling** | `@bnsights/bbsf-utilities/http` | `class-transformer` | +1 MB |
21
+
22
+ ### 🚀 Simple Setup (30 seconds)
23
+
24
+ **Create:** `src/app/core/bbsf.ts`
25
+ ```typescript
26
+ export { EnvironmentService } from '@bnsights/bbsf-utilities';
27
+ export { AuthService } from '@bnsights/bbsf-utilities/auth';
28
+ export { BBSFTranslateService } from '@bnsights/bbsf-utilities/translate';
29
+ export { UtilityService } from '@bnsights/bbsf-utilities/ui';
30
+ export { RequestHandlerService } from '@bnsights/bbsf-utilities/http';
31
+ ```
32
+
33
+ **Add to:** `tsconfig.json`
34
+ ```json
35
+ {
36
+ "compilerOptions": {
37
+ "paths": { "@bbsf": ["src/app/core/bbsf.ts"] }
38
+ }
39
+ }
40
+ ```
41
+
42
+ **Use:**
43
+ ```typescript
44
+ import { AuthService } from '@bbsf'; // Simple! ✅
45
+ ```
46
+
47
+ ### 📊 Savings:
48
+ - **Core only:** 87% smaller (15MB → 2MB)
49
+ - **Core + Auth:** 67% smaller (15MB → 5MB)
50
+ - **Everything:** Same size (but other apps save!)
51
+
52
+ ### 📚 Documentation
53
+
54
+ - **[USAGE.md](./USAGE.md)** - Complete feature table & examples ⭐ START HERE
55
+ - **[MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md)** - Migrate existing apps
56
+ - **[TROUBLESHOOTING.md](./TROUBLESHOOTING.md)** - Fix import issues
6
57
 
7
58
  # Change Log
8
59
 
60
+
61
+ ## 1.0.70 / 26/10/2025
62
+
63
+ =====================
64
+
65
+ - Made some enhancements to the `StylesBundleService`'s `loadStyleBundle` method
66
+
67
+
68
+ ## 1.0.69 / 14/10/2025
69
+ =====================
70
+
71
+ - Remove Language loaded console log
72
+
73
+ ## 1.0.68 / 15/9/2025
74
+ =====================
75
+
76
+ - Fix RequestHandlerService options initialization
77
+
9
78
  ## 1.0.67 / 15/9/2025
10
79
  =====================
11
80
  Refactor AuthService and ConfigurationService for improved user management and dependency injection
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@bnsights/bbsf-utilities/auth" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export { AuthService } from '@bnsights/bbsf-utilities';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm5zaWdodHMtYmJzZi11dGlsaXRpZXMtYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL2F1dGgvYm5zaWdodHMtYmJzZi11dGlsaXRpZXMtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of @bnsights/bbsf-utilities/auth
3
+ */
4
+ export { AuthService } from '@bnsights/bbsf-utilities';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL2F1dGgvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMvYXV0aFxyXG4gKi9cclxuXHJcbmV4cG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm5zaWdodHMtYmJzZi11dGlsaXRpZXMtaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL2h0dHAvYm5zaWdodHMtYmJzZi11dGlsaXRpZXMtaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API Surface of @bnsights/bbsf-utilities/http
3
+ */
4
+ export { RequestHandlerService } from '@bnsights/bbsf-utilities';
5
+ export { FileLoaderService } from '@bnsights/bbsf-utilities';
6
+ export { MasterLayoutService } from '@bnsights/bbsf-utilities';
7
+ export { RequestOptionsModel } from '@bnsights/bbsf-utilities';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL2h0dHAvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBibnNpZ2h0cy9iYnNmLXV0aWxpdGllcy9odHRwXHJcbiAqL1xyXG5cclxuZXhwb3J0IHsgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuZXhwb3J0IHsgRmlsZUxvYWRlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5leHBvcnQgeyBNYXN0ZXJMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuZXhwb3J0IHsgUmVxdWVzdE9wdGlvbnNNb2RlbCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG4iXX0=
@@ -30,16 +30,13 @@ export class FileLoaderService {
30
30
  });
31
31
  }
32
32
  async preloadTranslations() {
33
- console.log('Starting to preload translation files...');
34
33
  try {
35
34
  const requests = this.availableLanguages.map(async (lang) => {
36
35
  const translations = await lastValueFrom(this.http.get(`/assets/i18n/${lang}.json`));
37
- console.log(`Loaded ${lang} translations:`, translations);
38
36
  this.translate.setTranslation(lang, translations, true);
39
37
  });
40
38
  await Promise.all(requests);
41
39
  this.translate.use('en'); // Set default language manually
42
- console.log('All translations preloaded.');
43
40
  }
44
41
  catch (error) {
45
42
  console.error('Error preloading translations:', error);
@@ -54,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
54
51
  providedIn: 'root',
55
52
  }]
56
53
  }], ctorParameters: () => [{ type: i1.BBSFTranslateService }, { type: i2.HttpClient }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvcHJlbG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFPcEQsTUFBTSxPQUFPLGlCQUFpQjtJQUUxQixtQkFBbUI7SUFDbkIsWUFBb0IsU0FBK0IsRUFBVSxJQUFnQjtRQUF6RCxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUFGckUsdUJBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFHdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBRywrQkFBK0IsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDakIsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO29CQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQy9DLE9BQU8sRUFBRSxDQUFDO2lCQUNiO3FCQUFNO29CQUNILE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2lCQUM5QztZQUNMLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQjtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDeEQsSUFBSTtZQUNBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUN4RCxNQUFNLFlBQVksR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNyRixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztZQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDOUM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDMUQ7SUFDTCxDQUFDOytHQXZDUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQkJTRlRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9jb25maWcvZW52aXJvbm1lbnQnO1xyXG5cclxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVMb2FkZXJTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gWydlbicsICdhciddOyAvLyBBZGQgbW9yZSBsYW5ndWFnZXMgYXMgbmVlZGVkXHJcbiAgICAvLyBlbnZpcm9ubWVudDphbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmFkZExhbmdzKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkRW52aXJvbm1lbnQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSAnL2Fzc2V0cy9jb25maWcvZW52aXJvbm1lbnQuanMnO1xyXG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5FbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZW52aXJvbm1lbnQsIHdpbmRvdy5FbnZpcm9ubWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0Vudmlyb25tZW50IHZhcmlhYmxlcyBub3QgZm91bmQuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBlbnZpcm9ubWVudC5qcycpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlbG9hZFRyYW5zbGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgdG8gcHJlbG9hZCB0cmFuc2xhdGlvbiBmaWxlcy4uLicpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMubWFwKGFzeW5jIChsYW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQoYC9hc3NldHMvaTE4bi8ke2xhbmd9Lmpzb25gKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGVkICR7bGFuZ30gdHJhbnNsYXRpb25zOmAsIHRyYW5zbGF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXRUcmFuc2xhdGlvbihsYW5nLCB0cmFuc2xhdGlvbnMsIHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3RzKTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKCdlbicpOyAvLyBTZXQgZGVmYXVsdCBsYW5ndWFnZSBtYW51YWxseVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQWxsIHRyYW5zbGF0aW9ucyBwcmVsb2FkZWQuJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHJlbG9hZGluZyB0cmFuc2xhdGlvbnM6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvcHJlbG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFPcEQsTUFBTSxPQUFPLGlCQUFpQjtJQUUxQixtQkFBbUI7SUFDbkIsWUFBb0IsU0FBK0IsRUFBVSxJQUFnQjtRQUF6RCxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUFGckUsdUJBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFHdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBRywrQkFBK0IsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDakIsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO29CQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQy9DLE9BQU8sRUFBRSxDQUFDO2lCQUNiO3FCQUFNO29CQUNILE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2lCQUM5QztZQUNMLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQjtRQUNyQixJQUFJO1lBQ0EsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hELE1BQU0sWUFBWSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3JGLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7U0FDN0Q7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDMUQ7SUFDTCxDQUFDOytHQXBDUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQkJTRlRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9jb25maWcvZW52aXJvbm1lbnQnO1xyXG5cclxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVMb2FkZXJTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gWydlbicsICdhciddOyAvLyBBZGQgbW9yZSBsYW5ndWFnZXMgYXMgbmVlZGVkXHJcbiAgICAvLyBlbnZpcm9ubWVudDphbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmFkZExhbmdzKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkRW52aXJvbm1lbnQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSAnL2Fzc2V0cy9jb25maWcvZW52aXJvbm1lbnQuanMnO1xyXG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5FbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZW52aXJvbm1lbnQsIHdpbmRvdy5FbnZpcm9ubWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0Vudmlyb25tZW50IHZhcmlhYmxlcyBub3QgZm91bmQuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBlbnZpcm9ubWVudC5qcycpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlbG9hZFRyYW5zbGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcChhc3luYyAobGFuZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0KGAvYXNzZXRzL2kxOG4vJHtsYW5nfS5qc29uYCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0VHJhbnNsYXRpb24obGFuZywgdHJhbnNsYXRpb25zLCB0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZXF1ZXN0cyk7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSgnZW4nKTsgLy8gU2V0IGRlZmF1bHQgbGFuZ3VhZ2UgbWFudWFsbHlcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcmVsb2FkaW5nIHRyYW5zbGF0aW9uczonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
@@ -17,7 +17,6 @@ export class RequestHandlerService {
17
17
  this.utilityService = utilityService;
18
18
  this.bbsfTranslateService = bbsfTranslateService;
19
19
  this.router = router;
20
- this.requestOptions = new RequestOptionsModel();
21
20
  this.currentLanguage = "";
22
21
  this.onDestroy$ = new Subject();
23
22
  //using localStorage to avoid call getCurrentLanguage() because it is not all to use async in constructor
@@ -36,23 +35,22 @@ export class RequestHandlerService {
36
35
  if (!this.isOnline()) {
37
36
  const errorCode = 504; // Custom error code for internet disconnection
38
37
  const errorMessage = 'Internet connection is disconnected.';
39
- var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });
38
+ var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: errorCode });
40
39
  this.handleError(error);
41
40
  return;
42
41
  }
43
- if (requestOptions)
44
- this.requestOptions = requestOptions;
42
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
45
43
  let headers = this.getHeaders();
46
- if (!this.requestOptions.disableBlockUI)
44
+ if (!currentRequestOptions.disableBlockUI)
47
45
  this.utilityService.startBlockUI();
48
46
  return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params }).pipe(takeUntil(this.onDestroy$), tap((result) => {
49
- if (!this.requestOptions.disableBlockUI)
47
+ if (!currentRequestOptions.disableBlockUI)
50
48
  this.utilityService.stopBlockUI();
51
49
  }, error => {
52
- if (!this.requestOptions.disableErrorHandler)
50
+ if (!currentRequestOptions.disableErrorHandler)
53
51
  this.handleError(error);
54
52
  }), map((data) => {
55
- if (this.requestOptions.castResponsetoClass)
53
+ if (currentRequestOptions.castResponsetoClass)
56
54
  return plainToClass(responseType, data, { excludeExtraneousValues: true });
57
55
  else
58
56
  return data;
@@ -66,19 +64,18 @@ export class RequestHandlerService {
66
64
  this.handleError(error);
67
65
  return;
68
66
  }
69
- if (requestOptions)
70
- this.requestOptions = requestOptions;
67
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
71
68
  let headers = this.getHeaders();
72
- if (!this.requestOptions.disableBlockUI)
69
+ if (!currentRequestOptions.disableBlockUI)
73
70
  this.utilityService.startBlockUI();
74
- return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
75
- if (!this.requestOptions.disableBlockUI)
71
+ return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
72
+ if (!currentRequestOptions.disableBlockUI)
76
73
  this.utilityService.stopBlockUI();
77
74
  }, error => {
78
- if (!this.requestOptions.disableErrorHandler)
75
+ if (!currentRequestOptions.disableErrorHandler)
79
76
  this.handleError(error);
80
77
  }), map((data) => {
81
- if (this.requestOptions.castResponsetoClass)
78
+ if (currentRequestOptions.castResponsetoClass)
82
79
  return plainToClass(responseType, data, { excludeExtraneousValues: true });
83
80
  else
84
81
  return data;
@@ -92,19 +89,18 @@ export class RequestHandlerService {
92
89
  this.handleError(error);
93
90
  return;
94
91
  }
95
- if (requestOptions)
96
- this.requestOptions = requestOptions;
92
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
97
93
  let headers = this.getHeaders();
98
- if (!this.requestOptions.disableBlockUI)
94
+ if (!currentRequestOptions.disableBlockUI)
99
95
  this.utilityService.startBlockUI();
100
96
  return this.http.delete(this.environmentService.getApiUrl() + Url + `/${deletedId}`, { headers: headers, params: params }).pipe(takeUntil(this.onDestroy$), tap((result) => {
101
- if (!this.requestOptions.disableBlockUI)
97
+ if (!currentRequestOptions.disableBlockUI)
102
98
  this.utilityService.stopBlockUI();
103
99
  }, error => {
104
- if (!this.requestOptions.disableErrorHandler)
100
+ if (!currentRequestOptions.disableErrorHandler)
105
101
  this.handleError(error);
106
102
  }), map((data) => {
107
- if (this.requestOptions.castResponsetoClass)
103
+ if (currentRequestOptions.castResponsetoClass)
108
104
  return plainToClass(responseType, data, { excludeExtraneousValues: true });
109
105
  else
110
106
  return data;
@@ -118,19 +114,18 @@ export class RequestHandlerService {
118
114
  this.handleError(error);
119
115
  return;
120
116
  }
121
- if (requestOptions)
122
- this.requestOptions = requestOptions;
117
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
123
118
  let headers = this.getHeaders();
124
- if (!this.requestOptions.disableBlockUI)
119
+ if (!currentRequestOptions.disableBlockUI)
125
120
  this.utilityService.startBlockUI();
126
- return this.http.put(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
127
- if (!this.requestOptions.disableBlockUI)
121
+ return this.http.put(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
122
+ if (!currentRequestOptions.disableBlockUI)
128
123
  this.utilityService.stopBlockUI();
129
124
  }, error => {
130
- if (!this.requestOptions.disableErrorHandler)
125
+ if (!currentRequestOptions.disableErrorHandler)
131
126
  this.handleError(error);
132
127
  }), map((data) => {
133
- if (this.requestOptions.castResponsetoClass)
128
+ if (currentRequestOptions.castResponsetoClass)
134
129
  return plainToClass(responseType, data, { excludeExtraneousValues: true });
135
130
  else
136
131
  return data;
@@ -144,8 +139,7 @@ export class RequestHandlerService {
144
139
  this.handleError(error);
145
140
  return;
146
141
  }
147
- if (requestOptions)
148
- this.requestOptions = requestOptions;
142
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
149
143
  let headers = new HttpHeaders({
150
144
  'Content-Type': 'application/json',
151
145
  'Authorization': this.authService.authorizationHeaderValue(),
@@ -153,16 +147,16 @@ export class RequestHandlerService {
153
147
  this.currentLanguage = localStorage.getItem('language');
154
148
  headers = headers.set('Accept-Language', this.currentLanguage.toString());
155
149
  headers = headers.set('ignore-cookies', 'true');
156
- if (!this.requestOptions.disableBlockUI)
150
+ if (!currentRequestOptions.disableBlockUI)
157
151
  this.utilityService.startBlockUI();
158
- return this.http.patch(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
159
- if (!this.requestOptions.disableBlockUI)
152
+ return this.http.patch(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
153
+ if (!currentRequestOptions.disableBlockUI)
160
154
  this.utilityService.stopBlockUI();
161
155
  }, error => {
162
- if (!this.requestOptions.disableErrorHandler)
156
+ if (!currentRequestOptions.disableErrorHandler)
163
157
  this.handleError(error);
164
158
  }), map((data) => {
165
- if (this.requestOptions.castResponsetoClass)
159
+ if (currentRequestOptions.castResponsetoClass)
166
160
  return plainToClass(responseType, data, { excludeExtraneousValues: true });
167
161
  else
168
162
  return data;
@@ -176,20 +170,19 @@ export class RequestHandlerService {
176
170
  this.handleError(error);
177
171
  return;
178
172
  }
179
- if (requestOptions)
180
- this.requestOptions = requestOptions;
173
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
181
174
  let headers = this.getHeaders();
182
- if (!this.requestOptions.disableBlockUI)
175
+ if (!currentRequestOptions.disableBlockUI)
183
176
  this.utilityService.startBlockUI();
184
- return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
185
- if (!this.requestOptions.disableBlockUI)
177
+ return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
178
+ if (!currentRequestOptions.disableBlockUI)
186
179
  this.utilityService.stopBlockUI();
187
180
  }, error => {
188
- if (!this.requestOptions.disableErrorHandler)
181
+ if (!currentRequestOptions.disableErrorHandler)
189
182
  this.handleError(error);
190
183
  }));
191
184
  }
192
- Upload(Url, model) {
185
+ Upload(Url, model, requestOptions) {
193
186
  if (!this.isOnline()) {
194
187
  const errorCode = 504; // Custom error code for internet disconnection
195
188
  const errorMessage = 'Internet connection is disconnected.';
@@ -197,12 +190,13 @@ export class RequestHandlerService {
197
190
  this.handleError(error);
198
191
  return;
199
192
  }
193
+ const currentRequestOptions = requestOptions || new RequestOptionsModel();
200
194
  let headers = this.getHeadersUpdated();
201
195
  return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, reportProgress: true, observe: 'events' }).pipe(takeUntil(this.onDestroy$), tap((result) => {
202
- if (!this.requestOptions.disableBlockUI)
196
+ if (!currentRequestOptions.disableBlockUI)
203
197
  this.utilityService.stopBlockUI();
204
198
  }, error => {
205
- if (!this.requestOptions.disableErrorHandler)
199
+ if (!currentRequestOptions.disableErrorHandler)
206
200
  this.handleError(error);
207
201
  }));
208
202
  }
@@ -263,4 +257,4 @@ export class RequestHandlerService {
263
257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RequestHandlerService, decorators: [{
264
258
  type: Injectable
265
259
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.EnvironmentService }, { type: i3.UtilityService }, { type: i3.BBSFTranslateService }, { type: i4.Router }] });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLXV0aWxpdGllcy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9yZXF1ZXN0LWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsaUJBQWlCLEVBQUUsV0FBVyxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFjLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFHaEQsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUNVLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixvQkFBMEMsRUFDMUMsTUFBYztRQUxkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVmhCLG1CQUFjLEdBQXdCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNoRSxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFVckQsMEdBQTBHO1FBQzFHLElBQUksQ0FBQyxv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Q3BDLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQzVELHdCQUF3QixFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRO1lBQzFFLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ25ELGdCQUFnQixFQUFFLE1BQU07U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxXQUFXLENBQUM7WUFDckIsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUU7WUFDNUQsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVE7WUFDMUUsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDbkQsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixjQUFjLEVBQUUsTUFBTTtZQUN0QixjQUFjLEVBQUUsTUFBTTtTQUN2QixDQUFDLENBQUM7SUFFTCxDQUFDOytHQTFTVSxxQkFBcUI7bUhBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoZW50aWNhdGlvbi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9uc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RIYW5kbGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zTW9kZWwgPSBuZXcgUmVxdWVzdE9wdGlvbnNNb2RlbCgpO1xyXG4gIHByaXZhdGUgY3VycmVudExhbmd1YWdlID0gXCJcIjtcclxuICBwdWJsaWMgb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIC8vdXNpbmcgbG9jYWxTdG9yYWdlICB0byBhdm9pZCBjYWxsIGdldEN1cnJlbnRMYW5ndWFnZSgpIGJlY2F1c2UgaXQgaXMgbm90IGFsbCB0byB1c2UgYXN5bmMgaW4gY29uc3RydWN0b3JcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudExhbmd1YWdlICE9IGV2ZW50LmxhbmcpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGV2ZW50Lmxhbmc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGludGVybmV0IGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlXHJcbiAgcHJpdmF0ZSBpc09ubGluZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3Iub25MaW5lIHx8ICF0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uXHJcbiAgZ2V0PFQ+KFVybDogc3RyaW5nLCBwYXJhbXM/OiBIdHRwUGFyYW1zLCByZXNwb25zZVR5cGU/OiBuZXcgKCkgPT4gVCwgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPbmxpbmUoKSkge1xyXG4gICAgICBjb25zdCBlcnJvckNvZGUgPSA1MDQ7IC8vIEN1c3RvbSBlcnJvciBjb2RlIGZvciBpbnRlcm5ldCBkaXNjb25uZWN0aW9uXHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZC4nO1xyXG4gICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBlcnJvcjogeyBNZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSwgc3RhdHVzOiA1MDQgfSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zKVxyXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgVXJsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucy5jYXN0UmVzcG9uc2V0b0NsYXNzKVxyXG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhyZXNwb25zZVR5cGUsIGRhdGEsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH0pXHJcbiAgICApIGFzIE9ic2VydmFibGU8VD47XHJcbiAgfVxyXG5cclxuICBwb3N0PFQ+KFVybDogc3RyaW5nLCBtb2RlbD86IGFueSwgcmVzcG9uc2VUeXBlPzogbmV3ICgpID0+IFQsIHBhcmFtcz86IEh0dHBQYXJhbXMsIHJlcXVlc3RPcHRpb25zPzogUmVxdWVzdE9wdGlvbnNNb2RlbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKCkpIHtcclxuICAgICAgY29uc3QgZXJyb3JDb2RlID0gNTA0OyAvLyBDdXN0b20gZXJyb3IgY29kZSBmb3IgaW50ZXJuZXQgZGlzY29ubmVjdGlvblxyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnSW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWQuJztcclxuICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgZXJyb3I6IHsgTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0sIHN0YXR1czogNTA0IH0pO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucylcclxuICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgbW9kZWwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMsIHJlc3BvbnNlVHlwZTogdGhpcy5yZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGU8VD4oVXJsOiBzdHJpbmcsIGRlbGV0ZWRJZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwsIHJlc3BvbnNlVHlwZT86IG5ldyAoKSA9PiBULCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPbmxpbmUoKSkge1xyXG4gICAgICBjb25zdCBlcnJvckNvZGUgPSA1MDQ7IC8vIEN1c3RvbSBlcnJvciBjb2RlIGZvciBpbnRlcm5ldCBkaXNjb25uZWN0aW9uXHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZC4nO1xyXG4gICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBlcnJvcjogeyBNZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSwgc3RhdHVzOiA1MDQgfSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zKVxyXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgVXJsICsgYC8ke2RlbGV0ZWRJZH1gLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucy5jYXN0UmVzcG9uc2V0b0NsYXNzKVxyXG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhyZXNwb25zZVR5cGUsIGRhdGEsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHV0PFQ+KFVybDogc3RyaW5nLCBtb2RlbD86IGFueSwgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVzcG9uc2VUeXBlPzogbmV3ICgpID0+IFQsIHJlcXVlc3RPcHRpb25zPzogUmVxdWVzdE9wdGlvbnNNb2RlbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKCkpIHtcclxuICAgICAgY29uc3QgZXJyb3JDb2RlID0gNTA0OyAvLyBDdXN0b20gZXJyb3IgY29kZSBmb3IgaW50ZXJuZXQgZGlzY29ubmVjdGlvblxyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnSW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWQuJztcclxuICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgZXJyb3I6IHsgTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0sIHN0YXR1czogNTA0IH0pO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucylcclxuICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgbW9kZWwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMsIHJlc3BvbnNlVHlwZTogdGhpcy5yZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwYXRjaDxUPihVcmw6IHN0cmluZywgbW9kZWw/OiBhbnksIHJlc3BvbnNlVHlwZT86IG5ldyAoKSA9PiBULCBwYXJhbXM/OiBIdHRwUGFyYW1zLCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICghdGhpcy5pc09ubGluZSgpKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IDUwNDsgLy8gQ3VzdG9tIGVycm9yIGNvZGUgZm9yIGludGVybmV0IGRpc2Nvbm5lY3Rpb25cclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ0ludGVybmV0IGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkLic7XHJcbiAgICAgIHZhciBlcnJvciA9IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7IGVycm9yOiB7IE1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9LCBzdGF0dXM6IDUwNCB9KTtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVxdWVzdE9wdGlvbnMpXHJcbiAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0T3B0aW9ucztcclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKSxcclxuXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJyk7XHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdC1MYW5ndWFnZScsIHRoaXMuY3VycmVudExhbmd1YWdlLnRvU3RyaW5nKCkpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdpZ25vcmUtY29va2llcycsICd0cnVlJyk7XHJcbiAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgbW9kZWwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMsIHJlc3BvbnNlVHlwZTogdGhpcy5yZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZDxUPihVcmw6IHN0cmluZywgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPbmxpbmUoKSkge1xyXG4gICAgICBjb25zdCBlcnJvckNvZGUgPSA1MDQ7IC8vIEN1c3RvbSBlcnJvciBjb2RlIGZvciBpbnRlcm5ldCBkaXNjb25uZWN0aW9uXHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZC4nO1xyXG4gICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBlcnJvcjogeyBNZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSwgc3RhdHVzOiA1MDQgfSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zKVxyXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgVXJsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zLCByZXNwb25zZVR5cGU6IHRoaXMucmVxdWVzdE9wdGlvbnMucmVzcG9uc2VUeXBlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIFVwbG9hZDxUPihVcmw6IHN0cmluZywgbW9kZWw/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKCkpIHtcclxuICAgICAgY29uc3QgZXJyb3JDb2RlID0gNTA0OyAvLyBDdXN0b20gZXJyb3IgY29kZSBmb3IgaW50ZXJuZXQgZGlzY29ubmVjdGlvblxyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnSW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWQuJztcclxuICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgZXJyb3I6IHsgTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0sIHN0YXR1czogNTA0IH0pO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzVXBkYXRlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgVXJsLCBtb2RlbCwgeyBoZWFkZXJzOiBoZWFkZXJzLCByZXBvcnRQcm9ncmVzczogdHJ1ZSwgb2JzZXJ2ZTogJ2V2ZW50cycgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkZXN0cm95SGFuZGxlcigpOiB2b2lkIHtcclxuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY2xlYXJJbnRlcnZhbFwiKTtcclxuICAgIHRoaXMuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgdmFyIGlzRW5nbGlzaCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkgPT0gXCJlblwiO1xyXG4gICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgdGhyb3dFcnJvcihlcnIpOy8vZXJyb3IgNDAwIGlzIHRocm93biB0byBiZSBjYXRjaCBieSB0aGUgRm9ybSBjb21wb25lbnQgdG8gaGFuZGxlIEZsdWVudCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09IDQwMSlcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvQWRtaW4vYWNjb3VudC9sb2dpblwiXSk7XHJcbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDAzKVxyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKGlzRW5nbGlzaCA/IFwiU29ycnksIFlvdSdyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhpcyBhY3Rpb25cIiA6IFwi2LnYsNix2Kcg2YTZitizINmE2K/ZitmDINin2YTYtdmE2KfYrdmK2Ycg2YTZh9iw2Kcg2KfZhNi32YTYqFwiKTtcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MTApXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoaXNFbmdsaXNoID8gXCJDYW4gbm90IGRlbGV0ZSB0aGlzIGl0ZW0gYXMgaXQgaXMgcmVsYXRlZCB0byBvdGhlcnNcIiA6IFwi2YTYpyDZitmF2YPZhiDYrdiw2YEg2YfYsNinINin2YTYudmG2LXYsSDZhNij2YbZhyDZhdix2KrYqNi3INio2LnZhtin2LXYsSDYo9iu2LHZiVwiKTtcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MTUpXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoKGVyci5lcnJvciA/IGVyci5lcnJvci5NZXNzYWdlIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MDQpXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoKGVyci5lcnJvciA/IGVyci5lcnJvci5NZXNzYWdlIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYGVycm9yIG1lc3NhZ2UgaXM6ICR7ZXJyLmVycm9yID8gZXJyLmVycm9yLk1lc3NhZ2UgOiBlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZSh0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFcnJvck1hc3NhZ2VcIikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJzKCkge1xyXG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKSxcclxuICAgICAgJ0NsaWVudC1Mb2NhbC1UaW1lLVpvbmUnOiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUsXHJcbiAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSxcclxuICAgICAgJ2lnbm9yZS1jb29raWVzJzogJ3RydWUnXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0SGVhZGVyc1VwZGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpLFxyXG4gICAgICAnQ2xpZW50LUxvY2FsLVRpbWUtWm9uZSc6IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSxcclxuICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpLFxyXG4gICAgICAnaWdub3JlLWNvb2tpZXMnOiAndHJ1ZScsXHJcbiAgICAgICdWaWRlby1VcGxvYWQnOiAndHJ1ZScsXHJcbiAgICAgICdJbWFnZS1VcGxvYWQnOiAndHJ1ZScsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG59XHJcbiJdfQ==
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLXV0aWxpdGllcy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9yZXF1ZXN0LWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsaUJBQWlCLEVBQUUsV0FBVyxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFjLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFHaEQsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUNVLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixvQkFBMEMsRUFDMUMsTUFBYztRQUxkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVGhCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLGVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVVyRCwwR0FBMEc7UUFDMUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFL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aUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNuRCxnQkFBZ0IsRUFBRSxNQUFNO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxpQkFBaUI7UUFDZixPQUFPLElBQUksV0FBVyxDQUFDO1lBQ3JCLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQzVELHdCQUF3QixFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRO1lBQzFFLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ25ELGdCQUFnQixFQUFFLE1BQU07WUFDeEIsY0FBYyxFQUFFLE1BQU07WUFDdEIsY0FBYyxFQUFFLE1BQU07U0FDdkIsQ0FBQyxDQUFDO0lBRUwsQ0FBQzsrR0FyU1UscUJBQXFCO21IQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aGVudGljYXRpb24vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVxdWVzdE9wdGlvbnNNb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZSA9IFwiXCI7XHJcbiAgcHVibGljIG9uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICAvL3VzaW5nIGxvY2FsU3RvcmFnZSAgdG8gYXZvaWQgY2FsbCBnZXRDdXJyZW50TGFuZ3VhZ2UoKSBiZWNhdXNlIGl0IGlzIG5vdCBhbGwgdG8gdXNlIGFzeW5jIGluIGNvbnN0cnVjdG9yXHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRMYW5ndWFnZSAhPSBldmVudC5sYW5nKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBldmVudC5sYW5nO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZVxyXG4gIHByaXZhdGUgaXNPbmxpbmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZSB8fCAhdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0UHJvZHVjdGlvbk1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLlxyXG4gIGdldDxUPihVcmw6IHN0cmluZywgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVzcG9uc2VUeXBlPzogbmV3ICgpID0+IFQsIHJlcXVlc3RPcHRpb25zPzogUmVxdWVzdE9wdGlvbnNNb2RlbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKCkpIHtcclxuICAgICAgY29uc3QgZXJyb3JDb2RlID0gNTA0OyAvLyBDdXN0b20gZXJyb3IgY29kZSBmb3IgaW50ZXJuZXQgZGlzY29ubmVjdGlvblxyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnSW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWQuJztcclxuICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgZXJyb3I6IHsgTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0sIHN0YXR1czogZXJyb3JDb2RlIH0pO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zIHx8IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKCk7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxUPjtcclxuICB9XHJcblxyXG4gIHBvc3Q8VD4oVXJsOiBzdHJpbmcsIG1vZGVsPzogYW55LCByZXNwb25zZVR5cGU/OiBuZXcgKCkgPT4gVCwgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPbmxpbmUoKSkge1xyXG4gICAgICBjb25zdCBlcnJvckNvZGUgPSA1MDQ7IC8vIEN1c3RvbSBlcnJvciBjb2RlIGZvciBpbnRlcm5ldCBkaXNjb25uZWN0aW9uXHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZC4nO1xyXG4gICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBlcnJvcjogeyBNZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSwgc3RhdHVzOiA1MDQgfSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnMgfHwgbmV3IFJlcXVlc3RPcHRpb25zTW9kZWwoKTtcclxuICAgIGxldCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgbW9kZWwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMsIHJlc3BvbnNlVHlwZTogY3VycmVudFJlcXVlc3RPcHRpb25zLnJlc3BvbnNlVHlwZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcclxuICAgICAgdGFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChjdXJyZW50UmVxdWVzdE9wdGlvbnMuY2FzdFJlc3BvbnNldG9DbGFzcylcclxuICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3MocmVzcG9uc2VUeXBlLCBkYXRhLCB7IGV4Y2x1ZGVFeHRyYW5lb3VzVmFsdWVzOiB0cnVlIH0pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZTxUPihVcmw6IHN0cmluZywgZGVsZXRlZElkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogUmVxdWVzdE9wdGlvbnNNb2RlbCwgcmVzcG9uc2VUeXBlPzogbmV3ICgpID0+IFQsIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICghdGhpcy5pc09ubGluZSgpKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IDUwNDsgLy8gQ3VzdG9tIGVycm9yIGNvZGUgZm9yIGludGVybmV0IGRpc2Nvbm5lY3Rpb25cclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ0ludGVybmV0IGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkLic7XHJcbiAgICAgIHZhciBlcnJvciA9IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7IGVycm9yOiB7IE1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9LCBzdGF0dXM6IDUwNCB9KTtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50UmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0T3B0aW9ucyB8fCBuZXcgUmVxdWVzdE9wdGlvbnNNb2RlbCgpO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgVXJsICsgYC8ke2RlbGV0ZWRJZH1gLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UmVxdWVzdE9wdGlvbnMuZGlzYWJsZUVycm9ySGFuZGxlcilcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KSwgbWFwKChkYXRhOiBUKSA9PiB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5jYXN0UmVzcG9uc2V0b0NsYXNzKVxyXG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhyZXNwb25zZVR5cGUsIGRhdGEsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHV0PFQ+KFVybDogc3RyaW5nLCBtb2RlbD86IGFueSwgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVzcG9uc2VUeXBlPzogbmV3ICgpID0+IFQsIHJlcXVlc3RPcHRpb25zPzogUmVxdWVzdE9wdGlvbnNNb2RlbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKCkpIHtcclxuICAgICAgY29uc3QgZXJyb3JDb2RlID0gNTA0OyAvLyBDdXN0b20gZXJyb3IgY29kZSBmb3IgaW50ZXJuZXQgZGlzY29ubmVjdGlvblxyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnSW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWQuJztcclxuICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgZXJyb3I6IHsgTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0sIHN0YXR1czogNTA0IH0pO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zIHx8IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKCk7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIG1vZGVsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zLCByZXNwb25zZVR5cGU6IGN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwYXRjaDxUPihVcmw6IHN0cmluZywgbW9kZWw/OiBhbnksIHJlc3BvbnNlVHlwZT86IG5ldyAoKSA9PiBULCBwYXJhbXM/OiBIdHRwUGFyYW1zLCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICghdGhpcy5pc09ubGluZSgpKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IDUwNDsgLy8gQ3VzdG9tIGVycm9yIGNvZGUgZm9yIGludGVybmV0IGRpc2Nvbm5lY3Rpb25cclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ0ludGVybmV0IGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkLic7XHJcbiAgICAgIHZhciBlcnJvciA9IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7IGVycm9yOiB7IE1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9LCBzdGF0dXM6IDUwNCB9KTtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50UmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0T3B0aW9ucyB8fCBuZXcgUmVxdWVzdE9wdGlvbnNNb2RlbCgpO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpLFxyXG5cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0LUxhbmd1YWdlJywgdGhpcy5jdXJyZW50TGFuZ3VhZ2UudG9TdHJpbmcoKSk7XHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ2lnbm9yZS1jb29raWVzJywgJ3RydWUnKTtcclxuICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIG1vZGVsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zLCByZXNwb25zZVR5cGU6IGN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZDxUPihVcmw6IHN0cmluZywgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPbmxpbmUoKSkge1xyXG4gICAgICBjb25zdCBlcnJvckNvZGUgPSA1MDQ7IC8vIEN1c3RvbSBlcnJvciBjb2RlIGZvciBpbnRlcm5ldCBkaXNjb25uZWN0aW9uXHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZC4nO1xyXG4gICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBlcnJvcjogeyBNZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSwgc3RhdHVzOiA1MDQgfSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnMgfHwgbmV3IFJlcXVlc3RPcHRpb25zTW9kZWwoKTtcclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgaWYgKCFjdXJyZW50UmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgeyBoZWFkZXJzOiBoZWFkZXJzLCBwYXJhbXM6IHBhcmFtcywgcmVzcG9uc2VUeXBlOiBjdXJyZW50UmVxdWVzdE9wdGlvbnMucmVzcG9uc2VUeXBlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UmVxdWVzdE9wdGlvbnMuZGlzYWJsZUVycm9ySGFuZGxlcilcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBVcGxvYWQ8VD4oVXJsOiBzdHJpbmcsIG1vZGVsPzogYW55LCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKCkpIHtcclxuICAgICAgY29uc3QgZXJyb3JDb2RlID0gNTA0OyAvLyBDdXN0b20gZXJyb3IgY29kZSBmb3IgaW50ZXJuZXQgZGlzY29ubmVjdGlvblxyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnSW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkaXNjb25uZWN0ZWQuJztcclxuICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgZXJyb3I6IHsgTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0sIHN0YXR1czogNTA0IH0pO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zIHx8IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKCk7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnNVcGRhdGVkKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIG1vZGVsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHJlcG9ydFByb2dyZXNzOiB0cnVlLCBvYnNlcnZlOiAnZXZlbnRzJyB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcclxuICAgICAgdGFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRSZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghY3VycmVudFJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkZXN0cm95SGFuZGxlcigpOiB2b2lkIHtcclxuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY2xlYXJJbnRlcnZhbFwiKTtcclxuICAgIHRoaXMuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgdmFyIGlzRW5nbGlzaCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkgPT0gXCJlblwiO1xyXG4gICAgaWYgKGVyci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgdGhyb3dFcnJvcihlcnIpOy8vZXJyb3IgNDAwIGlzIHRocm93biB0byBiZSBjYXRjaCBieSB0aGUgRm9ybSBjb21wb25lbnQgdG8gaGFuZGxlIEZsdWVudCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09IDQwMSlcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvQWRtaW4vYWNjb3VudC9sb2dpblwiXSk7XHJcbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDAzKVxyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKGlzRW5nbGlzaCA/IFwiU29ycnksIFlvdSdyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhpcyBhY3Rpb25cIiA6IFwi2LnYsNix2Kcg2YTZitizINmE2K/ZitmDINin2YTYtdmE2KfYrdmK2Ycg2YTZh9iw2Kcg2KfZhNi32YTYqFwiKTtcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MTApXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoaXNFbmdsaXNoID8gXCJDYW4gbm90IGRlbGV0ZSB0aGlzIGl0ZW0gYXMgaXQgaXMgcmVsYXRlZCB0byBvdGhlcnNcIiA6IFwi2YTYpyDZitmF2YPZhiDYrdiw2YEg2YfYsNinINin2YTYudmG2LXYsSDZhNij2YbZhyDZhdix2KrYqNi3INio2LnZhtin2LXYsSDYo9iu2LHZiVwiKTtcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MTUpXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoKGVyci5lcnJvciA/IGVyci5lcnJvci5NZXNzYWdlIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MDQpXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoKGVyci5lcnJvciA/IGVyci5lcnJvci5NZXNzYWdlIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYGVycm9yIG1lc3NhZ2UgaXM6ICR7ZXJyLmVycm9yID8gZXJyLmVycm9yLk1lc3NhZ2UgOiBlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZSh0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFcnJvck1hc3NhZ2VcIikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJzKCkge1xyXG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKSxcclxuICAgICAgJ0NsaWVudC1Mb2NhbC1UaW1lLVpvbmUnOiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUsXHJcbiAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSxcclxuICAgICAgJ2lnbm9yZS1jb29raWVzJzogJ3RydWUnXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0SGVhZGVyc1VwZGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpLFxyXG4gICAgICAnQ2xpZW50LUxvY2FsLVRpbWUtWm9uZSc6IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSxcclxuICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpLFxyXG4gICAgICAnaWdub3JlLWNvb2tpZXMnOiAndHJ1ZScsXHJcbiAgICAgICdWaWRlby1VcGxvYWQnOiAndHJ1ZScsXHJcbiAgICAgICdJbWFnZS1VcGxvYWQnOiAndHJ1ZScsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -28,17 +28,38 @@ export class StylesBundleService {
28
28
  loadStyleBundle(styleName) {
29
29
  const head = this.document.getElementsByTagName('head')[0];
30
30
  let themeLink = this.document.getElementById('client-theme');
31
- if (themeLink && themeLink.href.includes(styleName)) {
32
- return;
33
- }
34
- else if (themeLink && !themeLink.href.includes(styleName)) {
35
- themeLink.remove();
31
+ let shouldRemoveOld = false;
32
+ if (themeLink) {
33
+ // ✅ Check if current CSS already loaded (by exact filename)
34
+ const currentFileName = this.getFileName(themeLink.href);
35
+ const requestedFileName = this.getFileName(styleName);
36
+ if (currentFileName === requestedFileName) {
37
+ return; // Same CSS already loaded
38
+ }
39
+ else {
40
+ shouldRemoveOld = true; // Mark for removal after new CSS is added
41
+ }
36
42
  }
43
+ // ✅ Add new CSS first (prevents FOUC)
37
44
  const style = this.document.createElement('link');
38
45
  style.id = 'client-theme';
39
46
  style.rel = 'stylesheet';
40
47
  style.href = `${styleName}`;
41
48
  head.appendChild(style);
49
+ // ✅ Remove old CSS after new one is added (smooth transition)
50
+ if (shouldRemoveOld && themeLink) {
51
+ themeLink.remove();
52
+ }
53
+ }
54
+ /**
55
+ * Extract filename from full path
56
+ * @param path Full path or just filename
57
+ * @returns The filename only
58
+ */
59
+ getFileName(path) {
60
+ // Extract just the filename from full path
61
+ const parts = path.split('/');
62
+ return parts[parts.length - 1];
42
63
  }
43
64
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StylesBundleService, deps: [{ token: DOCUMENT }, { token: i1.BBSFTranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
44
65
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StylesBundleService, providedIn: 'root' }); }
@@ -52,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
52
73
  type: Inject,
53
74
  args: [DOCUMENT]
54
75
  }] }, { type: i1.BBSFTranslateService }] });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLWJ1bmRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvc3R5bGVzLWJ1bmRsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFBc0MsUUFBa0IsRUFBVSxnQkFBc0M7UUFBbEUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7SUFBSSxDQUFDO0lBRTdHLFVBQVUsQ0FBQyxJQUFZLEVBQUUsaUJBQXlCLEVBQUUsZ0JBQXdCO1FBQzFFLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDakQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsMEVBQTBFO1lBQ3ZJLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQ2xELFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0Q7SUFFSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWEsRUFBRSxjQUFzQixFQUFFLGVBQXVCO1FBQzVFLElBQUksS0FBSyxJQUFJLE9BQU87WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzs7WUFFakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQWlCO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFvQixDQUFDO1FBRWhGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ25ELE9BQU87U0FDUjthQUNJLElBQUksU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekQsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsS0FBSyxDQUFDLEVBQUUsR0FBRyxjQUFjLENBQUM7UUFDMUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQzsrR0F4Q1UsbUJBQW1CLGtCQUVWLFFBQVE7bUhBRmpCLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHYyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3R5bGVzQnVuZGxlU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbG9hZFRoZW1lcyhsYW5nOiBzdHJpbmcsIGJ1bmRsZUVuZ2xpc2hOYW1lOiBzdHJpbmcsIGJ1bmRsZUFyYWJpY05hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKGxhbmcgPT0gXCJhclwiKSB7XHJcbiAgICAgIHRoaXMubG9hZFN0eWxlQnVuZGxlKGJ1bmRsZUFyYWJpY05hbWUudG9TdHJpbmcoKSlcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnNldEF0dHJpYnV0ZShcImItbGFuZ1wiLCBcImFyXCIpOyAvL3VzZSBiLWxhbmcgaW5zdGVhZCBvZiBsYW5nIHRvIGZpeCBmaXJlZm94IG51bWJlciBpbnB1dHMgaW4gQXJhYmljIGxvY2FsZVxyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKFwiZGlyXCIsIFwicnRsXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2FkU3R5bGVCdW5kbGUoYnVuZGxlRW5nbGlzaE5hbWUudG9TdHJpbmcoKSlcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnNldEF0dHJpYnV0ZShcImItbGFuZ1wiLCBcImVuXCIpO1xyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKFwiZGlyXCIsIFwibHRyXCIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGxvYWRUaGVtZXNDb2xvcih0aGVtZTogc3RyaW5nLCBidW5kbGVEYXJrTmFtZTogc3RyaW5nLCBidW5kbGVMaWdodE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoZW1lID09IFwiTGlnaHRcIilcclxuICAgICAgdGhpcy5sb2FkU3R5bGVCdW5kbGUoYnVuZGxlTGlnaHROYW1lLnRvU3RyaW5nKCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmxvYWRTdHlsZUJ1bmRsZShidW5kbGVEYXJrTmFtZS50b1N0cmluZygpKVxyXG4gIH1cclxuXHJcbiAgbG9hZFN0eWxlQnVuZGxlKHN0eWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xyXG5cclxuICAgIGxldCB0aGVtZUxpbmsgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGllbnQtdGhlbWUnKSBhcyBIVE1MTGlua0VsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHRoZW1lTGluayAmJiB0aGVtZUxpbmsuaHJlZi5pbmNsdWRlcyhzdHlsZU5hbWUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoZW1lTGluayAmJiAhdGhlbWVMaW5rLmhyZWYuaW5jbHVkZXMoc3R5bGVOYW1lKSkge1xyXG4gICAgICB0aGVtZUxpbmsucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xyXG4gICAgc3R5bGUuaWQgPSAnY2xpZW50LXRoZW1lJztcclxuICAgIHN0eWxlLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgIHN0eWxlLmhyZWYgPSBgJHtzdHlsZU5hbWV9YDtcclxuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLWJ1bmRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvc3R5bGVzLWJ1bmRsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFBc0MsUUFBa0IsRUFBVSxnQkFBc0M7UUFBbEUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7SUFBSSxDQUFDO0lBRTdHLFVBQVUsQ0FBQyxJQUFZLEVBQUUsaUJBQXlCLEVBQUUsZ0JBQXdCO1FBQzFFLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsMEVBQTBFO1lBQ3ZJLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0Q7SUFFSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWEsRUFBRSxjQUFzQixFQUFFLGVBQXVCO1FBQzVFLElBQUksS0FBSyxJQUFJLE9BQU87WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzs7WUFFakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWlCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFvQixDQUFDO1FBQ2hGLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLFNBQVMsRUFBRTtZQUNiLDREQUE0RDtZQUM1RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdEQsSUFBSSxlQUFlLEtBQUssaUJBQWlCLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQywwQkFBMEI7YUFDbkM7aUJBQU07Z0JBQ0wsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLDBDQUEwQzthQUNuRTtTQUNGO1FBRUQsc0NBQXNDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxFQUFFLEdBQUcsY0FBYyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDhEQUE4RDtRQUM5RCxJQUFJLGVBQWUsSUFBSSxTQUFTLEVBQUU7WUFDaEMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUdEOzs7O0tBSUM7SUFDTyxXQUFXLENBQUMsSUFBWTtRQUM5QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBaEVVLG1CQUFtQixrQkFFVixRQUFRO21IQUZqQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR2MsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQkJTRlRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0eWxlc0J1bmRsZVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gIGxvYWRUaGVtZXMobGFuZzogc3RyaW5nLCBidW5kbGVFbmdsaXNoTmFtZTogc3RyaW5nLCBidW5kbGVBcmFiaWNOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChsYW5nID09IFwiYXJcIikge1xyXG4gICAgICB0aGlzLmxvYWRTdHlsZUJ1bmRsZShidW5kbGVBcmFiaWNOYW1lLnRvU3RyaW5nKCkpO1xyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKFwiYi1sYW5nXCIsIFwiYXJcIik7IC8vdXNlIGItbGFuZyBpbnN0ZWFkIG9mIGxhbmcgdG8gZml4IGZpcmVmb3ggbnVtYmVyIGlucHV0cyBpbiBBcmFiaWMgbG9jYWxlXHJcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoXCJkaXJcIiwgXCJydGxcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRTdHlsZUJ1bmRsZShidW5kbGVFbmdsaXNoTmFtZS50b1N0cmluZygpKTtcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnNldEF0dHJpYnV0ZShcImItbGFuZ1wiLCBcImVuXCIpO1xyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKFwiZGlyXCIsIFwibHRyXCIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGxvYWRUaGVtZXNDb2xvcih0aGVtZTogc3RyaW5nLCBidW5kbGVEYXJrTmFtZTogc3RyaW5nLCBidW5kbGVMaWdodE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoZW1lID09IFwiTGlnaHRcIilcclxuICAgICAgdGhpcy5sb2FkU3R5bGVCdW5kbGUoYnVuZGxlTGlnaHROYW1lLnRvU3RyaW5nKCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmxvYWRTdHlsZUJ1bmRsZShidW5kbGVEYXJrTmFtZS50b1N0cmluZygpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFN0eWxlQnVuZGxlKHN0eWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xyXG4gICAgbGV0IHRoZW1lTGluayA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaWVudC10aGVtZScpIGFzIEhUTUxMaW5rRWxlbWVudDtcclxuICAgIGxldCBzaG91bGRSZW1vdmVPbGQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhlbWVMaW5rKSB7XHJcbiAgICAgIC8vIOKchSBDaGVjayBpZiBjdXJyZW50IENTUyBhbHJlYWR5IGxvYWRlZCAoYnkgZXhhY3QgZmlsZW5hbWUpXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlTmFtZSA9IHRoaXMuZ2V0RmlsZU5hbWUodGhlbWVMaW5rLmhyZWYpO1xyXG4gICAgICBjb25zdCByZXF1ZXN0ZWRGaWxlTmFtZSA9IHRoaXMuZ2V0RmlsZU5hbWUoc3R5bGVOYW1lKTtcclxuXHJcbiAgICAgIGlmIChjdXJyZW50RmlsZU5hbWUgPT09IHJlcXVlc3RlZEZpbGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBTYW1lIENTUyBhbHJlYWR5IGxvYWRlZFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNob3VsZFJlbW92ZU9sZCA9IHRydWU7IC8vIE1hcmsgZm9yIHJlbW92YWwgYWZ0ZXIgbmV3IENTUyBpcyBhZGRlZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIEFkZCBuZXcgQ1NTIGZpcnN0IChwcmV2ZW50cyBGT1VDKVxyXG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgIHN0eWxlLmlkID0gJ2NsaWVudC10aGVtZSc7XHJcbiAgICBzdHlsZS5yZWwgPSAnc3R5bGVzaGVldCc7XHJcbiAgICBzdHlsZS5ocmVmID0gYCR7c3R5bGVOYW1lfWA7XHJcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcclxuXHJcbiAgICAvLyDinIUgUmVtb3ZlIG9sZCBDU1MgYWZ0ZXIgbmV3IG9uZSBpcyBhZGRlZCAoc21vb3RoIHRyYW5zaXRpb24pXHJcbiAgICBpZiAoc2hvdWxkUmVtb3ZlT2xkICYmIHRoZW1lTGluaykge1xyXG4gICAgICB0aGVtZUxpbmsucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIEV4dHJhY3QgZmlsZW5hbWUgZnJvbSBmdWxsIHBhdGhcclxuICogQHBhcmFtIHBhdGggRnVsbCBwYXRoIG9yIGp1c3QgZmlsZW5hbWVcclxuICogQHJldHVybnMgVGhlIGZpbGVuYW1lIG9ubHlcclxuICovXHJcbiAgcHJpdmF0ZSBnZXRGaWxlTmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBmaWxlbmFtZSBmcm9tIGZ1bGwgcGF0aFxyXG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=